C++将三维坐标高级为二维坐标

C++ Advanced 3D coordinates to 2D Coordinates

本文关键字:坐标 二维 三维 高级 C++      更新时间:2023-10-16

我的问题是:如何在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转换器3dTo2d(相机摄像头,POI点);

(由于颜色的原因,必须是"POI";)我已经有了一个遍历所有对象及其所有点的alogythm事实上,有一个摄像头告诉你,这不是一个正射的誓言,而是一个视角。

请评论你在这里写的代码,让每个人都能理解。如果你不知道如何做到这一点,或者只是找到了方法或非直接解决方案,请不要回答,这对我们没有真正的帮助。http://sta.sh/0de60ynp9id<-这张图片应该有点

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

如果你有任何问题,请随时问我

好吧,我想我有一个新的(对我来说)方法来做这件事,明天会尝试,并告诉你它是否有效(这是每个人都会忘记的部分,但我尽量不忘记)

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

视图矩阵将点转换为摄影机空间。阿卡,相对于相机。

投影矩阵将点从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

您还需要了解如何执行矩阵乘法。

我能解释这个问题的唯一方法是,你想把一个三维点投影到一个二维平面上。如果这不是你想要的,澄清你的问题。如果这就是你想要的,那么周围有无数的3d投影资源:http://en.wikipedia.org/wiki/3D_projection

你需要将你的点乘以投影矩阵,才能在二维平面上投影(或"转换"?)你的点。

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

OpenGL转换管道

OpenGL转换