草图圆筒

时间:2012-11-23 10:02:16

标签: c++ c opengl graph

  

可能重复:
  sketching object near to each other

我想在屏幕下方绘制图表;

             |----|   sphere
             |----|
             / /
            / /
           / /         cylinder
          / /
         / / angle = 45
         | |
         | |
         | |           cylinder (i)
         | |
         | |
         | |
 -----------           cylinder
 -----------

要绘制标有(i)的圆柱,我使用下面的代码,你能帮我解决我的错误,因为我无法画画(i)吗?

glTranslatef(0.0f, 10.0f, 400.0f ) ;
glColor3f ( 0.0f, 1.0f, 1.0f ) ;
glRotatef (90.0f, 1.0f, 1.0f, 0.0f );
gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);
glTranslatef(0.0f, 10.0f, -400.0f ) ;

1 个答案:

答案 0 :(得分:0)

我不想成为这里的坏人,所以让我解释一下,为什么没有上下文以及为什么你需要理解这些代码是没有价值的。

让我们逐行浏览这个片段。这一切都以

开头
glTranslatef(0.0f, 10.0f, 400.0f ) ;

第一个问题是:这是什么矩阵运作。可能是modelview,但我们不知道。那个调用glTranslatef之前的矩阵是什么? OpenGL矩阵操作有点像x86汇编,因为它们用操作的结果替换堆栈上的矩阵。

glColor3f ( 0.0f, 1.0f, 1.0f ) ;

设置颜色状态。当然。一个人通常将此调用与要绘制的几何图形组合在一起,而不是将其放在代码中间的某个位置。

glRotatef (90.0f, 1.0f, 1.0f, 0.0f );

围绕轴(1,1,0)旋转,即它像穿过物体的轴,穿过本地原点并朝向点(1,1,0),然后旋转90°关于这个轴。

gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);

现在绘制一个圆柱体,它将首先旋转,然后平移,然后......只有你知道,因为你省略了部分,在开始渲染帧时模型视图矩阵被重置。

glTranslatef(0.0f, 10.0f, -400.0f ) ;

最终的glTranslatef对绘制圆柱体没有任何影响。


你现在看到问题了吗?你问的是一个非常具体的问题,那显然是家庭作业,在那里放了一些随机代码,只是问“如何画出来”,不知道你在做什么。

如果你没先先掌握基础知识,我们就无法帮助你。我们很乐意帮助您到达那里。首先绘制一些简单的东西,比如窗口中心的三角形。