gpt4 book ai didi

c++ - 在 GLSL 中使相机正常

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:32 24 4
gpt4 key购买 nike

我有一个 OpenGL 场景,我在其中查看这样的对象:

gluLookAt(10, 10, -10, -10, -10, 10, 0, 1, 0);

所以我知道如果我想在着色器中使用相机的 z 轴,它看起来会像这个的归一化 vector :

vec3(1.0, 1.0, -1,0);

有没有办法在顶点着色器中计算这个 vector ?

我想计算近/远裁剪平面的法线,但找不到在顶点(或片段)着色器中执行此操作的方法。

我使用的是旧管道 (OpenGL v2.0/GLSL v. 1.10),不想将 vector 传递给着色器(尽管我知道这是执行此操作的常用且高效的方法)。

最佳答案

固定函数顶点变换通过应用两个矩阵来工作:

  1. 从物体空间到眼睛空间的“ModelView”矩阵
  2. 从眼睛空间到剪辑空间的“投影”矩阵

gluLookAt() 所做的是通过在世界空间 中定义一些摄像机来指定 View 矩阵。而你似乎要重建的是这个世界空间中的观察方向。

但是,对于固定函数 GL,这不可能。您所拥有的只是产品 view * model。如果没有更多信息,您无法将其分解为 viewmodel 部分。并且这些信息都不存在于固定函数 GL 中——它从来没有 一个世界空间,或者关心一个单独的 View 矩阵。这种区别确实发生在应用程序逻辑中(如果有的话)。

有趣的问题是:你为什么需要世界空间的观察方向?固定函数 GL 在眼睛空间中进行此类计算,其中观看方向只是 (0,0,-1,0)。

所以我为您提供了两个选择:

  1. 使用统一(或其他将数据传输到着色器的方式)来指定一些附加信息,就像其他答案已经建议的那样
  2. 直接在眼空间中进行计算

关于c++ - 在 GLSL 中使相机正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com