Я новичок в OpenGL, и я пытаюсь имитировать планетарную систему. У меня есть Земля и Солнце. Я хочу, чтобы земля вращалась по ее оси при нажатии R
и вращается вокруг солнца при нажатии T
. Я пробовал следующее без успеха. Вот код до сих пор:Как я могу заставить эту сферу вращаться вокруг другой, когда я нажимаю клавишу?
#include <GL/glut.h>
int angle=1;
int x,y,z=0;
int axis=0;
void init(void){
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void drawEarth(void){
glutWireSphere(0.5,30,30);
}
void idleFunc(){
angle++;
glutPostRedisplay();
}
void key(unsigned char key, int x, int y){
if (key=='R'){
idleFunc(); // How can I make this function run ONLY when I press R?
//Or how can I make my earth continuosly rotating when I press R?
glutPostRedisplay();
} else
if(key=='T'){
//How can I make it revolve around the sun when I press key T?
//I have tried glTranslate(x,y,z); with no success
glutPostRedisplay();
}
}
void display(void){
glClearColor(0.05,0.05,0.5,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///////////////////////
glColor3f(0.03,0.05,0.09);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glRotatef(angle, 1.0,1.0,1.0); //Is this making it rotate about its axis?
drawEarth(); //Draw Earth
glPopMatrix();
/////////////////////////////////////
glPushMatrix();
glTranslatef(.7,.7,.7);
glColor3f(1.0,1.0,1.0);
glutWireSphere(0.2,50,50); //Sun
glPopMatrix();
glFlush();
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowPosition(10,10);
glutInitWindowSize(400,400);
init();
glutCreateWindow("Planets");
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idleFunc);
glFlush();
glutMainLoop();
}
Вопрос:
Как я могу сделать землю вращаться вокруг Солнца? Благодарю.
PS: Я добавил несколько комментариев в код, где я запутался.