簡體   English   中英

如何初始化gluPerspective OpenGL投影類型?

[英]How to initialize gluPerspective OpenGL projection type?

現在,我通過以下代碼初始化OpenGL視圖:

glLoadIdentity();
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);               
glOrtho(0.0, w, 0.0, h, -1.0, 10.0); 

我看起來應該看起來像。
但是它的語言學觀點。 我想要透視圖。 所以我嘗試用以下方法初始化它:

glLoadIdentity();
glViewport(0, 0, w, h);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);               
gluPerspective(60, w/h, 0.1, 100);
glTranslatef(0.0,0.0,-5.0);

我究竟做錯了什么?

您的第一個誤解是考慮“初始化”。 OpenGL是一種狀態機,您應該在整個程序中根據需要設置狀態。 您稱為“初始化”的那些調用實際上屬於工程圖代碼。

第二:投影矩陣屬於OpenGL的“鏡頭”,因此各種投影都屬於此,並且僅存在於那里,這也適用於gluPerspective (它不是OpenGL的一部分,而是第三方庫GLU,最終會調用glFrustum )。

在原始代碼中,將正交限制設置為視口大小,即您將看到世界空間坐標比率(0,0)到(寬度,高度)。 該世界空間中的所有內容都將填充視圖。 在透視的情況下,您獲得的視線量圍繞Z軸對稱居中,根據遠近平面的不同,通常在(在剪裁飛機附近。 在您的情況下,這將是-0.1,-0.1到0.1,0.1,這是非常小的體積,只會大大放大圖像。

如何解決這個問題?

  1. 了解OpenGL的工作原理
  2. 停止對貨物的狂熱編程,即僅將教程中的代碼復制並粘貼到看起來正確的地方,而無需真正了解正在發生的事情。

現在,以您的情況為例,我強烈懷疑您實際上是否希望在“將圖像拖放到此處”背景下使用透視圖,但是只需要在此頂部繪制任何內容。 還記得我告訴過您OpenGL是狀態機嗎? 好吧,這是為什么:因為您應該在這兩個繪圖階段之間切換投影:

  1. 使用正交投影繪制背景
  2. 用頂部的透視投影畫出您想要的其他任何東西。

暫無
暫無

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

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