我已经绘制了一个由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();
发布于 2011-02-15 19:50:53
将对象的几何图形存储在顶点数组中,而不是每次分别渲染7种不同的颜色,这是否有用?(每个螺旋由36,000个顶点组成,我担心数组可能会变得足够大,从而导致严重的性能问题?
使用顶点数组绘制几何图形总是有意义的。在您的情况下,由36k * (5个浮点指针操作+2个函数调用)造成的开销将严重影响您的性能。使用顶点数组可以轻松获得100倍的性能提升,因为您不需要在每次调用时都重新创建数据。
你也可能对不使用线条感兴趣,因为你不能以任何有用的方式对它们进行着色。我会通过创建基本的构建块来渲染这些螺旋线,这些构建块是从沿着螺旋线挤出的椭圆创建的。一个用于螺旋内的基本块和两个帽。手性很容易通过沿一个轴进行镜像来改变。使用现代的OpenGL实现,您可以在内部螺旋元素上实现实例化,以进一步提高性能。
如果你想弯曲螺旋,我会使用骨骼蒙皮。
https://stackoverflow.com/questions/4988255
复制相似问题