簡體   English   中英

定義和操縱具有特定旋轉度的3D對象

[英]Defining and Manipulating a 3D Object with Specific Rotations

我已經繪制了一個由7個螺旋組成的分子的非常粗糙的模型,並想問一問是否有可能允許螺旋自身以某些方式傾斜(旋轉)以便彼此相互作用。 為了清楚起見,我插入了程序輸出的圖像(盡管是正交投影,所以它看起來像是3D螺旋在2D平面上的投影)。

在此處輸入圖片說明

我已經包含了用於租用單個螺旋的代碼(所有其他螺旋都相同)。

將我的對象的幾何形狀存儲在頂點數組中,而不是每次分別為7種不同的顏色進行渲染,是否有用? (每個螺旋由36,000個頂點組成,我擔心數組的大小可能會引起嚴重的性能問題嗎?)

我知道矩陣堆棧是用於在特定對象上執行多個連續的單獨轉換的數據結構,但是我不確定如何確切指定以便使我的整個螺旋都可以傾斜? (由於某些原因,glRotatef實際上不會傾斜螺旋)

/*HELIX RENDERING*/

glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(0.0, 100.0, -5.0);  //Move Position
glRotatef(90.0, 0.0, 0.0, 0.0);
glBegin(GL_LINE_STRIP);

for(theta = 0.0; theta <= 360.0; theta += 0.01) {   
    x = r*(cosf(theta));
    y = r*(sinf(theta));
    z = c*theta;
    glVertex3f(x,y,z);
    glColor3f(1.0, 1.0, 0.0);           
}

glEnd();
glPopMatrix(); 

將我的對象的幾何形狀存儲在頂點數組中,而不是每次分別為7種不同的顏色進行渲染,是否有用? (每個螺旋包含36,000個頂點,我擔心數組的大小可能會引起嚴重的性能問題?

使用頂點數組繪制幾何圖形總是有意義的。 在您的情況下,由這些36k *(5個浮指針操作+ 2個函數調用)引起的開銷將嚴重影響您的性能。 使用頂點數組將使您輕松獲得100倍的性能提升,只是因為您不會在每次調用時都重新創建數據。

您可能還對不使用線條感興趣,因為您無法以任何有用的方式為它們着色。 我會通過創建基本的構建塊來渲染這些螺旋,這些基本的構建塊是由沿螺旋線拉伸的橢圓形創建的。 一個基本塊用於內螺旋和兩個帽。 通過沿一個軸鏡像可以很容易地改變手性。 使用現代OpenGL實現,您可以在內部螺旋元素上實現實例化以進一步提高性能。

如果您想彎曲螺旋線,我將使用骨骼蒙皮進行此操作。

暫無
暫無

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

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