Javascript 在WebGL中平移三维对象

Javascript 在WebGL中平移三维对象,javascript,glsl,webgl,translate,Javascript,Glsl,Webgl,Translate,我试图在WebGL应用程序中移动3d对象,问题是我遇到了错误: GL错误:GL_无效_操作:glUniformMatrix4fv:类型的统一函数错误 统一翻译的类型必须是mat4,而不是vec4。 这会导致GL\u INVALID\u操作错误,因为glUniformMatrix4fv与类型vec4不匹配 此外,向量必须在顶点着色器中从右侧乘以矩阵: attribute vec4 coordinates; uniform mat translation; void main(void) {

我试图在WebGL应用程序中移动3d对象,问题是我遇到了错误:

GL错误:GL_无效_操作:glUniformMatrix4fv:类型的统一函数错误


统一翻译的类型必须是
mat4
,而不是
vec4
。 这会导致
GL\u INVALID\u操作
错误,因为
glUniformMatrix4fv
与类型
vec4
不匹配

此外,向量必须在顶点着色器中从右侧乘以矩阵:

attribute vec4 coordinates; 
uniform mat translation;
void main(void) {
    gl_Position = translation * coordinates; 
}
见:

此外,*-运算符可用于相应维度的矩阵向量积,例如:

vec2 v = vec2(10., 20.);
mat2 m = mat2(1., 2.,  3., 4.);
vec2 w = m * v; // = vec2(1. * 10. + 3. * 20., 2. * 10. + 4. * 20.)
请注意,向量必须从右侧乘以矩阵。

如果将向量从左侧乘以矩阵,则结果相当于将列向量从右侧乘以转置矩阵。这相当于将列向量从右侧乘以转置矩阵:

因此,将向量从左侧乘以矩阵相当于将向量从右侧乘以转置矩阵:

vec2 v = vec2(10., 20.);
mat2 m = mat2(1., 2.,  3., 4.);
vec2 w = v * m; // = vec2(1. * 10. + 2. * 20., 3. * 10. + 4. * 20.)

注意,如果要将向量乘以右边的矩阵

gl_Position = coordinates * translation; 
然后你必须转置矩阵<如果将第二个参数设置为
true
,则code>uniformMatrix4fv将转置矩阵:

gl.uniformMatrix4fv(translation, true, translationMatrix); 

谢谢,有一个小问题,用z轴翻译是不起作用的。我将绘图代码添加到我的第一个post@MikeS“z轴平移不起作用”是什么意思?当沿z轴平移时,请不要期望对象变小或变大。如果没有透视投影,这是不会发生的。@MikeS是的,当然,z坐标会影响深度值。使用正交(平行)投影,更改z坐标时无法“看到”效果。如果沿z方向平移更大的量,则对象将消失,因为它被近平面或远平面剪裁。你必须使用透视投影才能看到效果。看到你关于平移z轴的评论。你可能会觉得有用
gl.uniformMatrix4fv(translation, true, translationMatrix);