簡體   English   中英

與OpenGL中的martix堆棧混淆?

[英]Confusion with martix stack in OpenGL?

我正在使用Lazy Foo的教程 我發現glPushMatrix()和glPopMatrix()函數非常令人困惑。 我需要有人來解釋矩陣的存儲方式,如何使其中之一處於活動狀態(如果您要稱之為矩陣)以及Lazy Foo網站上的以下代碼:

void render() 
{ 
//Clear color buffer 
glClear( GL_COLOR_BUFFER_BIT ); 

//Pop default matrix onto current matrix 
glMatrixMode( GL_MODELVIEW ); 
glPopMatrix(); 

//Save default matrix again 
glPushMatrix();

“開放”然后恢復矩陣有什么目的?

矩陣以堆棧形式存儲。 glPushMatrix推送(在副本頂部並推送副本)到該堆棧。 glPopMatrix在頂部彈出矩陣。 在您的示例中,應該將它們切換,首先按下然后彈出一個矩陣。

您可以使用GL_MODELVIEW矩陣來更改要繪制的內容。 如果模型的中心位於0,0,0,則可以在繪圖時使用矩陣平移操作將其移動到x,y,z。

假設您要繪制兩個對象。 x,y,z處的一個位於a,b,c處

translate x, y, z
draw first object
translate a, b, c
draw second object

如果這樣做,您將看到第二個對象在x + a,y + b,z + c處繪制,因為第二個平移已添加到第一個。 您需要使用推/彈出矩陣來保存和恢復狀態

push matrix //no translation at this point
translate x, y, z
draw first object
pop matrix 
translate a, b, c
draw second object

當您推送矩陣時,它將保存矩陣的當前狀態,該狀態假定為在原點。 之后,您可以通過x,y,z轉換該矩陣,並且再次彈出時,此轉換將被“還原”,並且在您上次推送矩陣時會彈出狀態。 這次您將其翻譯為a,b,c時,它可以工作,因為我們彈出了上一個翻譯操作

暫無
暫無

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

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