【问题标题】:About OpenGL Matrix Multiplications关于 OpenGL 矩阵乘法
【发布时间】:2013-02-08 10:19:35
【问题描述】:

http://www.cs.uaf.edu/2007/spring/cs481/lecture/01_23_matrices.html

我刚刚读完这篇文章,但我有两个关于乘法的问题。

gl_Position = gl_ProjectionMatrix*gl_ModelViewMatrix*gl_Vertex

这是我将它们全部相乘时的最终屏幕坐标 (x,y)。如果我只乘 gl_ModelViewMatrix*gl_Vertex 或 gl_ProjectionMatrix*gl_Vertex 怎么办?还有 gl_Vertex 单独是什么意思?

【问题讨论】:

  • 为了理解这条线的全部含义,我真的建议您了解 3D 应用程序中流行的不同坐标空间,如模型空间、世界空间、眼睛/相机空间、剪辑空间、投影空间、归一化设备坐标空间等glprogramming.com/red/chapter03.html

标签: opengl matrix glsl projection vertex


【解决方案1】:

gl_Vertex 是世界空间中的顶点坐标。 顶点和眼睛可以在世界空间中任意放置和定向。

与 ModelViewMatrix 相乘后,您会在“眼睛空间”中得到一个顶点坐标,这是一个眼睛位于 0,0,0 的坐标系。乘以投影矩阵(并进行同质坐标系划分)为您提供屏幕空间中的坐标。这些还不是像素坐标,而是一些标准化的坐标系,屏幕/窗口中心为 0,0,0。视口变换是最后一个。它将图像映射到窗口(像素?)坐标。

解释如下:

http://www.srk.fer.hr/~unreal/theredbook/ 第三章。

【讨论】:

    【解决方案2】:

    如果我只乘 gl_ModelViewMatrix*gl_Vertex 或 gl_ProjectionMatrix*gl_Vertex 怎么办?

    那么投影矩阵(第一种情况)或模型-视图矩阵(第二种情况)将不会生效。如果它们是恒等矩阵,您将看不到效果。如果不是,那么您的视角或位置可能是错误的。

    gl_Vertex 单独是什么意思?

    gl_Vertex 是传递给管道输入的顶点坐标。

    【讨论】:

    • 谢谢,但是 gl_ModelViewMatrix*gl_Vertex 会返回一些我将来可以使用的重要东西吗?
    • @deniz 是的,它在应用模型视图转换后返回顶点位置。 This article 很好地解释了转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多