[英]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.