/* gcc test.c -o test -lGL -lGLU -lglut -lXi -lXmu */
#include <stdlib.h>
#include <stdio.h>
/* подключаем библиотеку GLUT */
#include <GL/glut.h>
#include <math.h>
/* начальная ширина и высота окна */
GLint Width = 500, Height = 500;
int R = 1;
int LOOK = 0;
float eyeX = 0,eyeY = 0,eyeZ = 0, lookX = 0,lookY = 0,lookZ = 0, upX = 0,upY = 1,upZ = 0;
void changeLOOK() {
if (LOOK == 1) {
LOOK = 0;
eyeZ = -4.0;
}
else {
LOOK = 1;
eyeZ = 4.0;
}
}
void Circle()
{
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -2.0f);
glColor3ub(0,0,255);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(Width/2, Height/2);
for (int i = 0; i < 100; i++){
float angle = (float)i / 3.1415f * 100 * 2.0;
glVertex2f(Width/2-cos(angle)*100, Height/2-sin(angle)*100);
}
glEnd();
glLoadIdentity();
glTranslatef(5.0f, 5.0f ,2.0f);
glColor3ub(255,0,0);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(Width/2, Height/2);
for (int i = 0; i < 100; i++){
float angle = (float)i / 3.1415f * 100 * 2.0;
glVertex2f(Width/2-cos(angle)*100, Height/2-sin(angle)*100);
}
glEnd();
}
void Display(void)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
Circle();
glLoadIdentity();
gluLookAt(eyeX, eyeY, eyeZ,
lookX, lookY, lookZ,
upX, upY, upZ);
glFinish();
}
/* Функция вызывается при изменении размеров окна */
void Reshape(GLint w, GLint h)
{
Width = w;
Height = h;
/* устанавливаем размеры области отображения */
glViewport(0, 0, w, h);
/* ортографическая проекция */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glFrustum(0, w, 0, h, 1, 200.0);
glOrtho(0, w, 0, h, -10, 10);
glMatrixMode(GL_MODELVIEW);
}
/* Функция обрабатывает сообщения от клавиатуры */
void Keyboard(unsigned char key, int x, int y)
{
#define ESCAPE '\033'
#define key_n 'n'
if( key == ESCAPE )
exit(0);
if (key == key_n)
{
printf("eyeX = %f eyeY = %f eyeZ = %f \n",eyeX, eyeY, eyeZ );
printf("lookX = %f lookY = %f lookZ = %f \n",lookX, lookY, lookZ );
printf("upX = %f upY = %f upZ = %f \n",upX, upY, upZ );
printf("-------------------------\n");
glMatrixMode(GL_MODELVIEW);
changeLOOK();
}
}
/* Главный цикл приложения */
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowPosition(700, 0);
glutInitWindowSize(Width, Height);
glutCreateWindow("red square");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
return 1;
}