我想让UV不被内插,这样我就可以得到准确的像素(作为一个初学者,我从that video开始就看到了这一点).How to get the same result as in the video?

如果我在Uv的变化之前超过flat(我将其命名为vUv):

flat varying vec2 vUv;

我明白了,errors from VS Code extentsion,WebGL GLSL Editor:

'flat' : Reserved word. 
'flat' : not supported for this version or the enabled extensions

控制台中的error from 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;

answer why it gives an error人可能是:

我认为WebGL中使用的GLSL版本不支持‘Flat’.

在相同的错误上从that answer.

但答案是如何获得规格化法线(我想要UV).我也不知道在Three.js中在哪里可以得到vertex_view_space(据我所知,从相机透视的对象的位置),但对于计算顶点法线来说,这并不重要.我可能错了.

我知道如何停止COLOR-answer的插补,但我需要UV.

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

推荐答案

GLSL ES 1.00(OpenGL ES Shading Language 1.00 Specification)不支持flat限定符.您必须使用#version 300 es的着色器(请参见OpenGL ES Shading Language 3.00 Specification).在Three.js中,这可以通过将ShaderMaterial:

const material = new THREE.ShaderMaterial( {
   glslVersion: THREE.GLSL3,
   // [...]
} );

请注意,这当然只适用于WebGL 2.0上下文(但是,如果可能的话,这是three.js中的默认设置).

如果不使用Three.js ShaderMaterial,则必须将版本信息放在着色器的第一行

#version 300 es

此外,您需要将着色器代码从GLSL ES 1.00迁移到GLSL ES 3.00.

Javascript相关问答推荐

如何在使用fast-xml-parser构建ML时包括属性值?

类型自定义lazy Promise. all

无法在nextjs应用程序中通过id从mongoDB删除'

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

jQuery s data()[storage object]在vanilla JavaScript中?'

为什么按钮会随浮动属性一起移动?

无法检测卡片重叠状态的问题

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

第三方包不需要NODE_MODULES文件夹就可以工作吗?

MarkLogic-earch.suggest不返回任何值

如何在FastAPI中为通过file:/URL加载的本地HTML文件启用CORS?

更新Redux存储中的对象数组

有没有一种直接的方法可以深度嵌套在一个JavaScript对象中?

无法重定向到Next.js中的动态URL

在SuperBase JS客户端中寻址JSON数据

如何使用Reaction路由导航测试挂钩?

将字体样式应用于material -UI条形图图例

当S点击按钮时,我如何才能改变它的样式?

如何用react组件替换dom元素?

由于http.get,*ngIf的延迟很大