[英]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平面上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.