Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL/glut.h>
- #include <math.h>
- // Вращение по орбите
- float alpha = 5;
- //Свет
- float ambient[] = {0.0, 0.0, 0.0, 1.0};
- float diffuse[] = { 1.0,1.0,1.0,1.0 };
- float lpos[] = { 0.0, 0.0, 0.0, 1.0 };
- float black[] = { 0.0, 0.0, 0.0, 1.0 };
- //Переменные для поворота мышкой
- double angle1 = 0.0f;
- double deltaAngle1 = 0.0f;
- double angle2 = 0.0f;
- double deltaAngle2 = 0.0f;
- int xOrigin = 0;
- int yOrigin = 0;
- bool leftButtonDown = false;
- //Переменные для отрисовки круга
- GLfloat theta;
- GLfloat pi = acos(-1.0);
- GLfloat radius = 2.0f; // радиус
- GLfloat step = 6.0f; // чем больше шаг тем хуже диск
- //Переменная отвечающая за развивание флага
- GLfloat k = 0.0f;
- void mouseButton(int button, int state, int x, int y) {
- if (button == GLUT_LEFT_BUTTON) {
- if (state == GLUT_DOWN) {
- xOrigin = x;
- yOrigin = y;
- leftButtonDown = true;
- }
- else {
- leftButtonDown = false;
- angle1 += deltaAngle1;
- angle2 += deltaAngle2;
- deltaAngle1 = 0;
- deltaAngle2 = 0;
- }
- }
- }
- void mouseMove(int x, int y) {
- if (leftButtonDown) {
- deltaAngle1 = (x - xOrigin)*0.5f;
- deltaAngle2 = (y - yOrigin)*0.5f;
- }
- }
- void renderScene(void) {
- glEnable(GL_LIGHT0);
- glLightfv(GL_LIGHT0, GL_POSITION, lpos);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // обнуление трансформации
- glLoadIdentity();
- // установка камеры
- gluLookAt(0.0f, 0.0f, 10.0f,
- 0.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 0.0f);
- glPushMatrix();
- glRotatef(angle1 + deltaAngle1, 0, 1, 0);
- glRotatef(angle2 + deltaAngle2, 1, 0, 0);
- glPushMatrix();
- glDisable(GL_LIGHTING);
- glutSolidSphere(0.7, 128, 128); //Солнце
- glEnable(GL_LIGHTING);
- alpha+=0.1;
- glPushMatrix();
- glRotatef(alpha*10.0, 0, 1, 0);
- glTranslatef(-1.1, 0, 0);
- glutSolidSphere(0.025, 128, 128); //Меркурий
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*9.0, 0, 1, 0);
- glTranslatef(-1.3, 0, 0);
- glutSolidSphere(0.06, 128, 128); //Венера
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*8.0, 0, 1, 0);
- glTranslatef(-1.5, 0, 0);
- glutSolidSphere(0.065, 128, 128); //Земля
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*7.0, 0, 1, 0);
- glTranslatef(-1.7, 0, 0);
- glutSolidSphere(0.02, 128, 128); //Церера
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*6.0, 0, 1, 0);
- glTranslatef(-1.9, 0, 0);
- glutSolidSphere(0.025, 128, 128); //Марс
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*5.0, 0, 1, 0);
- glTranslatef(-2.6, 0, 0);
- glutSolidSphere(0.25, 128, 128); //Юпитер
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*4.0, 0, 1, 0);
- glTranslatef(-3.2, 0, 0);
- glutSolidSphere(0.2, 128, 128); //Сатурн
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*3.0, 0, 1, 0);
- glTranslatef(-3.6, 0, 0);
- glutSolidSphere(0.11, 128, 128); //Уран
- glPopMatrix();
- glPushMatrix();
- glRotatef(alpha*2.0, 0, 1, 0);
- glTranslatef(-3.87, 0, 0);
- glutSolidSphere(0.115, 128, 128); //Нептун
- glPopMatrix();
- glPopMatrix();
- glutSwapBuffers();
- }
- void changeSize(int w, int h) {
- if (h == 0)
- h = 1;
- float ratio = 1.0* w / h;
- // используем матрицу проекции
- glMatrixMode(GL_PROJECTION);
- // Reset матрицы
- glLoadIdentity();
- // определяем окно просмотра
- glViewport(0, 0, w, h);
- // установить корректную перспективу.
- gluPerspective(45, ratio, 1, 1000);
- // вернуться к модели
- glMatrixMode(GL_MODELVIEW);
- }
- int main(int argc, char **argv) {
- // инициализация
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
- glutInitWindowPosition(100, 100);
- glutInitWindowSize(1000, 600);
- glutCreateWindow("Test project");
- glEnable(GL_DEPTH_TEST);
- //свет
- glEnable(GL_LIGHTING);
- glEnable(GL_NORMALIZE);
- //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black);
- glEnable(GL_COLOR_MATERIAL);
- glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
- // регистрация обратных вызовов
- glutDisplayFunc(renderScene);
- glutReshapeFunc(changeSize);
- glutIdleFunc(renderScene);
- glutMouseFunc(mouseButton);
- glutMotionFunc(mouseMove);
- // Основной цикл GLUT
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement