簡體   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