提交 fedd618a 编写于 作者: W WestLangley

Unflip PMREM CubeUV tiles

上级 3c0ec00a
......@@ -65,20 +65,20 @@ TextureCubeUVNode.Nodes = ( function () {
var getUV = new FunctionNode(
`vec2 getUV(vec3 direction, float face) {
vec2 uv;
if (face == 0.0) {
uv = vec2(-direction.z, direction.y) / abs(direction.x);
} else if (face == 1.0) {
uv = vec2(direction.x, -direction.z) / abs(direction.y);
} else if (face == 2.0) {
uv = direction.xy / abs(direction.z);
} else if (face == 3.0) {
uv = vec2(direction.z, direction.y) / abs(direction.x);
} else if (face == 4.0) {
uv = direction.xz / abs(direction.y);
} else {
uv = vec2(-direction.x, direction.y) / abs(direction.z);
}
return 0.5 * (uv + 1.0);
if (face == 0.0) {
uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x
} else if (face == 1.0) {
uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y
} else if (face == 2.0) {
uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z
} else if (face == 3.0) {
uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x
} else if (face == 4.0) {
uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y
} else {
uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z
}
return 0.5 * (uv + 1.0);
}` );
getUV.useKeywords = false;
......
......@@ -794,26 +794,30 @@ attribute vec3 position;
attribute vec2 uv;
attribute float faceIndex;
varying vec3 vOutputDirection;
// RH coordinate system; PMREM face-indexing convention
vec3 getDirection(vec2 uv, float face) {
uv = 2.0 * uv - 1.0;
vec3 direction = vec3(uv, 1.0);
if (face == 0.0) {
direction = direction.zyx;
direction.z *= -1.0;
direction = direction.zyx; // ( 1, v, u ) pos x
} else if (face == 1.0) {
direction = direction.xzy;
direction.z *= -1.0;
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
} else if (face == 2.0) {
direction.x *= -1.0; // ( -u, v, 1 ) pos z
} else if (face == 3.0) {
direction = direction.zyx;
direction.x *= -1.0;
direction.xz *= -1.0; // ( -1, v, -u ) neg x
} else if (face == 4.0) {
direction = direction.xzy;
direction.y *= -1.0;
direction.xy *= -1.0; // ( -u, -1, v ) neg y
} else if (face == 5.0) {
direction.xz *= -1.0;
direction.z *= -1.0; // ( u, v, -1 ) neg z
}
return direction;
}
void main() {
vOutputDirection = getDirection(uv, faceIndex);
gl_Position = vec4( position, 1.0 );
......
......@@ -27,20 +27,21 @@ float getFace(vec3 direction) {
return face;
}
// RH coordinate system; PMREM face-indexing convention
vec2 getUV(vec3 direction, float face) {
vec2 uv;
if (face == 0.0) {
uv = vec2(-direction.z, direction.y) / abs(direction.x);
uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x
} else if (face == 1.0) {
uv = vec2(direction.x, -direction.z) / abs(direction.y);
uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y
} else if (face == 2.0) {
uv = direction.xy / abs(direction.z);
uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z
} else if (face == 3.0) {
uv = vec2(direction.z, direction.y) / abs(direction.x);
uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x
} else if (face == 4.0) {
uv = direction.xz / abs(direction.y);
uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y
} else {
uv = vec2(-direction.x, direction.y) / abs(direction.z);
uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z
}
return 0.5 * (uv + 1.0);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册