我正在尝试从头开始创建一个带有纹理贴图的着色器。查看其他材质(着色器)及其来源,似乎它们都具有传递给它们的“uv”属性。我很难弄清楚该 uv 属性是在哪里生成和分配的。它是设置在几何体、材料还是两者上?
我正在使用默认的 THREE.Geometry 对象,例如THREE.SphereGeometry
. 我假设那些已经在它们上设置了属性,但是当我将它们的网格作为场景子项检查时,我看不到它们上设置了任何属性键/值。
ShaderMaterial
这是由 a或 other生成的着色器的示例:
顶点着色器
attribute vec2 uv;
varying vec2 vUv;
void main() {
vUv = uv;
片段着色器
varying vec2 vUv;
uniform sampler2D map;
void main() {
vec4 texel = texture2D( map, vUv );
但是,当我尝试上述操作时,我的着色器(使用 RawShaderMaterial)只是变为空白并且我得到“无法编译”。
三中是否有一些魔法可以在着色器、对象和属性之间建立关系?
我发现了一个THREE.js 生成 UV 坐标的问题,但我再次猜测三个默认对象已经正确设置了 UV 属性?
在这种情况下,我特别想使用 RawShaderMaterial。有人可以指出三个源中为对象生成 UV/传递给着色器的位置,或者告诉我如何正确设置 UV 以在运行时在片段/顶点中使用?