// cube map のテスト // Vueで画角90度、6方向のカメラで6回レンダリングした画像と // Vueで360度パノラマを1:1で生成後、縦1/2にしてCubemapに変換した画像を // 見比べてみる /* @pjs preload="panorama03c_cross_a.png,panorama03c_cross_b.png"; */ PImage img0, img1; int cnt; void setup() { size(640, 480, P3D); img0 = loadImage("panorama03c_cross_a.png"); img1 = loadImage("panorama03c_cross_b.png"); textureMode(NORMAL); // テクスチャUV指定を0.0-1.0で行うよう指定 float fov = radians(60); perspective(fov, float(width) / float(height), 1, 9000); cnt = 0; } void draw() { background(0); if (mousePressed) { stroke(128); strokeWeight(1.0); } else { noStroke(); } pushMatrix(); translate(width/2, height/2, 0); rotateX(radians(mouseY - (height/2)) * 0.5); rotateY(radians(mouseX - (width/2))); float d = 2000; float x0 = -d; float x1 = d; float y0 = -d; float y1 = d; float z0 = -d; float z1 = d; float u0, v0; float ua = 0.25; float va = 0.25; beginShape(QUADS); if ((cnt % 120) >= 60) { texture(img0); } else { texture(img1); } u0 = 0; v0 = 0.25; vertex(x0, y0, z1, u0, v0); vertex(x0, y0, z0, u0 + ua, v0); vertex(x0, y1, z0, u0 + ua, v0 + va); vertex(x0, y1, z1, u0, v0 + va); u0 = 0.25; v0 = 0.25; vertex(x0, y0, z0, u0, v0); vertex(x1, y0, z0, u0 + ua, v0); vertex(x1, y1, z0, u0 + ua, v0 + va); vertex(x0, y1, z0, u0, v0 + va); u0 = 0.5; v0 = 0.25; vertex(x1, y0, z0, u0, v0); vertex(x1, y0, z1, u0 + ua, v0); vertex(x1, y1, z1, u0 + ua, v0 + va); vertex(x1, y1, z0, u0, v0 + va); u0 = 0.75; v0 = 0.25; vertex(x1, y0, z1, u0, v0); vertex(x0, y0, z1, u0 + ua, v0); vertex(x0, y1, z1, u0 + ua, v0 + va); vertex(x1, y1, z1, u0, v0 + va); // 上面 u0 = 0.25; v0 = 0; vertex(x0, y0, z1, u0, v0); vertex(x1, y0, z1, u0 + ua, v0); vertex(x1, y0, z0, u0 + ua, v0 + va); vertex(x0, y0, z0, u0, v0 + va); // 底面 u0 = 0.25; v0 = 0.5; vertex(x0, y1, z0, u0, v0); vertex(x1, y1, z0, u0 + ua, v0); vertex(x1, y1, z1, u0 + ua, v0 + va); vertex(x0, y1, z1, u0, v0 + va); endShape(); popMatrix(); cnt++; }