Javascript Ashima Perlin噪波着色器不适用于最新版本的Three.JS

Javascript Ashima Perlin噪波着色器不适用于最新版本的Three.JS,javascript,3d,three.js,webgl,shader,Javascript,3d,Three.js,Webgl,Shader,为了能够使用最新的Three.JS,我做了最后的努力,希望SO上有人遇到过这个问题,因为Google什么也没给我 我正在使用Ashima Perlin噪波着色器(请参见示例)—— 如果我使用Three.JS的48版(最新版本是59版),我可以很好地完成这项工作 尝试使用此的最新版本会导致以下错误: ERROR: 0:301: 'objectMatrix' : undeclared identifier ERROR: 0:301: 'objectMatrix' : left of '[' is

为了能够使用最新的Three.JS,我做了最后的努力,希望SO上有人遇到过这个问题,因为Google什么也没给我

我正在使用Ashima Perlin噪波着色器(请参见示例)——

如果我使用Three.JS的48版(最新版本是59版),我可以很好地完成这项工作

尝试使用此的最新版本会导致以下错误:

ERROR: 0:301: 'objectMatrix' : undeclared identifier 
ERROR: 0:301: 'objectMatrix' :  left of '[' is not of type array, matrix, or vector  
ERROR: 0:301: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:301: 'objectMatrix' :  left of '[' is not of type array, matrix, or vector  
ERROR: 0:301: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:301: 'objectMatrix' :  left of '[' is not of type array, matrix, or vector  
ERROR: 0:301: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:301: 'constructor' : not enough data provided for construction 
 three.min.js:40

这通常是我会为其他人调试、修复并推送到git的东西,但我没有C知识或着色器知识来调试它。

好的,所以任何试图找出此演示为什么不能与最新版本的three.js一起使用的人:

这是因为varname发生了更改,您只需更改void main()中的顶点着色器即可

更改此行:

vec3 nWorld = normalize( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * modifiedNormal );
为此:

vec3 nWorld = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * modifiedNormal );

感谢@gaitat提供的指向Three.js迁移页面的帮助,非常有用。

好的,因此任何试图找到此演示无法与最新版本Three.js一起使用的原因的人:

这是因为varname发生了更改,您只需更改void main()中的顶点着色器即可

更改此行:

vec3 nWorld = normalize( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * modifiedNormal );
为此:

vec3 nWorld = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * modifiedNormal );
感谢@gaitat帮助我们指向Three.js迁移页面,这非常有帮助。

Well release 48 vs.58(当前版本)是很久以前的事了。您需要按照处的迁移指南和/或处的更改指南更新代码。如果您发布代码或JSFIDLE,可以提供一些帮助。发布48 vs.58(当前版本)是很久以前的事了。您需要按照处的迁移指南和/或处的更改指南更新代码。如果发布代码或JSFIDLE,可以提供一些帮助。