Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: 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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.055 c
14-1106396222
AlterEgo of WondeRu
2005-01-22 15:17
2005.02.13
MapInfo&Delphi. кто "соединял" их???


14-1104137933
Чеширский_Кот
2004-12-27 11:58
2005.02.13
Кто хочет сыграть против меня в шахматы?


9-1099835093
Колбасьев
2004-11-07 16:44
2005.02.13
3DS и другие форматы


4-1103660674
Shamansky
2004-12-21 23:24
2005.02.13
кодирование информации


1-1106987309
magical_g
2005-01-29 11:28
2005.02.13
Как можно записать в нетипезированый файл массив строк.