これらのマトリックスがどのように機能するか、および適切なシステムを実行するために相互に関連してそれらをセットアップする方法を理解するのに少し問題があります。
私の理解では、モデルマトリックスはオブジェクトのマトリックスであり、たとえば立方体や球体です。アプリケーション/ゲームにはこれらの多くが存在します。
ワールドマトリックスは、3Dワールドの原点を定義するマトリックスです。出発点。
そして、ビューマトリックスは、すべてがこれで変換される「カメラ」であり、実際にすべてがこのマトリックスの代わりに動いているときに、実際のカメラのような錯覚を持っていることを確認します。
ここで少し迷ってしまいました。だから私はここの誰かがこれを正しく理解するのを助けてくれることを望んでいた。
すべてのmodelMatrixは、worldMatrixとworldMatrix、次にviewMatrixで変換/乗算されますか?それとも、すべてのmodelMatrixがviewMatrixで翻訳/乗算され、次にworldMatrixで翻訳/乗算されますか?
これらすべてのマトリックスはどのように関連し、複数のオブジェクトと「カメラ」を備えた世界をどのように設定しますか?
編集:
すでにフィードバックをありがとうございました。私はググリングをしましたが、もう少しよく理解できたと思いますが、疑似コードのアドバイスを得ることができますか?
projectionMatrix = Matrix;
makePerspective(45, width, height, 0.1, 1000.0, projectionMatrix);
modelMatrix = Matrix;
identity(modelMatrix);
translate(modelMatrix, [0.0, 0.0, -10.0]); // move back 10 on z axis
viewMatrix = Matrix;
identity(viewMatrix);
// do some translation based on input with viewMatrix;
viewMatrixをmodelMatrixで乗算または変換しますか、それとも逆にしますか?そしてそれから?私は現在、引数を描画するために2つの行列のみを必要とするような方法で、drawメソッドを持っています。
これが私の描画方法です:
draw(matrix1 matrix2) {
bindBuffer(ARRAY_BUFFER, cubeVertexPositionBuffer);
vertexAttribPointer(shaderProgram.getShaderProgram().vertexPositionAttribute, cubeVertexPositionBuffer.itemSize, FLOAT, false, 0, 0);
bindBuffer(ARRAY_BUFFER, cubeVertexColorBuffer);
vertexAttribPointer(shaderProgram.getShaderProgram().vertexColorAttribute, cubeVertexColorBuffer.itemSize, FLOAT, false, 0, 0);
bindBuffer(ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
setMatrixUniforms(shaderProgram, matrix1, matrix2);
drawElements(TRIANGLES, cubeVertexIndexBuffer.numItems, UNSIGNED_SHORT, 0);
}
それらの行列は何であると想定されていますか?みんな、本当にありがとうございました。