我想在屏幕上绘制下图:
|----| sphere
|----|
/ /
/ /
/ / cylinder
/ /
/ / angle = 45
| |
| |
| | cylinder
| |
| |
| |
----------- cylinder
-----------
我的输出:
/ /
/ /
/ / cylinder
/ / |-----| sphere
/ / angle = 45 |-----|
我将用圆柱体绘制顶部即球体。我的代码如下,请查看并说出错误。
我试图找到错误为什么我的原语不会彼此靠近。但是,我找不到。我试图更改translate的参数,但它不起作用。请帮忙
void object(void) {
GLUquadraticObj *t = gluNewQuadratic();
glTranslatef(-2.0f, -1.0f, 0.0f);
gluCylinder(t, 0.1f, 0.1f, 0.3f, 32,32);
gluSphere(t, 0.2f, 26, 13);
}
void display(void) {
glLoadIdentity();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
object();
glPopMAtrix();
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void reshape(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, w/h, 1.0, 500.0f);
glLoadIdentity();
}
答案 0 :(得分:0)
您需要在调用gluCylinder和gluSphere之间进行转换。在当前代码中,它们将具有相同的变换,即它们将处于相同的位置/方向。尝试:
gluCylinder ( t, 0.1f, 0.1f, 0.3f, 32,32);
glTranslatef ( -2.0f, -1.0f, 0.0f );
gluSphere ( t, 0.2f, 26, 13 ) ;
你也可以调用PopMatrix()多次调用PushMatrix()。