我想让 UV 不被插值,这样我就可以获得精确的像素(作为初学者,我从 那个视频 中看到了这一点)。 如何得到与视频中相同的结果?
如果我在改变
flat
(我将其命名为Uv
)之前通过了vUv
:
flat varying vec2 vUv;
我得到了 VS Code 扩展中的错误 WebGL GLSL 编辑器:
'flat' : Reserved word.
'flat' : not supported for this version or the enabled extensions
控制台中出现来自 Three.js 的 错误:
THREE.WebGLProgram: Shader Error 0 - VALIDATE_STATUS false
Material Name:
Material Type: RawShaderMaterial
Program Info Log: Vertex shader is not compiled.
VERTEX
ERROR: 0:14: 'flat' : Illegal use of reserved word
9: attribute vec2 uv;
10:
11: varying float time;
12: varying vec3 vPostion;
13: varying vec3 vNormal;
> 14: flat varying vec2 vUv;
15:
16: uniform mat4 viewMatrix;
为什么会出现错误的答案可能是:
我认为 WebGL 中使用的 GLSL 版本不支持“平面”。
来自那个答案,同样的错误。
但答案说明了如何获得标准化法线(我想要 UV 代替)。我也不明白在 Three.js 中从哪里获取
vertex_view_space
(据我所知,从相机角度看对象的位置),但这并不重要,因为它用于计算顶点法线。我可能错了。
我找到了如何停止颜色插值 - answer,但我需要 UV。
有人可以告诉我这里的解决方案是什么吗?
GLSL ES 1.00(
OpenGL ES 着色语言 1.00 规范)不支持
flat
限定符。您必须使用具有 #version 300 es
的着色器(请参阅OpenGL ES 着色语言 3.00 规范)。在 Three.js 中,这可以通过在 .glslVersion
: 中将属性 THREE.GLSL3
设置为 ShaderMaterial
来实现。
const material = new THREE.ShaderMaterial( {
glslVersion: THREE.GLSL3,
// [...]
} );