.. | .. |
---|
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, |
---|