C++将三维坐标高级为二维坐标
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转换器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转换
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- C++将三维坐标高级为二维坐标
- OpenCV将三维坐标投影到二维摄影机坐标
- 使用二维屏幕坐标gluUnproject获取三维模型坐标
- 如何定义用于表示二维坐标的模板之间的转换
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- 使用二维阵列在地图/栅格上显示坐标
- 是集合中的二维整数坐标