繁体   English   中英

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

[英]Converting from 3D to 2D coordinates question

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

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

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

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

还有一些示例代码会很好,只是这样我可以获得更好的图片

谢谢阅读

-莫尔玛

由于您使用OpenGL的,我建议gluProject从3D映射到2D和gluUnProject从2D到3D(上unprojecting记@ ChrisF的评论)的映射。
尽管我必须承认,但是我对OpenGL并没有真正的经验,但我只是知道您想要的术语并对其进行了搜索。 :)

绘制健康条之类的常用方法是将某些边界体积(边界框,边界球等)或锚点转换为屏幕空间。 这很容易,因为您只需要遵循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。

此简短文本说明了3D坐标的2D投影的基础知识。 反之则要困难一些,因为您只有两个已知值(二维坐标),而仅提取三个坐标还不够。 可以获得的最佳效果是一条线(从查看器开始,经过屏幕上的点,然后延伸到无穷大。3D点基本上可以在屏幕上的点之后的任何位置。但是,如果您知道其他内容,则可以达到相机或您知道2D坐标的物体的一部分位置,则可以确定3个坐标。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM