Opengl es webgl中的矩阵与投影

Opengl es webgl中的矩阵与投影,opengl-es,webgl,projection-matrix,Opengl Es,Webgl,Projection Matrix,在以上几行中,我了解到正在上载投影矩阵和模型视图矩阵。我想知道这背后的原因 我有一些3d顶点(重叠顶点),它们后来以这种方式传递: // Upload Projection, ModelView matrices gl.uniformMatrix4fv(shaderProgram.uMVMatrix, false, pMVMatrix); gl.uniformMatrix4fv(shaderProgram.uPMatrix, false, perspM); 其中,重叠度[i]是x,y,z,1的

在以上几行中,我了解到正在上载投影矩阵和模型视图矩阵。我想知道这背后的原因

我有一些3d顶点(重叠顶点),它们后来以这种方式传递:

// Upload Projection, ModelView matrices
gl.uniformMatrix4fv(shaderProgram.uMVMatrix, false, pMVMatrix);
gl.uniformMatrix4fv(shaderProgram.uPMatrix, false, perspM);
其中,重叠度[i]是x,y,z,1的4*1数组

最终绘图发生在特定相机的框架上,根据该框架确定模型视图和投影矩阵。我想手动获取摄影机帧中的变换顶点。i、 e,(x,y,1)。我稍后下载每个帧内的数据,因此x,y应该是像素坐标。由于这在webgl内部发生,我无法检索此信息

缺少的部分(在您的问题中)是绘制时使用的顶点着色器。该顶点着色器将获取两个矩阵并使用它们变换顶点。具体的方式取决于着色器,但在大多数情况下,表达式是

// Upload overlay vertices                      
gl.bindBuffer(gl.ARRAY_BUFFER, overlayVertices[elementIndex]);
gl.vertexAttribPointer(shaderProgram.aVertexPosition, 3, gl.FLOAT,false, 0, 0);

这正是您想要在OpenGL之外再现该变换的计算,即其顶点着色器阶段。

我尝试使用上述等式。我关心的是尺寸。我有一个叫做perspM的矩阵P,它是4*4,MV矩阵也是4*4。顶点位置是x,y,z,1。因此,我得到的gl_位置是4*1。我理解齐次坐标的概念,但我应该得到一个3*1的矩阵,因为我需要二维坐标?@userJS:从变换中得到一个4元素的向量是正确的结果。然后应用同质除法
r_u2;=r/r.w
;然后
r\ux,r\uy
保持标准化的视口坐标。以及与之相关的文章。
gl_Position = P * MV * vertex_position