Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Фиксированный размер объекта


Автор: stat007 11.1.2010, 23:22
Как, что и где нужно прописать в коде, чтобы объект был фиксированного размера, т.е. когда окно разворачиваешь на весь экран, объект отображался таким же как и такого же размера как и в обычном открытом окне???

Автор: stat007 12.1.2010, 23:21
Ау, что не знает чтоли ни кто???????
Вот программа, всё работает. сама программа поворачивает куб влево и вправо, при нажатии клавиш влево и вправо.......
Осталось сделать, чтобы он не деформировался при разворачивании на весь экран.... Как это сделать? smile 
Код

#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;
}

Автор: Zefick 13.1.2010, 14:28
  Нужно чтобы первые четыре аргумента функции glOrtho были пропорциональны высоте экрана.

Автор: stat007 13.1.2010, 22:07
Zefick
Цитата

Нужно чтобы первые четыре аргумента функции glOrtho были пропорциональны высоте экрана.

В смысле пропорциональны высоте экрана? И как это тогда будет выглядеть?? Сама строка я имею ввиду????

Автор: Zefick 14.1.2010, 05:58
  как-то так: glOrtho(-height/100.f, height/100.f, -height/100.f, height/100.f, 0.1, 100);

Автор: SkIv1989 14.1.2010, 07:46
stat007, есть классная книжка называется OpenGL RedBook, она даже на русском есть, там найдешь ответы на свои вопросы.

Автор: Rickert 14.1.2010, 13:42
www.progz.ru smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)