-2

可能重复:
在彼此附近绘制对象

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

             |----|   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 ) ;
4

1 回答 1

0

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

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

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

第一个问题是:这是在什么矩阵上运行。可能是模型视图,但我们不知道。在调用 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 对绘制圆柱体没有任何影响。


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

如果您不先掌握基础知识,我们将无法帮助您。我们很乐意帮助您到达那里。从画一些简单的东西开始,比如以窗口为中心的三角形。

于 2012-11-23T10:25:34.547 回答