首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >定义和操纵具有特定旋转的3D对象

定义和操纵具有特定旋转的3D对象
EN

Stack Overflow用户
提问于 2011-02-14 10:07:15
回答 1查看 467关注 0票数 0

我已经绘制了一个由7个螺旋组成的分子的非常粗略的模型,我想问一下,是否有可能让螺旋本身以某种方式倾斜(旋转),以便彼此相互作用。为了清楚起见,我插入了程序输出的图像(尽管是正交投影,因此它显示为3D螺旋在2D平面上的投影)。

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

将对象的几何形状存储在顶点数组中,而不是每次分别渲染7种不同的颜色是否有用?(每个螺旋由36,000个顶点组成,我担心数组可能会变得足够大,从而导致严重的性能问题?)

我知道矩阵堆栈是用于在特定对象上执行多个连续的单独转换的数据结构,但我不确定如何确切地指定,以便我的整个螺旋可以倾斜?(由于某些原因,glRotatef实际上并不会倾斜螺旋)

代码语言:javascript
运行
复制
/*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(); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-15 19:50:53

将对象的几何图形存储在顶点数组中,而不是每次分别渲染7种不同的颜色,这是否有用?(每个螺旋由36,000个顶点组成,我担心数组可能会变得足够大,从而导致严重的性能问题?

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

你也可能对不使用线条感兴趣,因为你不能以任何有用的方式对它们进行着色。我会通过创建基本的构建块来渲染这些螺旋线,这些构建块是从沿着螺旋线挤出的椭圆创建的。一个用于螺旋内的基本块和两个帽。手性很容易通过沿一个轴进行镜像来改变。使用现代的OpenGL实现,您可以在内部螺旋元素上实现实例化,以进一步提高性能。

如果你想弯曲螺旋,我会使用骨骼蒙皮。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4988255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档