Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 定义和操作具有特定旋转的三维对象_Opengl - Fatal编程技术网

Opengl 定义和操作具有特定旋转的三维对象

Opengl 定义和操作具有特定旋转的三维对象,opengl,Opengl,我已经呈现了一个由7个螺旋组成的分子的非常粗略的模型,我想问一下,是否有可能允许螺旋本身以某种方式倾斜旋转,以便相互作用。为清晰起见,我插入了程序输出的图像,尽管是正交投影,因此它显示为3D螺旋线在2D平面上的投影 我已经包括了代码撕裂一个单一的螺旋所有其他都是相同的 将对象的几何体存储在顶点数组中,而不是针对7种不同的颜色分别渲染它们,这是否有用?每个螺旋线由36000个顶点组成,我担心阵列可能变得足够大,从而导致严重的性能问题 我知道矩阵堆栈是在特定对象上执行多个连续单个变换的数据结构,但我

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

我已经包括了代码撕裂一个单一的螺旋所有其他都是相同的

将对象的几何体存储在顶点数组中,而不是针对7种不同的颜色分别渲染它们,这是否有用?每个螺旋线由36000个顶点组成,我担心阵列可能变得足够大,从而导致严重的性能问题

我知道矩阵堆栈是在特定对象上执行多个连续单个变换的数据结构,但我不确定如何精确指定,以便我的整个螺旋可以倾斜?由于某些原因,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个不同的 颜色?每个螺旋线由36000个组成 顶点,我担心 数组可能变得足够大,导致 严重的性能问题

使用顶点数组绘制几何图形总是有意义的。在您的情况下,那些36k*5浮点指针操作+2个函数调用造成的开销将严重影响您的性能。使用顶点数组可以轻松获得100倍的性能增益,这仅仅是因为您没有在每次调用中重新创建数据

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


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

你可能对glDisplayList非常感兴趣:还有,glRotatef90.0、0.0、0.0、0.0;旋转x,y,z 0.0*90;尝试glRotatef90.0、1.0、0.0、0.0;旋转x轴90@Williwaw感谢您的建议,glRotate90.0f,1.0f,1.0f,0.0似乎大致就是我想要的仿射变换类型。我曾考虑在我的程序中使用显示列表,但对于仅渲染七个螺旋,似乎没有必要增加内存负担,因为图形卡将处理大多数渲染命令。我将使用带顶点位置的VBO和简单的颜色统一。感谢您提供的信息!我将基本体从GL_线更改为GL_点,渲染的图像稍好一些。描述螺旋的准确性不如让它们以交互方式做有趣的事情重要,我认为让它们看起来像3D的方法是使用照明模式。问题是,照明在直线上效果不好,在点上效果也不好,因为它们没有法向量。直线具有切线,可以在切线照明中使用,但为此需要着色器。