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

标签 c++ math view 3d 2d

我的问题:如何在 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/

相关文章:

C++:如何在函数中创建枚举?

python - 从 GeoTIFF 文件中获取纬度和经度

java - 矩阵 vector 乘法

javascript - 奇怪的 javascript 算术行为(是的......可以预料)

c++ - 删除调试语句的命令

c++ - 获取导致 g++ 中链接器错误的文件

c++ - 是否有 WinAPI 可以从带有可选空格和其他参数的命令行获取文件名?

android - 通过代码获取另一个 XML 布局中的 XML 布局 [Android]

c# - 如何使用 C# 在 SQL Server 数据库中创建 View ?

css - Drupal 6 - "Link this field to node"第一个列表项不是斜体