簡體   English   中英

如何僅旋轉特定對象而不影響opengl中的其他對象?

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

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