绘制圆柱体

sketch cylinder

本文关键字:圆柱体 绘制      更新时间:2023-10-16

可能的重复:
绘制彼此靠近的对象

我想在屏幕上绘制下图;

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

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

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

这设置了颜色状态。当然通常将此调用与要绘制的几何图形进行分组,但不将其放在代码中间的某个位置。

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

绕轴(1,1,0)旋转,也就是说,这就像将轴穿过对象,穿过局部原点并指向点(1,0,0),然后绕该轴旋转90°。

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

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

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

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


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

如果你不先掌握基本知识,我们就无法帮助你。我们很乐意帮助你到达那里。从画一些简单的东西开始,比如在窗户中央画一个三角形。