Почему эта простая матрица перевода не работает - PullRequest
0 голосов
/ 11 марта 2019

Во-первых, вот рабочая версия для перевода: https://jsfiddle.net/zhenghaohe/5yc8exo3/4/

(код взят и изменен с https://webgl2fundamentals.org/webgl/lessons/webgl-2d-matrices.html)

В рабочей версии кода переводматрица

[
    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; 
...}

Вот модифицированная версия https://jsfiddle.net/zhenghaohe/5yc8exo3/

Однако, похоже, есть ошибка,

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 Ответ

1 голос
/ 11 марта 2019

У вас 2 вопроса

1. у вас есть опечатка.

Как @ Rabbid76 указал

это

 mat3 u_matrix = mat3( 1, 0, tx,
            0, 1, ty,
            0, 0, 1,);   // <=== remove the ending comma

2. Матрицы GL имеют свои столбцы, указанные в виде строк

Так что либо поменяйте это на

 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);

см. https://webgl2fundamentals.org/webgl/lessons/webgl-matrix-vs-math.html

...