webgl 中的矩阵和投影
Matrices and projection in webgl
// Upload Projection, ModelView matrices
gl.uniformMatrix4fv(shaderProgram.uMVMatrix, false, pMVMatrix);
gl.uniformMatrix4fv(shaderProgram.uPMatrix, false, perspM);
在上面几行中,我了解到正在上传投影矩阵和模型视图矩阵。我想知道这背后的数学原理。
我有一些 3d 顶点 (overlayvertices),后来以这种方式传递:
// Upload overlay vertices
gl.bindBuffer(gl.ARRAY_BUFFER, overlayVertices[elementIndex]);
gl.vertexAttribPointer(shaderProgram.aVertexPosition, 3, gl.FLOAT,false, 0, 0);
其中 overlayvertices[i] 是一个包含 x,y,z,1 的 4*1 数组
最终绘图发生在确定模型视图和投影矩阵的特定相机的帧上。我想手动获取相机帧中的变换顶点。即 (x,y,1)。我稍后在每一帧内下载数据,因此 x,y 应该是像素坐标。由于这发生在 webgl 内部,我无法检索此信息。
缺少的部分(在您的问题中)是绘图时使用的顶点着色器。这个顶点着色器将获取两个矩阵并使用它们来变换顶点。具体如何取决于着色器,但在大多数情况下,表达式为
gl_Position = P * MV * vertex_position
这正是您想要在 OpenGL 之外重现该变换的计算,即它的顶点着色器阶段。
// Upload Projection, ModelView matrices
gl.uniformMatrix4fv(shaderProgram.uMVMatrix, false, pMVMatrix);
gl.uniformMatrix4fv(shaderProgram.uPMatrix, false, perspM);
在上面几行中,我了解到正在上传投影矩阵和模型视图矩阵。我想知道这背后的数学原理。
我有一些 3d 顶点 (overlayvertices),后来以这种方式传递:
// Upload overlay vertices
gl.bindBuffer(gl.ARRAY_BUFFER, overlayVertices[elementIndex]);
gl.vertexAttribPointer(shaderProgram.aVertexPosition, 3, gl.FLOAT,false, 0, 0);
其中 overlayvertices[i] 是一个包含 x,y,z,1 的 4*1 数组
最终绘图发生在确定模型视图和投影矩阵的特定相机的帧上。我想手动获取相机帧中的变换顶点。即 (x,y,1)。我稍后在每一帧内下载数据,因此 x,y 应该是像素坐标。由于这发生在 webgl 内部,我无法检索此信息。
缺少的部分(在您的问题中)是绘图时使用的顶点着色器。这个顶点着色器将获取两个矩阵并使用它们来变换顶点。具体如何取决于着色器,但在大多数情况下,表达式为
gl_Position = P * MV * vertex_position
这正是您想要在 OpenGL 之外重现该变换的计算,即它的顶点着色器阶段。