繁体   English   中英

C ++高级3D坐标到2D坐标

[英]C++ Advanced 3D coordinates to 2D Coordinates

我的问题:如何在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”;))我已经获得了遍及所有对象及其所有点的心理学原理。有一个摄像头的事实告诉您,这不是正交的观点,而是一个视角。

请适当地注释您在此处编写的代码,以便每个人都能理解。 如果您不知道如何执行此操作,或者仅知道方法或非直接解决方案,请不要回答,这对我们没有帮助。 http://sta.sh/0de60ynp9id <-此图像应该描述一下

Os(Windows 7),Microsoft Visual Studio 2013(我只是使用其中的c ++部分)我为x64构建它(如果重要的话;))但是我认为这对一点点数学算法并不重要

如果您有任何疑问,请随时问我

好的,我想我有一种新的方法(对我来说是新方法),明天就可以尝试一下,并告诉您是否可行(这是每个人都忘记的部分,但我尽量不要忘记它)

您需要将点乘以视图和投影矩阵。

视图矩阵将点转换为相机空间。 又名,相对于CAMERA。

投影矩阵将点从3D空间转换为投影空间。 您需要确定所需的投影类型。 例如,正投影或透视投影。

有关这些矩阵的布局,请参见这些页面底部的矩阵。

LookAtLH或视图矩阵: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb281710( v=vs.85) .aspx

OrthoLH或使用正交投影的投影矩阵: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb281723( v=vs.85) .aspx

您还需要研究如何执行矩阵乘法。

我能解释这个问题的唯一方法是,您要将3d点投影到2d平面上。 如果不是您要的内容,请澄清您的问题。 如果是您想要的,那么3D投影的资源将不计其数: http : //en.wikipedia.org/wiki/3D_projection

您需要将您的点乘以投影矩阵,以将点投影(或“转换”?)到2d平面上。

建议您查看以下链接,以了解将3D坐标转换为2D坐标的说明,

OpenGL转换管道

OpenGL转换

暂无
暂无

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

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