Javascript 在WebGL中平移三维对象
我试图在WebGL应用程序中移动3d对象,问题是我遇到了错误: GL错误:GL_无效_操作:glUniformMatrix4fv:类型的统一函数错误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) {
统一翻译的类型必须是
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);