当前位置: 首页 > 知识库问答 >
问题:

为什么有一个单独的投影矩阵,但结合模型和视图矩阵是有益的?

陶锋
2023-03-14

当你学习3D编程时,你会被教导用3个变换矩阵来思考最容易:

>

  • 模型矩阵。这个矩阵对每一个模型都是独立的,它根据需要旋转和缩放对象,并最终将其移动到3D世界中的最终位置。“模型矩阵将模型坐标转换为世界坐标”。

    如果您查看新的OpenGL版本(OpenGL3.x/4.x),并且您不使用经典的渲染管道,而是使用着色器(GLSL)自定义所有内容,那么再也没有可用的矩阵了,您必须定义自己的矩阵。然而,大多数人仍然保留着投影矩阵和模型-视图矩阵的旧概念。你为什么要那么做?为什么不使用三个矩阵中的任何一个呢?这意味着您不必永久保存和恢复模型-视图矩阵,或者您使用单个组合模型-视图-投影(MVP)矩阵,这将为您在顶点着色器中为所呈现的单个顶点节省矩阵乘法(毕竟这样的乘法也不是免费的)。

    所以总结一下我的问题:与三个独立的矩阵或一个MVP矩阵相比,一个组合的模型-视图矩阵和一个独立的投影矩阵有什么优势?

  • 共有1个答案

    长孙永思
    2023-03-14

    切切实实地看。首先,你发送的矩阵越少,你需要与位置/法线/等相乘的矩阵就越少。因此,你的顶点着色器越快。

    所以第1点:矩阵越少越好。

    然而,有些事情你可能需要做。除非你在做2D渲染或一些简单的3D演示应用程序,否则你需要做照明。这通常意味着您需要将位置和法线转换到世界或相机(视图)空间,然后对它们进行一些照明操作(在顶点着色器或片段着色器中)。

    因此:我们使用摄像头空间作为照明的中间空间。

     类似资料:
    • 本章节主要给大家引入视图矩阵和投影矩阵两个新的概念,如果你没有图形学基础,对这两个概念暂时还没有认知,也没有关系。通过前面的学习相信你对平移、旋转等矩阵有了一定的认知,至于投影和视图矩阵和平移、旋转等模型矩阵一样也会对WebGL顶点进行坐标变换,至于如何变换下面会逐步讲解。 在学习本章节之前,如果你对Three.js已经有了一定的了解,可以尝试从WebGL视图矩阵和投影矩阵的角度去深入理解Thre

    • 问题内容: 我试图在OpenGL中使用gluUnProject,首先我需要获取projectoin,model_view和viewort矩阵。根据我在网上找到的例子 但是我收到错误消息“ ValueError:glGetFloatv需要1个参数(pname),收到2:(GL_PROJECTION_MATRIX,[])” 那么,我应该使用什么来获取这些矩阵? 问题答案: 也许: 之后在变量中应该是投

    • 基于我下面链接的相关问题(请参见@Aleh solution):我希望只计算给定幂的矩阵中列之间的唯一乘积。 例如,对于N=5,M=3,p=2,我们得到列(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)的乘积。我想修改(@Aleh)代码,只计算(1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)列之间的乘积。但我想对每个第

    • 给定矩阵(大小by)和幂,(例如,4),产生矩阵,其中每个-th矩阵包含所有中的列在该程度上的可能组合。 在我当前的方法中,我生成-th矩阵,然后在下一次调用中使用它来生成th矩阵。对于给定的功率,这是否可以“自动”完成,而不是手动完成? 说到R,我是一个新手,我明白有可能比下面的尝试更有效、更优雅地实现这个解决方案。。。 有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”

    • 我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生

    • 我有一个基本的OpenGL应用程序,我想使用我的投影矩阵。 这是我的矩阵: (WorldCoordinates是Matrix4结构,它只包含一个名为m的变量,即浮点[4][4])(宽度和高度是两个s)。然后,我使用以下方法将此坐标应用于我的<code>顶点 (Shader是一个类,并且有一个绑定()方法,它只是glUseProgram)。 这是我的顶点着色器GLSL 使用这个,它不起作用。但将gl