我的问题:如何在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 point);
(由于颜色必须是“POI”;)) 我已经有了一个贯穿所有对象和所有要点的alogythm 事实上,有一个相机告诉你,这不是一个正统的视觉,而是一个视角。
请将您在此处写的代码评论为ropperly,以便每个人都能理解。 如果你不知道如何做到这一点或只是得到方法或非直接的解决方案,请不要回答,这并没有真正帮助我们。 http://sta.sh/0de60ynp9id&lt; - 此图片应该稍微描述一下
Os(Windows 7),Microsoft Visual Studio 2013(我只是使用它的c ++部分) 我为x64构建它(如果它很重要;)) 但我不认为这对于一点点数学算法很重要
如果您有任何疑问,请随时问我
好吧,我想我有一个新的(对我而言)这样做的方法,明天会尝试它并会告诉你它是否有效(这是每个人忘记的部分,但我尽量不要忘记它)
答案 0 :(得分:2)
您需要将您的点乘以视图和投影矩阵。
视图矩阵将点转换为相机空间。 Aka,相对于CAMERA。
投影矩阵将点从3D空间转换为投影空间。你需要决定你想要什么样的投影。例如,正投影或透视投影。
有关这些矩阵的布局,请参见这些页面底部的矩阵。
LookAtLH或视图矩阵: 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
您还需要了解如何执行矩阵乘法。
答案 1 :(得分:1)
我能解释这个问题的唯一方法是你想将一个3d点投射到一个二维平面上。如果那不是您想要的,请澄清您的问题。如果这就是你想要的,那么3D投影的无数资源就在附近:http://en.wikipedia.org/wiki/3D_projection
您需要将您的点乘以投影矩阵,以便在2d平面上投射(或“转换”?)您的点。
答案 2 :(得分:0)