热心网友
回答时间:2025-02-06 21:02
你好, 这是我修改过了的程序, 应该是观察位置不对的问题. 我也是新手, 大家互相学习吧.
改动的地方已经标出了
#define GLUT_DISABLE_ATEXIT_HACK
#include <windows.h>
#include <math.h>
#include <gl/glut.h>
#include <gl/gl.h>
#define GL_PI 3.1415f
int XRot = 30;
int YRot = 30;
void SetupRC(){
glClearColor(0.0f,0.0f,0.0f,1.0f);
glColor3f(1.0f,1.0f,1.0f);
}
void RenderScene(void)
{
GLfloat x,y,z,angle;
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(0, 0, -80); // 改动1: 改变初始的位置
glRotatef(XRot,1.0f,0.0f,0.0f);
glRotatef(YRot,0.0f,1.0f,0.0f);
glBegin(GL_POINTS);
z= -50.0f;
for(angle = 0.0f;angle<=(2.0f*GL_PI)*3.0f;angle+=0.1f)
{
x=50.0f*sin(angle);
y=50.0f*cos(angle);
glVertex3f(x,y,z);
z+=0.5f;
}
glEnd();
glPopMatrix();
glFlush();
}
// 改动2: 重定义视口及观察点
void resize(int width, int height)
{
glViewport(0, 0, width, height);
gluPerspective(120, 1.0, 15, -15);
}
void special(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
YRot-=5;
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
YRot+=5;
glutPostRedisplay();
break;
case GLUT_KEY_UP:
XRot+=5;
glutPostRedisplay();
break;
case GLUT_KEY_DOWN:
XRot-=5;
glutPostRedisplay();
break;
}
}
void main(void)
{
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("Hello Jojo");
glutDisplayFunc(RenderScene);
glutSpecialFunc(special);
glutReshapeFunc(resize); //改动2: 增加回调函数
SetupRC();
glutMainLoop();
}
收起