Ау, что не знает чтоли ни кто??????? Вот программа, всё работает. сама программа поворачивает куб влево и вправо, при нажатии клавиш влево и вправо....... Осталось сделать, чтобы он не деформировался при разворачивании на весь экран.... Как это сделать?
Код | #include <windows.h> #include "GL\glut.h" #include <cmath>
#define PI 3.1415926535898
GLsizei winW=500, winH=600;
struct Vector { float x, y; };
Vector v1, v2, v3, v4; Vector pos; float angle;
void init() // Задаем установки программы { glClearColor(1.0,1.0,1.0,1.0); v1.x = 2; v1.y = 2; // записываем статичиские координаты фигуры v2.x =-2; v2.y = 2; v3.x =-2; v3.y =-2; v4.x = 2; v4.y =-2; }
void ChangeSize(int width,int height) { glViewport(0,0,width,height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho(-5,5, -5,5, 2,12); gluLookAt( 0,0,5, 0,0,0, 0,1,0 ); glMatrixMode( GL_MODELVIEW ); }
Vector Rotate(Vector v,float a) // функция вращения вектора на угол а. { Vector r;
a = a * (PI/180.0); r.x = (v.x*cos(a)) + (v.y*sin(a)); r.y = (v.x*-sin(a)) + (v.y*cos(a));
return r; }
void RanderScene() {
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glColor3f(1.0,0.0,1.0); //Цвет куба
glLoadIdentity();
if(GetAsyncKeyState(VK_LEFT)) angle -= 10; // Кнопки Влево и вправо крутят фигуру! if(GetAsyncKeyState(VK_RIGHT)) angle += 10;
Vector tv1 = Rotate(v1,angle); // создаем временой вектор для создания глобальних кординат Vector tv2 = Rotate(v2,angle); Vector tv3 = Rotate(v3,angle); Vector tv4 = Rotate(v4,angle);
glBegin(GL_QUADS); glVertex2f(tv1.x + pos.x, tv1.y + pos.y); // рисуем фигуру и добовляем позицию glVertex2f(tv2.x + pos.x, tv2.y + pos.y); glVertex2f(tv3.x + pos.x, tv3.y + pos.y); glVertex2f(tv4.x + pos.x, tv4.y + pos.y); glEnd();
glutSwapBuffers(); glutPostRedisplay();
}
int main() {
init(); glutInitWindowSize(winW, winH); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("Вращение Куба!");
glutReshapeFunc(ChangeSize); glutDisplayFunc(RanderScene); init();
glutMainLoop(); return 0; }
|
|