[英]How to define a global variable of type NSUserDefaults and initialize a value?
[英]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,這是非常小的體積,只會大大放大圖像。
如何解決這個問題?
現在,以您的情況為例,我強烈懷疑您實際上是否希望在“將圖像拖放到此處”背景下使用透視圖,但是只需要在此頂部繪制任何內容。 還記得我告訴過您OpenGL是狀態機嗎? 好吧,這是為什么:因為您應該在這兩個繪圖階段之間切換投影:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.