从3D坐标转换到2D坐标的问题
Converting from 3D to 2D coordinates question
我使用OpenGL和c++来制作游戏。现在,我想知道如何将3D坐标转换为2D位置,例如:在3D模型的头部上绘制2D生命值条,或沿着这些线。xD
所以无论如何,我想知道我如何能够设置它可以在SFML中使用。现在我正在查找一些信息,但我不完全理解的方法…
基本上,我问我如何使用SFML将3D opengl坐标转换为屏幕上的2D坐标
我也想知道如何将2D坐标转换回3D,只是这样我也知道。
还有一些示例代码会很好,这样我就能得到一个更好的图片
感谢阅读
-Molma
既然你使用的是OpenGL,我建议gluProject
用于从3D映射到2D, gluUnProject
用于从2D映射到3D(注意@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投影的基础知识。另一种方法有点困难,因为您只有两个已知值(2D坐标),这不足以准确地提取三个坐标。你能得到的最好结果是一条线(从观看者开始,穿过屏幕上的点,一直延伸到无穷远处)。3D点基本上可以在屏幕上的点后面的任何地方。但是如果你知道一些额外的东西,比如到摄像机的距离或者物体位置的一部分你知道二维坐标,你就可以确定三维坐标。
你只需要做与openGL对坐标相同的转换。这通常包括以下步骤:
-
乘以平移矩阵(即摄像机矩阵)。这将把你的3d坐标放到一个面向屏幕的坐标系统中
-
乘以投影矩阵。这将把坐标投影到屏幕上
假设你有这些矩阵,因为你必须在openGL中加载它们,但你也可以请求它们
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- 着色器和纹理坐标问题
- 我在openGL中的标准化正交坐标有什么问题
- David Lowe's SIFT -- 关于比例空间和图像坐标的问题(奇怪的偏移问题)
- 从3D坐标转换到2D坐标的问题