Вниз
Скачать: CL | DM;

Rotate in OpenGL   Найти похожие ветки 

← →
Creep   (2004-11-06 19:09) [0]

Помогите пожалуйста с поворотом в OpenGL. Чтобы квадрат,многоугольник и т.д крутились вокруг своей оси (я ипользую glRotate), а не вокруг центра окна.


← →
марсианин ©   (2004-11-06 20:51) [1]

когда делаешь glRotate - все поворачивается вокруг текущего ценра координат. его надо сначала просто сдвинуть

glPushMatrix();

 glTranslate() //в точку, где д.б центр квадрата
 glRotate()     // вращаем

 Рисуем квадрат с центром в (0,0,0)

glPopMatrix();


← →
Creep   (2004-11-06 22:08) [2]

Тогда просто полудается квадрат остается на месте. А мы двигаем систему кординат.
И еще как определять столкновения одново квадрата с другим по OpenGL"ски.


← →
Creep   (2004-11-06 22:17) [3]

По кординате Z сравнивать не надо.
И еще как обращаться к этим "квадратам". Например  просто в Delphi Form1.Image1.left, а в OpenGl Как?


← →
Колбасьев ©   (2004-11-06 22:31) [4]

Помоему, по указателю на участок памяти, содержащий квадрат.
И в обще в OpenGL и DirectX про всякие удобные вещи типа


> Form1.Image1.left,


нужно сразу забыть, если только ты не напишешь их сам :-)


← →
Creep   (2004-11-06 23:14) [5]

А как этот указатель выловить


← →
Колбасьев ©   (2004-11-06 23:47) [6]

Я не спец по OpenGL. Точно не помню: там либо указатель либо массив вершин. Это у OpenGL"шников распросить надо.


← →
марсианин ©   (2004-11-07 00:39) [7]


> Тогда просто полудается квадрат остается на месте. А мы
> двигаем систему кординат.


не понял.. квадрату вообще параллельно. он просто есть. а это наши проблемы как построить систему координат.


> И еще как обращаться к этим "квадратам". Например  просто
> в Delphi Form1.Image1.left, а в OpenGl Как?


тебе нужно получить новые координаты вершин квадрата после всех сдвигов/поворотов?


> Помоему, по указателю на участок памяти, содержащий квадрат


можно выловить указатель на текущую матрицу преобразований. никаких точек опенгл не запоминает


← →
Shulkin   (2004-11-07 03:56) [8]

to марсианин : "никаких точек опенгл не запоминает". А что нам
мешает запомнить их самим? Просто пишем процедуру вроде этой :

Procedure DrawCube ( x,y,z,Size : GLfloat) ;
begin
   glBegin (GL_QUADS);
    glVertex3f ( X+Size , Y+Size , Z+Size ) ;
    glVertex3f ( X-Size , Y+Size , Z+Size ) ;
    glVertex3f ( X-Size , Y-Size , Z+Size ) ;
    glVertex3f ( X+Size , Y-Size , Z+Size ) ;
   glEnd ;

   glBegin (GL_QUADS);
    glVertex3f ( X+Size , Y+Size , Z-Size ) ;
    glVertex3f ( X+Size , Y-Size , Z-Size ) ;
    glVertex3f ( X-Size , Y-Size , Z-Size ) ;
    glVertex3f ( X-Size , Y+Size , Z-Size ) ;
   glEnd ;

   glBegin (GL_QUADS);
    glVertex3f ( X-Size , Y+Size , Z+Size ) ;
    glVertex3f ( X-Size , Y+Size , Z-Size ) ;
    glVertex3f ( X-Size , Y-Size , Z-Size ) ;
    glVertex3f ( X-Size , Y-Size , Z+Size ) ;
   glEnd ;

   glBegin (GL_QUADS);
    glVertex3f ( X+Size , Y+Size , Z+Size ) ;
    glVertex3f ( X+Size , Y-Size , Z+Size ) ;
    glVertex3f ( X+Size , Y-Size , Z-Size ) ;
    glVertex3f ( X+Size , Y+Size , Z-Size ) ;
   glEnd ;

   glBegin (GL_QUADS);
    glVertex3f ( X-Size , Y+Size , Z-Size ) ;
    glVertex3f ( X-Size , Y+Size , Z+Size ) ;
    glVertex3f ( X+Size , Y+Size , Z+Size ) ;
    glVertex3f ( X+Size , Y+Size , Z-Size ) ;
   glEnd ;

   glBegin (GL_QUADS);
    glVertex3f ( X-Size , Y-Size , Z-Size ) ;
    glVertex3f ( X+Size , Y-Size , Z-Size ) ;
    glVertex3f ( X+Size , Y-Size , Z+Size ) ;
    glVertex3f ( X-Size , Y-Size , Z+Size ) ;
   glEnd ;
end;

Ну а потом заводим глобальные X,Y,Z и Size и по ним управляем
кубом - вращаем, двигаем и т.д.

to Creep : Коллизии также определяются по значениям координат и
размеров 2 кубов - нужно просто их сравнить.


← →
OSokin ©   (2004-11-07 16:27) [9]

to Creep: ты случайно не Краснова читаешь?
Если надо, могу замылить мой компонент GLForm (инициализирует на обычной форме OpenGL), только там при изменении размера небольшие ошибки


← →
Creep   (2004-11-07 20:10) [10]

Да я то какраз и краснова читаю.


← →
марсианин ©   (2004-11-07 23:00) [11]

[8] Shulkin

конечно! но в результате действия всяких glTranslate, glRotate есt координаты вершин (которые на экране нарисуются) будут другими..

вывод: посчитать готовые координаты вершин повернутых квадратиков самим (самим заполнить матрицу преобразований и умножить ее на исходные координаты) - и скормить их ОпенГЛ безовсяких поворотов/сдвигов.

или вытащить текущую матрицу преобразований (см. один из параметров glGetDouble) и умножить на нее исходные координаты...

хоть что-нибудь ясно?.. без азов линейной алгебры не обойтись здесь



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.026 c
14-1106732490
Andryk
2005-01-26 12:41
2005.02.13
Вопрос а ни кто не помнит такую старую добрую игру


9-1098104871
NightFire
2004-10-18 17:07
2005.02.13
Всем всем программистам игр и не только


1-1106913757
Jay1982
2005-01-28 15:02
2005.02.13
Icon handle 2


1-1107088550
ТехникПТО
2005-01-30 15:35
2005.02.13
Еще один маленький не сложный вопрос


1-1106943533
Фёдор Мегатронов
2005-01-28 23:18
2005.02.13
Формирование комманды в коммандной строке - как ?




   Наверх