我试图从头开始创建一个带有纹理贴图的着色器。看看其他材料(着色器)及其来源,似乎他们都有一个" uv"属性传递给他们。我很难弄清楚uv属性的生成和分配位置。它是在几何,材料还是两者上设置的?
我使用默认的THREE.Geometry对象,例如THREE.SphereGeometry
。我假设那些已经设置了属性,但是当我将他们的网格视为场景孩子时,我没有看到他们设置任何属性键/值。
这是由ShaderMaterial
或其他:
顶点着色器
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中是否有一些魔法可以在着色器,对象和属性之间建立关系?
我发现了一个THREE.js generate UV coordinate问题,但我再次猜测三个默认对象是否已正确设置了UV属性?
我特别想在这种情况下使用RawShaderMaterial。有人能指出我在THREE源中为对象生成UV /传递到着色器的位置,或者告诉我如何在运行时正确设置要在片段/顶点中使用的UV?