从3D转换为2D坐标问题

时间:2011-04-10 19:13:28

标签: c++ opengl 3d sfml

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

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

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

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

也有一些示例代码会很好,所以我得到了更好的图片

感谢阅读

-Molma

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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。

答案 2 :(得分:1)

This short text解释了3D坐标二维投影的基础知识。另一种方法是有点困难,因为你只有两个已知的值(2D坐标),这是不够的准确提取三个坐标。你可以得到的最好的是一条线(从观察者开始,经过屏幕上的点并延伸到无限远.3D点基本上可以在屏幕上的点后面。但是如果你知道一些额外的东西,距离到相机或你知道2D坐标的东西的位置的一部分,你可以确定3坐标。

答案 3 :(得分:1)

你只需要对openGL进行与坐标相同的变换。这通常包括以下步骤:

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

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

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