簡體   English   中英

從3D轉換為2D坐標問題

[英]Converting from 3D to 2D coordinates question

我在C ++中使用OpenGL進行游戲。 現在,我想知道如何將3D坐標轉換為2D位置:例如,在3D模型的頭部上繪制2D健康條,或沿這些線繪制一些東西。 xD

所以無論如何,我想知道如何在SFML中使用它進行設置。 現在我正在查找一些信息,但我不完全了解這些方法...

基本上,我問我如何使用SFML將3D opengl坐標轉換為2D坐標到屏幕上

我還想知道如何將2D坐標轉換回3D,我也知道這一點。

還有一些示例代碼會很好,只是這樣我可以獲得更好的圖片

謝謝閱讀

-莫爾瑪

由於您使用OpenGL的,我建議gluProject從3D映射到2D和gluUnProject從2D到3D(上unprojecting記@ ChrisF的評論)的映射。
盡管我必須承認,但是我對OpenGL並沒有真正的經驗,但我只是知道您想要的術語並對其進行了搜索。 :)

繪制健康條之類的常用方法是將某些邊界體積(邊界框,邊界球等)或錨點轉換為屏幕空間。 這很容易,因為您只需要遵循OpenGL轉換管道即可:

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y} / 2)

如果不提供其他信息,則無法進行2D到3D。

此簡短文本說明了3D坐標的2D投影的基礎知識。 反之則要困難一些,因為您只有兩個已知值(二維坐標),而僅提取三個坐標還不夠。 可以獲得的最佳效果是一條線(從查看器開始,經過屏幕上的點,然后延伸到無窮大。3D點基本上可以在屏幕上的點之后的任何位置。但是,如果您知道其他內容,則可以達到相機或您知道2D坐標的物體的一部分位置,則可以確定3個坐標。

您只需執行與openGL相同的坐標轉換即可。 這通常涉及以下步驟:

  1. 將其乘以轉換矩陣(即相機矩陣)。 這會將您的3d坐標置於面向屏幕的坐標系中

  2. 乘以投影矩陣。 這會將坐標投影到屏幕上

大概您有這些矩陣,因為您必須將它們加載到openGL中,但是您也可以要求它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM