gpt4 book ai didi

c++ - 另一个透视相机问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:36 25 4
gpt4 key购买 nike

- 已解决 -

警告:我的母语不是英语

你好,

我目前正在尝试制作 3D 相机,肯定是因为一些错误或我没有的数学基础,无论如何,我想如果我不寻求帮助,我肯定会发疯。

好的,我们走。

首先,我有一个自定义游戏引擎,只允许通过设置来处理相机:

  • 投影参数(根据正交或透视模式)
  • View :用 vector 3 表示位置,用四元数表示方向(不,我们现在不会讨论这个设计)

现在我正在我的游戏代码中编写一个相机(它使用以前引擎的功能)

我的相机环境具有以下规范:

  • up_vector = (0, 1, 0)
  • 前向 vector = (0, 0, 1)
  • 角度以度为单位
  • glm 作为数学库

在我的相机代码中,我处理玩家输入,将它们转换成我发送到引擎的数据。在引擎中我只做:

glm::mat4 projection_view = glm::perspective(...parameters...) * glm::inverse(view_matrix)

瞧,我有渲染步骤的矩阵。

现在是一个简单几何的小场景。

在 3D 空间中,我们有 7 个圆,从 z = -300 到 300 绘制。z = -300 处的圆圈是红色的,而 300 处的圆圈是蓝色的,有装饰形状(三角形/盒子),它们在那里方便识别上下左右

当我运行场景时,我得到了以下迪斯科结果!!我不想要的东西。

Perspective camera

正如您在我上面的彩色土 bean 示例中看到的那样,蓝色圆圈更大,但设置为在 z 上最远。按照透视应该是小的。发生了什么事?

另一方面,当我使用正交相机时一切正常。

Orthographic camera

有什么想法吗?


关于透视矩阵

我使用函数 glm::perspective() 生成我的透视矩阵,快速检查后,我确认我的参数值始终良好,所以我可以很容易地想象我的问题不是来自那里。

关于 View 矩阵

首先,我认为我的问题一定出在这里,也许……所以,我有一个 vector3 用于相机的位置,3 个 float 用于描述它在每个轴上的旋转。这是实验部分,我不知道自己在做什么!

我将前三个 float 复制到我用作欧拉角的 vector 3 中,并使用可以从欧拉角创建 quat 的 glm 四元数构造函数,如下所示:

glm::quat q(glm::radians(euler_angles));

最后我将这样的四元数发送到引擎中,而没有使用我的向上和向前 vector (无论如何我现在不知道如何使用它们)

我工作太久了,我觉得我的脑袋会爆炸,最可悲的是我觉得我真的很接近了。


PS0:帮助我的人,我永远感激

PS1:请不要给我一些理论链接:我已经没有神经元了,已经看了两本有趣又无奈的书。也许是因为我还没有完全理解。(用于图形和游戏开发的 3D 数学入门/用于 3D 游戏编程和计算机图形学的数学,第三版)


解决方案

这是一个愚蠢的错误......在我的渲染管道的最后,我忘记根据相机方向对它们“z”上的图形对象进行排序。

最佳答案

你说:

In my camera code I handle the player input, convert them into data that I send to my engine. In the engine I only do:

glm::mat4 projection_view = glm::perspective(...parameters...) * glm::inverse(view_matrix)

And voila I have my matrix for the rendering step.

渲染彩色圆圈时是否使用了投影矩阵?

是否应该使用identity 矩阵来绘制圆,然后根据 View /透视矩阵查看模型?

三角形和正方形看起来正确 - 在渲染圆形时是否有不同的变换效果?

关于c++ - 另一个透视相机问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540663/

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