我试图弄清楚如何在盒子的正面和背面使用两种不同的纹理。
每当我缩放框(ExtrudeGeometry)时,UV贴图似乎都不会更新。因此,我要为盒子的正面和背面定义自己的UV贴图。

要定义正面UV贴图,我使用:

geometry.faceVertexUvs[0]


相应地工作。
对于背面UV贴图,我使用:

geometry.faceVertexUvs[1];


但是,我无法访问此“第二”层UV贴图。

所以我的问题是:


是否可以根据对象的比例更新UV贴图?
是否可以访问材料中的“第二”层UV贴图?


我在这里创建了一个示例:jsfiddle

我创建了三个具有三个不同比例的不同盒子。从左至右:0.01 x 2.97 x 2.1、0.01 x 1 x 1和0.01 x 0.297 x 0.21。在最左侧的盒子上,纹理仅覆盖盒子的一小部分。中间的框具有正确的纹理。右边的框具有更新的uv贴图(否则,只会显示一小部分纹理)。
(我必须使用盒子上的小秤!)

我希望有人能帮助我!

Three.js 84

最佳答案

您可以在顶点着色器中定义attribute vec2 uv2,然后像往常一样访问它。

precision highp int;
precision highp float;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

attribute vec2 uv;
attribute vec2 uv2;
attribute vec3 normal;
attribute vec3 position;

void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}

关于javascript - Three.js在单个对象上有多个UV贴图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41853041/

10-12 04:06