Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

OpenGL проекции   Найти похожие ветки 

 
_[*_0_*]_T_[*_0_*]_ izvrat_*   (2006-11-26 02:55) [0]


int ry = 0;

void glInit(){
....

glFrustum(0, 800, 600, 0, 1, 100);

....
}

void glDraw(){

...

 glTranslatef(0, 0, -1);

 glRotatef(ry, 0, 1, 0);

glBegin(GL_QUADS);
 glColor3f(1, 0, 0); glVertex3i(200, 200, 0);
 glColor3f(1, 0, 1); glVertex3i(400, 200, 0);
 glColor3f(0, 0, 0); glVertex3i(400, 400, 0);
 glColor3f(1, 1, 0); glVertex3i(200, 400, 0);
glEnd();
...
}



Хочу просто на месте вращать полигон, а он улетает куда-то вглубь экрана когда к ry добавляю 1. Вроде же не должен?
Или вообще растягиваться начинает...


 
chemodan   (2006-11-26 08:36) [1]


float ry = 0;

void update(){
........
     ry+=1;
........
};

void init() {
.........
       glMatrixMode(GL_PROJECTION);
               glLoadIdentity;
               gluPerspective(90, 4/3, 0.1, 21);
               glTranslated(0,0,-3);
               glOrtho(-300, 300, -300, 300, -500, 500);
               glViewport(0, 0, Form1.ClientWidth, Form1.ClientHeight);
       glMatrixMode(GL_MODELVIEW);
..........
};
//--------------
void Render(){
............
               glRotatef(ry, 0, 1, 0);

               glColor3f(1,0,0);
               glBegin(GL_QUADS);
                       glVertex3i(0, 0, 0);
                       glVertex3i(100, 0, 0);
                       glVertex3i(100, 100, 0);
                       glVertex3i(0, 100, 0);
               glEnd();
...........
};

Так вроде должно работать


 
@!!ex ©   (2006-11-26 08:39) [2]


> _[*_0_*]_T_[*_0_*]_ izvrat_*   (26.11.06 02:55)

Учитете математику.
Сначала вращаем, потом перемещаем.


 
_izvrat   (2006-11-26 18:02) [3]


> Сначала вращаем, потом перемещаем.

Не ошибаешься случайно?
---------------------------------
при таких раскладаx:

glResize
glFrustum(-1, 1, -1, 1, 1, 100);

glDraw
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);    
 glLoadIdentity();                                  

 glTranslatef(0, 0, tz);
 glRotatef(rx, 1, 0, 0);
 glRotatef(ry, 0, 1, 0);

 glBegin(GL_QUADS);
   glColor3f(0, 0, 0); glVertex3f(-1, -1, 0);
   glColor3f(0, 0, 1); glVertex3f(-1, 1, 0);
   glColor3f(0, 0, 0); glVertex3f(1, 1, 0);
   glColor3f(0, 0, 1); glVertex3f(1, -1, 0);
 glEnd();

получается человеческое вращение :)
а когда в glFrustum увеличиваешь значения - появляются странные эффекты... Почему?
(ex)


glResize
glFrustum(-800, 800, -600, 600, 1, 100);

glDraw
 glTranslatef(0, 0, -20);
// glRotatef(rx, 1, 0, 0);
 glRotatef(ry, 0, 1, 0);

 glBegin(GL_QUADS);
   glColor3f(0, 0, 0); glVertex3f(-500, -500, 0);
   glColor3f(0, 0, 1); glVertex3f(500, -500,  0);
   glColor3f(0, 0, 0); glVertex3f(500, 500,   0);
   glColor3f(0, 0, 1); glVertex3f(-500, 500,  0);
 glEnd();


При вращении полигон растягивается из глубины. (почему не просто вращается)


 
Nic ©   (2006-11-26 18:59) [4]


int ry = 0;

void glInit(){
....

glFrustum(0, 800, 600, 0, 1, 100);

....
}

void glDraw(){

...

glRotatef(ry, 0, 1, 0);
glTranslatef(0, 0, -1);
glBegin(GL_QUADS);
  glColor3f(1, 0, 0); glVertex3i(200, 200, 0);
  glColor3f(1, 0, 1); glVertex3i(400, 200, 0);
  glColor3f(0, 0, 0); glVertex3i(400, 400, 0);
  glColor3f(1, 1, 0); glVertex3i(200, 400, 0);
glEnd();
...
}


 
Nic ©   (2006-11-26 19:00) [5]

Или так:
glPushMatrix();
glRotatef(ry, 0, 1, 0);
glTranslatef(0, 0, -1);
glBegin(GL_QUADS);
 glColor3f(1, 0, 0); glVertex3i(200, 200, 0);
 glColor3f(1, 0, 1); glVertex3i(400, 200, 0);
 glColor3f(0, 0, 0); glVertex3i(400, 400, 0);
 glColor3f(1, 1, 0); glVertex3i(200, 400, 0);
glEnd();
glPopMatrx();


 
_izvrat   (2006-11-26 20:26) [6]

так вообще не понятно что...

может в другом месте что то не так:

procedure glDraw();
begin
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);    
 glLoadIdentity();                                  

// glRotatef(rx, 1, 0, 0);
 glRotatef(ry, 0, 1, 0); // хоть так хоть на оборот с транслэйтом
 glTranslatef(0, 0, -2);

 glBegin(GL_QUADS);
   glColor3f(0, 0, 0); glVertex3f(200, 200, 0);
   glColor3f(0, 0, 1); glVertex3f(400, 200, 0);
   glColor3f(0, 0, 0); glVertex3f(400, 400, 0);
   glColor3f(0, 0, 1); glVertex3f(200, 400, 0);
 glEnd();

end;

procedure glInit();
begin
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glShadeModel(GL_SMOOTH);
 glClearDepth(1.0);
 glEnable(GL_DEPTH_TEST);
 glDepthFunc(GL_LESS);

// glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
end;

procedure glResize(Width, Height : Integer);
begin
 if (Height = 0) then                
   Height := 1;
 glViewport(0, 0, Width, Height);  
 glMatrixMode(GL_PROJECTION);      
 glLoadIdentity();  
             
 glFrustum(0, 800, 600, 0, 1, 100);

 glMatrixMode(GL_MODELVIEW);      
 glLoadIdentity();              
end;



Страницы: 1 вся ветка

Текущий архив: 2007.12.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1195297585
Kolan
2007-11-17 14:06
2007.12.16
Как разобраться как работает механизм ShortCut у TAction?


15-1195105781
ZeroDivide
2007-11-15 08:49
2007.12.16
Требования к ПО для обеспечения совместимости с Vista


15-1194969728
Кручен-Верчен
2007-11-13 19:02
2007.12.16
Нейроинформатика


2-1195379062
Новичек
2007-11-18 12:44
2007.12.16
Передача параметров другой программе.


15-1195104247
Alex_C
2007-11-15 08:24
2007.12.16
Проблема с мультимедиа таймером.