.. | .. |
---|
2661 | 2661 | if (false) // slow && stepout && onein) |
---|
2662 | 2662 | { |
---|
2663 | 2663 | // sound |
---|
2664 | | - cVector eye = CameraPane.theRenderer.eyeCamera.location; |
---|
| 2664 | + cVector eye = Globals.theRenderer.EyeCamera().location; |
---|
2665 | 2665 | |
---|
2666 | 2666 | Vertex v = GetVertex(0); |
---|
2667 | 2667 | |
---|
.. | .. |
---|
3155 | 3155 | */ |
---|
3156 | 3156 | } |
---|
3157 | 3157 | |
---|
3158 | | - void GenUV() |
---|
| 3158 | + void UnfoldUV() |
---|
| 3159 | + { |
---|
| 3160 | + for (int i = 0; i < VertexCount(); i++) |
---|
| 3161 | + { |
---|
| 3162 | + Vertex v = GetVertex(i); |
---|
| 3163 | + |
---|
| 3164 | + v.x = v.s; |
---|
| 3165 | + v.y = v.t; |
---|
| 3166 | + v.z = 0; |
---|
| 3167 | + |
---|
| 3168 | + v.norm.x = 0; |
---|
| 3169 | + v.norm.y = 0; |
---|
| 3170 | + v.norm.z = 1; |
---|
| 3171 | + |
---|
| 3172 | + SetVertex(v, i); |
---|
| 3173 | + } |
---|
| 3174 | + } |
---|
| 3175 | + |
---|
| 3176 | + float power = 2; |
---|
| 3177 | + |
---|
| 3178 | + void GenUV() // float power) |
---|
3159 | 3179 | { |
---|
3160 | 3180 | Trim(); |
---|
3161 | 3181 | |
---|
.. | .. |
---|
3219 | 3239 | y -= 0.5; |
---|
3220 | 3240 | z -= 0.5; |
---|
3221 | 3241 | |
---|
| 3242 | + double ax = Math.abs(x); |
---|
| 3243 | + double ay = Math.abs(y); |
---|
| 3244 | + double max = ax; |
---|
| 3245 | + if (max < ay) |
---|
| 3246 | + { |
---|
| 3247 | + max = ay; |
---|
| 3248 | + } |
---|
| 3249 | + |
---|
| 3250 | + x /= max; |
---|
| 3251 | + y /= max; |
---|
| 3252 | + |
---|
| 3253 | + double angle = Math.acos(Math.abs(z*2)); |
---|
| 3254 | + |
---|
| 3255 | + double k = angle / Math.PI * 2; |
---|
| 3256 | + |
---|
| 3257 | + // k == 0 => uv = 0 (center) |
---|
| 3258 | + // k == 1 => uv = -1,1 (border) |
---|
| 3259 | + |
---|
| 3260 | + if (i == 0) |
---|
| 3261 | + System.out.println("power = " + power); |
---|
| 3262 | + |
---|
| 3263 | + double length1 = (ax+ay)/max; |
---|
| 3264 | + double length2 = Math.sqrt(ax*ax + ay*ay) / max; |
---|
| 3265 | + |
---|
| 3266 | + double t = k; |
---|
| 3267 | + |
---|
| 3268 | + t = Math.pow(t, 3); |
---|
| 3269 | + |
---|
| 3270 | + // Interpolate between k/length2 (center) and k (border) |
---|
| 3271 | + k = k / length2 * (1 - t) + k * t; |
---|
| 3272 | + |
---|
| 3273 | + double u = k*x; |
---|
| 3274 | + double v = k*y; |
---|
| 3275 | + |
---|
| 3276 | + u /= 2; |
---|
| 3277 | + v /= 2; |
---|
| 3278 | + u += 0.5; |
---|
| 3279 | + v += 0.5; |
---|
| 3280 | + |
---|
| 3281 | + uvmap[i2] = (float) u; |
---|
| 3282 | + uvmap[i2+1] = (float) v; |
---|
| 3283 | + } |
---|
| 3284 | + } |
---|
| 3285 | + |
---|
| 3286 | + void GenUVold(float power) |
---|
| 3287 | + { |
---|
| 3288 | + Trim(); |
---|
| 3289 | + |
---|
| 3290 | + cVector boxcenter = null; |
---|
| 3291 | + cVector minima, maxima; |
---|
| 3292 | + minima = new cVector(); |
---|
| 3293 | + maxima = new cVector(); |
---|
| 3294 | + minima.x = minima.y = minima.z = Double.MAX_VALUE; |
---|
| 3295 | + maxima.x = maxima.y = maxima.z = -Double.MAX_VALUE; |
---|
| 3296 | + for (int i = 0; i < VertexCount(); i++) |
---|
| 3297 | + { |
---|
| 3298 | + Vertex v = GetVertex(i); |
---|
| 3299 | + |
---|
| 3300 | + if (minima.x > v.x) |
---|
| 3301 | + { |
---|
| 3302 | + minima.x = v.x; |
---|
| 3303 | + } |
---|
| 3304 | + if (minima.y > v.y) |
---|
| 3305 | + { |
---|
| 3306 | + minima.y = v.y; |
---|
| 3307 | + } |
---|
| 3308 | + if (minima.z > v.z) |
---|
| 3309 | + { |
---|
| 3310 | + minima.z = v.z; |
---|
| 3311 | + } |
---|
| 3312 | + |
---|
| 3313 | + if (maxima.x < v.x) |
---|
| 3314 | + { |
---|
| 3315 | + maxima.x = v.x; |
---|
| 3316 | + } |
---|
| 3317 | + if (maxima.y < v.y) |
---|
| 3318 | + { |
---|
| 3319 | + maxima.y = v.y; |
---|
| 3320 | + } |
---|
| 3321 | + if (maxima.z < v.z) |
---|
| 3322 | + { |
---|
| 3323 | + maxima.z = v.z; |
---|
| 3324 | + } |
---|
| 3325 | + } |
---|
| 3326 | + |
---|
| 3327 | + boxcenter = new cVector((maxima.x + minima.x) / 2, (maxima.y + minima.y) / 2, (maxima.z + minima.z) / 2); |
---|
| 3328 | + int i2 = 0, i3 = 0; |
---|
| 3329 | + for (int i = 0; i < positions.length/3; i++, i3 += 3, i2 += 2) |
---|
| 3330 | + { |
---|
| 3331 | +// //uvmap[i2] = (float) normals[i3]*0.5f + 0.5f; // v.x; |
---|
| 3332 | +// //uvmap[i2 + 1] = (float) normals[i3+1]*0.5f + 0.5f; //z; |
---|
| 3333 | +// uvmap[i2] = (float) (positions[i3] - boxcenter.x); |
---|
| 3334 | +// uvmap[i2 + 1] = (float) (positions[i3+2] - boxcenter.z); |
---|
| 3335 | +// uvmap[i2] = (float) Math.atan2(positions[i3+1] - boxcenter.y, positions[i3] - boxcenter.x); |
---|
| 3336 | +// uvmap[i2 + 1] = (float)(positions[i3+2] - boxcenter.z); |
---|
| 3337 | + // box UV |
---|
| 3338 | + double x = positions[i3] - minima.x; // - Math.floor(positions[i3]); |
---|
| 3339 | + double y = positions[i3+1] - minima.y; // - Math.floor(positions[i3+1]); |
---|
| 3340 | + double z = positions[i3+2] - minima.z; // - Math.floor(positions[i3+2]); |
---|
| 3341 | + |
---|
| 3342 | + // [-1/2, 1/2] |
---|
| 3343 | + x /= maxima.x - minima.x; |
---|
| 3344 | + y /= maxima.y - minima.y; |
---|
| 3345 | + z /= maxima.z - minima.z; |
---|
| 3346 | + |
---|
| 3347 | + x -= 0.5; |
---|
| 3348 | + y -= 0.5; |
---|
| 3349 | + z -= 0.5; |
---|
| 3350 | + |
---|
3222 | 3351 | // x *= 2; |
---|
3223 | 3352 | // y *= 2; |
---|
3224 | 3353 | // z *= 2; |
---|
.. | .. |
---|
3245 | 3374 | |
---|
3246 | 3375 | z = Math.cos(angle/2); |
---|
3247 | 3376 | |
---|
| 3377 | + assert(z >= 0); |
---|
| 3378 | + assert(z <= 1); |
---|
| 3379 | + |
---|
| 3380 | + /**/ |
---|
| 3381 | + //z = Math.pow(z, power); //1.08f); |
---|
| 3382 | + |
---|
| 3383 | + if (i == 0) |
---|
| 3384 | + System.out.println("power = " + power); |
---|
| 3385 | + |
---|
3248 | 3386 | // sqrt(k2*x2 + k2*z2 + y2) = length |
---|
3249 | 3387 | // k2*x2 + k2*z2 = length2 - y2 |
---|
3250 | 3388 | // k2 = (length2 - y2) / (x2 + z2) |
---|
.. | .. |
---|
3264 | 3402 | |
---|
3265 | 3403 | x *= k; |
---|
3266 | 3404 | y *= k; |
---|
| 3405 | + /**/ |
---|
3267 | 3406 | |
---|
3268 | 3407 | double max = Math.abs(x); |
---|
3269 | 3408 | if (max < Math.abs(y)) |
---|
.. | .. |
---|
3276 | 3415 | } |
---|
3277 | 3416 | |
---|
3278 | 3417 | // max = Math.sqrt(max*2)/2; |
---|
| 3418 | +// double x2 = Math.pow(Math.abs(x), 1/power); |
---|
| 3419 | +// double y2 = Math.pow(Math.abs(y), 1/power); |
---|
| 3420 | +// double z2 = Math.pow(Math.abs(z), 1/power); |
---|
| 3421 | +// max = Math.pow(x2 + y2 + z2, power); |
---|
3279 | 3422 | |
---|
3280 | 3423 | // if (!(max > 0)) |
---|
3281 | | - assert(max > 0); |
---|
3282 | | - |
---|
| 3424 | + //assert(max > 0); |
---|
| 3425 | + assert(max >= 0); |
---|
| 3426 | + |
---|
3283 | 3427 | x /= max; |
---|
3284 | 3428 | y /= max; |
---|
3285 | 3429 | z /= max; |
---|
.. | .. |
---|
4428 | 4572 | } |
---|
4429 | 4573 | } |
---|
4430 | 4574 | |
---|
4431 | | - void CullVertex(javax.media.opengl.GL gl, boolean shadow) |
---|
| 4575 | + void CullVertex(javax.media.opengl.GL glNOTUSED, boolean shadowNOTUSED) |
---|
4432 | 4576 | { |
---|
4433 | 4577 | CameraPane.glu.gluProject(vect5.x,vect5.y,vect5.z, |
---|
4434 | 4578 | CameraPane.tempmat,0, CameraPane.tempmat2,0, |
---|
.. | .. |
---|
4460 | 4604 | // june 2014 |
---|
4461 | 4605 | // Camera parentcam = cam; |
---|
4462 | 4606 | // |
---|
4463 | | -// if (cam == CameraPane.theRenderer.cameras[0]) |
---|
| 4607 | +// if (cam == Globals.theRenderer.cameras[0]) |
---|
4464 | 4608 | // { |
---|
4465 | | -// parentcam = CameraPane.theRenderer.cameras[1]; |
---|
| 4609 | +// parentcam = Globals.theRenderer.cameras[1]; |
---|
4466 | 4610 | // } |
---|
4467 | 4611 | // |
---|
4468 | | -// if (cam == CameraPane.theRenderer.cameras[1]) |
---|
| 4612 | +// if (cam == Globals.theRenderer.cameras[1]) |
---|
4469 | 4613 | // { |
---|
4470 | | -// parentcam = CameraPane.theRenderer.cameras[0]; |
---|
| 4614 | +// parentcam = Globals.theRenderer.cameras[0]; |
---|
4471 | 4615 | // } |
---|
4472 | 4616 | |
---|
4473 | 4617 | gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, CameraPane.tempmat, 0); |
---|
.. | .. |
---|
7560 | 7704 | s3 = new cVector(); |
---|
7561 | 7705 | } |
---|
7562 | 7706 | |
---|
7563 | | - CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); |
---|
| 7707 | + Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); |
---|
7564 | 7708 | |
---|
7565 | 7709 | try |
---|
7566 | 7710 | { |
---|
.. | .. |
---|
7655 | 7799 | { |
---|
7656 | 7800 | if (i++%100 == 0) |
---|
7657 | 7801 | { |
---|
7658 | | - CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); |
---|
| 7802 | + Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); |
---|
7659 | 7803 | System.out.println("#faces = " + faces.size()); |
---|
7660 | 7804 | // if (i != 1) |
---|
7661 | 7805 | // break; |
---|
.. | .. |
---|
7699 | 7843 | //Trim(true,cJME.gennormals,true,false); // doesn't work |
---|
7700 | 7844 | Trim(true,false,false,false,false); |
---|
7701 | 7845 | |
---|
7702 | | - CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR)); |
---|
| 7846 | + Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR)); |
---|
7703 | 7847 | } |
---|
7704 | 7848 | |
---|
7705 | 7849 | void UpdateIndices(Face face, Face minface) |
---|