1

我使用 OpenGL 和 c++ 来制作游戏。现在,我想知道如何将 3D 坐标转换为 2D 位置,例如:在 3D 模型的头部上绘制 2D 健康条,或者类似的东西。xD

所以无论如何,我想知道我将如何设置它可以在 SFML 中使用它。现在我正在查找一些信息,但我不完全理解这些方法......

基本上,我问我如何使用 SFML 将 3D opengl 坐标转换为 2D 坐标到屏幕上

我也想知道如何将 2D 坐标转换回 3D,所以我也知道。

还有一些示例代码会很好,这样我就能得到更好的图片

谢谢阅读

-摩尔玛

4

4 回答 4

2

由于您使用的是 OpenGL,我建议gluProject将 3D 映射到 2D 以及gluUnProject从 2D 映射到 3D(注意 @ChrisF 对非投影的评论)。
虽然我必须承认,我对 OpenGL 没有真正的经验,我只知道你想要什么的术语并用谷歌搜索它。:)

于 2011-04-10T19:18:02.163 回答
2

绘制健康条之类的常用方法是将一些边界体积(边界框、边界球等)或锚点转换为屏幕空间。这很容易,因为您只需要遵循 OpenGL 转换管道:

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y} / 2)

如果不提供额外信息,2D 到 3D 是不可能的。

于 2011-04-10T19:20:42.023 回答
1

这段简短的文字解释了 3D 坐标的 2D 投影的基础知识。另一种方法有点困难,因为您只有两个已知值(2D 坐标),并且不足以准确地提取三个坐标。你能得到的最好的是一条线(从观察者开始,穿过屏幕上的点并延伸到无穷远。3D点基本上可以在屏幕上的点后面的任何地方。但如果你知道一些额外的东西,到相机或者你知道2D坐标的东西的一部分位置,你可以确定3个坐标。

于 2011-04-10T19:19:24.587 回答
1

您只需对坐标进行与 openGL 相同的变换即可。这通常涉及以下步骤:

  1. 将其乘以平移矩阵(即相机矩阵)。这会将您的 3d 坐标置于面向屏幕的坐标系中

  2. 乘以投影矩阵。这会将坐标投影到屏幕上

大概你有这些矩阵,因为你必须在 openGL 中加载它们,但你也可以要求它们。

于 2011-04-10T19:21:16.587 回答