Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
4-1104096081
Davinchi
2004-12-27 00:21
2005.02.13
Тональный набор в голосовом режиме модема


1-1106837943
Денис Шаров
2005-01-27 17:59
2005.02.13
Как поставить "Hook" на CDROM???


1-1107243734
Fostr
2005-02-01 10:42
2005.02.13
TChildForm - изменение размеров


4-1104240921
tradakad
2004-12-28 16:35
2005.02.13
добавление submenu в item popupmenu


6-1101966555
OneFragLeft
2004-12-02 08:49
2005.02.13
Почему не удаётся просмотреть Shared ресурсы на другом компе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский