Javascript 为什么这个简单的转换矩阵不';行不通

Javascript 为什么这个简单的转换矩阵不';行不通,javascript,graphics,webgl,webgl2,Javascript,Graphics,Webgl,Webgl2,首先,以下是翻译的工作版本: (代码取自并修改自) 在代码的工作版本中,翻译矩阵为 [ 1, 0, 0, 0, 1, 0, tx, ty, 1, ] 这是我在图形学课上教的转换矩阵的转置。在我的课堂上,翻译矩阵表示为 [ 1, 0, tx, 0, 1, ty, 0, 0, 1, ] 我试图找出差异的来源。所以我决定改变工作版本的顶点着色器,从js文件发送平移矩阵,如下所示 uniform m

首先,以下是翻译的工作版本:

(代码取自并修改自)

在代码的工作版本中,翻译矩阵为

[
    1, 0, 0,
    0, 1, 0,    
    tx, ty, 1,
] 
这是我在图形学课上教的转换矩阵的转置。在我的课堂上,翻译矩阵表示为

 [
        1, 0, tx,
        0, 1, ty,    
        0, 0, 1,
    ] 
我试图找出差异的来源。所以我决定改变工作版本的顶点着色器,从js文件发送平移矩阵,如下所示

uniform mat3 u_matrix;
void main() {
  // Multiply the position by the matrix.
  vec2 position = (u_matrix * vec3(a_position, 1)).xy;
} 
直接在顶点着色器中构造平移矩阵的步骤

uniform float tx;
uniform float ty;
void main() {
 mat3 u_matrix = mat3( 1, 0, tx,
            0, 1, ty,
            0, 0, 1,);
 vec2 position = (u_matrix * vec3(a_position, 1)).xy; 
...}
这是修改后的版本

但是似乎有一个bug

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
webgl-utils.js:67 *** Error compiling shader '[object WebGLShader]':ERROR: 0:18: ')' : syntax error 
有人能告诉我代码的修改版本哪里错了,为什么翻译矩阵存在差异

您有两个问题

1.你打错了。 正如@Rabbid76所指出的那样

这个

如果不那么让人困惑的话,还是这个

 vec3 col0 = vec3(1, 0, 0);
 vec3 col1 = vec3(0, 1, 0);
 vec3 col2 = vec3(tx, ty, 1);

 mat3 u_matrix = mat3(col0, col1, col2);

请参见

删除
0,0,1,)中括号前的最后一个逗号
 mat3 u_matrix = mat3(
     1,  0,  0,
     0,  1,  0,
    tx, ty,  1);

 vec3 col0 = vec3(1, 0, 0);
 vec3 col1 = vec3(0, 1, 0);
 vec3 col2 = vec3(tx, ty, 1);

 mat3 u_matrix = mat3(col0, col1, col2);