[英]How to rotate only a specific object without affecting the others in opengl?
我在 OpenGL 中制作了一個風扇,里面有桿子和旋轉的東西,當我嘗試旋轉它們時,所有的風扇都隨着桿子旋轉,我應該如何修復它,我使用了glutPostRedisplay()
,另外,當我在旋轉中使用 push 和 pup 矩陣時,它根本不旋轉,它只以我寫的角度旋轉一次,有什么建議有幫助嗎?
在老式的 opengl 中,您將封裝一對 glPushMatrix(存儲矩陣堆棧狀態)和 glPopMatrix(恢復先前的轉換)調用之間的轉換更改。
glPushMatrix();
glRotatef(45.0f, 0, 1, 0); //< or whatever your rotation is.
drawObjectToBeRotated();
glPopMatrix();
// now any objects drawn here will not be affected by the rotation.
在現代 OpenGL 中,您需要為每個繪制的網格上傳一個單獨的 ModelViewProjection 矩陣作為頂點着色器統一體(並且有幾種方法可以做到這一點,無論是在統一變量中,統一緩沖區對象,着色器存儲 -緩沖區,或一些實例化的緩沖區輸入) 。
我在旋轉中使用 push 和 pup 矩陣,它根本不旋轉,它只旋轉一次
如果您使用glPushMatrix
/ glPopMatrix
,則當前矩陣由glPushMatrix
存儲在矩陣堆棧中,並在glPopMatrix
時恢復。 在兩者之間應用的所有矩陣變換都將丟失。
要實現連續旋轉,您必須使用增加的旋轉角度。 創建一個全局變量angle
並增加它。 例如:
float angle = 0.0f;
void draw()
{
// ...
glPushMatrix();
// apply rotation and increase angle
glRotatef(angle, 1.0f, 0.0f, 0.0f);
angle += 1.0f;
// draw the object
// ...
glPopMatrix();
// ...
}
請將代碼發送給我,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.