我的问题:如何在 2D 屏幕上转换 3D 坐标? 我对此很生气,但我所有的研究都只显示了一半的回答甚至没有回答,有些是错误的(测试了它们)所以我再次询问并尝试添加尽可能多的细节。 以下是我们将使用的结构:
struct COORD3D
{
int X;
int Y;
int Z;
};
struct PAN3D//Rotate around these axis
{
float X;
float Y;
float Z;
};
struct COLOR
{
Uint8 R;//RED
Uint8 G;//GREEN
Uint8 B;//BLUE
Uint8 A;//ALPHA
};
struct CAMERA
{
COORD3D Pos;
PAN3D Rot;
float angle;
int RESX;//X Resolution
int RESY;//Y Resolution
};
struct POI
{
COORD3D Pos;
COLOR Col;
};
struct OBJECT
{
COORD3D Pos;//absolute position
list<POI> dots;//relative to object position
list<pair<POI*, POI*>> lines;//Pointers to the dots to connect them
PAN3D Rot;//absolute rotation
};
现在我需要的是一个如下所示的函数:
POI Convert3dTo2d(CAMERA cam, POI点);
(因为颜色必须是“POI”;)) 我已经有了一个遍历所有对象及其所有点的逻辑 并且有一个摄像头的事实告诉你,这不是一个正交 View ,而是一个透视图。
请在此处对您编写的代码进行适当的注释,以便每个人都能理解。 如果您对如何执行此操作一无所知,或者只是找到方法或非直接解决方案,请不要回答,这对我们没有真正的帮助。 http://sta.sh/0de60ynp9id <- 这张图片应该描述一下
Os (Windows 7), Microsoft Visual Studio 2013(我只是用它的c++部分) 我为 x64 构建它(如果它很重要;)) 但我认为这对于一些数学算法来说并不重要
有什么问题可以问我
好吧,我想我有一个新的(对我来说是新的)方法来做到这一点,明天会尝试一下,然后告诉你它是否有效(这是每个人都忘记的部分,但我尽量不要忘记它)
最佳答案
您需要将您的点乘以 View 和投影矩阵。
View 矩阵将点转换为相机空间。又名,相对于 CAMERA。
投影矩阵将点从 3D 空间转换到投影空间。你需要决定你想要什么样的投影。例如,正射投影或透视投影。
有关这些矩阵的布局,请参见这些页面底部的矩阵。
LookAtLH,或 View 矩阵: http://msdn.microsoft.com/en-us/library/windows/desktop/bb281710(v=vs.85).aspx
OrthoLH,或者使用正交投影的投影矩阵: http://msdn.microsoft.com/en-us/library/windows/desktop/bb281723(v=vs.85).aspx
您还需要了解如何执行矩阵乘法。
关于C++ 高级 3D 坐标到 2D 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861240/