无法避免 UV 插值:“'flat':非法使用保留字”

问题描述 投票:0回答:1

我想让 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。

有人可以告诉我这里的解决方案是什么吗?

javascript three.js glsl webgl webgl2
1个回答
0
投票

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,
   // [...]
} );
© www.soinside.com 2019 - 2024. All rights reserved.