0

我需要在 OpenGL 的 VTK(vtkaxesactor 类)中显示 xyz 轴,它位于场景的左下方。

我正在寻找前景中的 3(x,y,z) 彩色轴,它在旋转时会产生方向感,但与缩放无关。

是否有执行此操作的 GLUT 类?如果不是,如何实现这一点?

编辑以下 datenwolf 的评论:

我跟踪 x、y、z 平移和平移的范围。(我使用 pyopengl)

def renderAxis(self):

        glViewport(0,0,self.width()/8,self.height()/8)
        self.translate([-1*self.xpan,-1*self.ypan,-1*self.zpan])

        glMatrixMode(GL_MODELVIEW)
        glLineWidth(2)
        glBegin(GL_LINES)
        glColor(1, 0, 0)    #Xaxis, Red color
        glVertex3f(0, 0, 0)
        glVertex3f(0.15, 0, 0)
        glColor(0, 1, 0)    #Yaxis, Green color
        glVertex3f(0, 0, 0)
        glVertex3f(0, 0.15, 0)
        glColor(0, 0, 1)    #Zaxis, Blue color
        glVertex3f(0, 0, 0)
        glVertex3f(0, 0, 0.15)
        glEnd()

        glutInit()
        glColor(1,0,0)
        glRasterPos3f(0.16, 0.0, 0.0)
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13,88)#ascii x
        glColor(0,1,0)
        glRasterPos3f(0.0, 0.16, 0.0)
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13,89)#ascii y
        glColor(0,0,1)
        glRasterPos3f(0.0, 0.0, 0.16)
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13,90)#ascii z

        self.translate([self.xpan,self.ypan,self.zpan])
        glViewport(0,0,self.width(),self.height())

   def translate(self, _trans):
        self.makeCurrent()
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()
        glTranslated(_trans[0], _trans[1], _trans[2])
        glMultMatrixd(self.modelview_matrix_)
        self.modelview_matrix_ = glGetDoublev(GL_MODELVIEW_MATRIX)
        self.translate_vector_[0] = self.modelview_matrix_[3][0]
        self.translate_vector_[1] = self.modelview_matrix_[3][1]
        self.translate_vector_[2] = self.modelview_matrix_[3][2]

这可以完成工作,但是我怀疑这是否是最好的方法。

4

1 回答 1

1

过剩课?您确实意识到 GLUT 不使用类?还有为什么这么复杂,只画那些轴。在显示函数的末尾添加以下内容:

void display(void)
{
     /* ... */
     glMatrixMode(GL_MODELVIEW);
     GLfloat modelview[16];
     glGetFloatfv(GL_MODELVIEW_MATRIX, modelview);
     modelview[12] = modelview[13] = modelview[14] = 0.;
     modelview[15] = 1.;
     glLoadMatrixf(modelview);

     glViewport(0, 0, mini_axis_width, mini_axis_height);

     GLfloat miniaxis[] = {
          0., 0., 0., 1., 0., 0.,
          1., 0., 0., 1., 0., 0.,

          0., 0., 0., 0., 1., 0.,
          0., 1., 0., 0., 1., 0.,

          0., 0., 0., 0., 0., 1.,
          0., 0., 1., 0., 0., 1.,
     };

     glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_COLOR_ARRAY);
     glVertexPointer(3, GL_FLOAT, 6*sizeof(GLfloat), miniaxis);
     glColorPointer(3, GL_FLOAT, 6*sizeof(GLfloat), miniaxis+3);
     glDrawArrays(GL_LINES, 0, 6);

     SwapBuffers();
}
于 2011-07-05T18:47:54.547 回答