簡體   English   中英

OpenGl更改坐標系的度量單位

[英]OpenGl changing the unit of measure for coordinate system

我正在使用最新的藍皮書學習OpenGL,希望能對此有所澄清。 該書說您可以將任何測量系統用於坐標系,但是在進行3D透視編程時,世界坐標為+ 1 / -1。

我想我有點困惑的地方是可以說我想用腳和英寸來表達我的世界,並且我想蓋房子的內部。 我會只使用轉換(x(feet),y(feet),z(feet)),其他功能,還是有一些功能可以更改x,y世界坐標(即將默認值從-1 / + 1更改為例如(-20/20)我知道openGl會將剩下的所有單位都轉換。

因此,我想我最大的知識空白是如何為OPenGL建模真實的對象(長度)以使其有意義?

我認為作者指的是透視分割后出現的歸一化坐標(設備坐標)。

通常,當您在OpenGL中實際操作對象時,使用的標准世界坐標不限於-1 / + 1。 這些世界坐標可以是您喜歡的任何東西,通過乘以模型視圖和投影矩陣,然后除以齊次坐標“ w”,可以轉換為歸一化坐標。

OpenGL將為您完成所有這些工作(直到您進入着色器),因此不必擔心標准化坐標。

好吧,它都是相對的。 如果將1個OpenGL單位設置為1米,然后在此基礎上完美構建所有東西以進行縮放,那么您將擁有所需的比例(即10米將是10個openGL單位,而1毫米將是0.001個OpenGL單位。

但是,如果要引入一個設計為1 OpenGL單位= 1英尺的模型,則該對象最終將變得太大〜3倍。

當然,您可以在各種方法之間進行更改,但是到目前為止,最好的方法是在將模型加載到引擎之前重新縮放模型。

…但是,在進行3D透視編程時,世界坐標為+ 1 / -1。

誰說的? 也許您指的是剪輯空間,但是這只是一個特殊的空間,所有坐標都在投影之后。

您的世界單位可能是任何東西。 相關的部分是如何計划的。 假設您有一個90°FOV的透視投影,靠近剪輯平面為0.01,遠離剪輯平面為10.0,為二次方(為簡單起見)。 然后,您進入世界的視圖體積將解析為一個邊長為0.01且與觀察者接近0.01距離的矩形,並在邊長為0.02的遠處拉伸到10.0。 降低FOV,橫向長度相應縮小。

盡管如此,大約在0.01到10范圍內的坐標會投影到+/- 1剪輯空間中。

因此,取決於您的場景和選擇的單位,由您決定投影限制。

歸一化窗口坐標范圍始終為-1到+1。 但是可以根據需要使用它。 假設我們希望范圍是-100到+100,然后將實際坐標除以100。在這種情況下,請僅使用函數glVertex2f或glVertex3f。 例如glVertex2f(10 / 100,10 / 100)。

暫無
暫無

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

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