Possible Duplicate:
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 ) ;

最佳答案

我不想在这里成为坏人,所以让我解释一下,如果没有上下文,那段代码为什么一文不值,以及为什么您需要理解。

让我们逐行浏览此代码段。一切始于

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对绘制圆柱体没有任何影响。



您现在看到问题了吗?您在问一个非常具体的问题,那就是家庭作业,在其中放置一些随机代码,只问“如何绘制”,却不知道您实际上在做什么。

如果您不首先掌握基础知识,我们将无法为您提供帮助。我们很乐意为您提供帮助。首先画一些简单的东西,例如以窗口为中心的三角形。

09-27 01:55