我对OpenGL和Javascript非常陌生,所以我不确定到底是什么错误。我正在制作一个程序,可以沿所有三个轴x,y和z旋转形状。我正在尝试将位置向量与旋转矩阵相乘,但出现此错误:
Uncaught TypeError: Failed to execute 'uniformMatrix4fv' on 'WebGLRenderingContext': No function was found that matched the signature provided.
这里是我的顶点着色器,我已经将其缩短以隐藏已经起作用的不必要的代码,因此我可以突出显示问题所在。我在这里也有乘法:
attribute vec2 pos;
uniform mat4 rotation;
void main(){
gl_Position = rotation*vec4(vec3(pos,0),1);
gl_Position.x = pos.x*cos(shift) - pos.y*sin(shift);
gl_Position.y = pos.y*cos(shift) + pos.x*sin(shift);
gl_Position.z =0.0;
gl_Position.w =1.0;
}
这是旋转功能之一,我为每个轴都做一个。 4x4的旋转矩阵如下所示:
function xAxis(angle){
var c = Math.cos(angle);
var s = Math.sin(angle);
return[
1,0,0,0,
0,c,-s,0,
0,s,c,0,
0,0,0,1
];
}
但是当我尝试在draw函数中使用此命令时,出现错误
gl.uniformMatrix4fv(rotationLocation, false, rotation);
所以我的问题是如何解决此错误?
编辑:我应该补充一点,我正在使用Javascript文件和HTML文件。所有重要的代码,例如顶点着色器,片段着色器等,都位于Javascript文件中。
编辑2:在添加这些代码行之前,我还应该补充说程序运行正常。
编辑3:这是Link to my Javascript code,我将其转换为文本文件以便于阅读
好,所以我找出了问题所在。我不小心在程序中创建了2个xAxis()
函数。按照我的设计方式,第一个将确定要旋转的轴,第二个将进行矩阵乘法。我错误地给了他们一个错误的名字,当我将其重命名为xAxis_rotate()
时,我的问题就解决了。