使用特定旋转定义和操作3D对象

时间:2011-02-14 02:07:15

标签: opengl

我已经渲染了一个由7个螺旋组成的非常粗糙的分子模型,并且想要询问是否有可能允许螺旋本身以某种方式倾斜(旋转)以便彼此相互作用。为清楚起见,我插入了程序输出的图像(虽然对于正交投影,因此它看起来像是3D螺旋投影到2D平面上)。

enter image description here

我已经包含了用于渲染单个螺旋的代码(所有其他螺旋都相同)。

将对象的几何体存储在顶点数组中而不是每次为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(); 

1 个答案:

答案 0 :(得分:0)

  

存储它是否有用   顶点中我的对象的几何   数组而不是每个呈现它们   时间分别为7种不同   颜色? (每个螺旋由36,000组成   顶点和我担心的   数组可能会变得足够大而导致   严重的表现问题?

使用顶点数组绘制几何图形总是有意义的。在您的情况下,由36k *(5个浮动指针操作+ 2个函数调用)引起的开销将严重影响您的性能。使用顶点数组可以轻松获得100倍的性能增益,因为您不会在每次调用时重新创建数据。

您可能也有兴趣不使用线条,因为您无法以任何有用的方式遮挡它们。我通过创建基本的构建块来渲染这些螺旋,这些构造块是由沿着螺旋线挤出的椭圆形创建的。内螺旋和两个帽的一个基本块。通过沿一个轴镜像可以很容易地改变手征性。使用现代OpenGL实现,您可以在intra-helix-element上实现实例化,以进一步提高性能。

如果你想弯曲螺旋线,我会使用骨架蒙皮来做到这一点。

相关问题