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

Вниз

Поворот всей сцены в текущей позиции на Delphi   Найти похожие ветки 

 
RRAIN   (2004-10-13 09:19) [0]

Я начинаю осваивать OPENGL. Написал небольшую прогу, которая почти ничего не далает, но... (млин, нельзя добавить текст проги, говорит, что большое сообщение)

Вообщем дело обстоит так:
При при повороте в центре да и в других частях пространства, поворачивается сцена в центре начала запуска программы, но я бы хотел бы чтобы центр поворота была текущяя координата. Так же дело состоит и с шагом, когда в центре коридора повернутся на некоторое кол-во градусов, далее попробовать пройтись вперед, все двигается не прямо, а как бы передвигаясь немного в бок.
Подскажите, что сделать, пожалуйста.


 
DeadMeat ©   (2004-10-13 11:45) [1]

А ты весь текст не приводи, только нужное...
А так, могу предположить, что тебе надо вначале (в смысле перед поворотом) переместить систему координат, а потом уже крутить.
Примерно так:
glTranslatef (.....);
glRotatef (.....);


 
RRAIN   (2004-10-13 12:02) [2]

Я так и делаю:
glTranslatef(0,0.0,dviz);
 glRotatef(povor,0.0,1.0,0.0);
 glBegin(GL_QUADS);
   glColor3f(0.85,0.4,1.0);
   glVertex3f(-5.0, -2.0, 0.0);  // Слева вверху
   glColor3f(0.85,0.4,1.0);
   glVertex3f(1.0, -2.0, 0.0);  // Справа вверху
   glColor3f(0.85,0.4,1.0);
   glVertex3f(1.0, -2.0, -25.0);  // Справа внизу
   glColor3f(0.85,0.4,1.0);
   glVertex3f(-5.0, -2.0, -25.0);  // Слева внизу
 glEnd();
// стенки
//  glTranslatef(1.5,0.0,-6.0);
//  glRotatef(rquad,0.0,1.0,0.0);
 glBegin(GL_QUADS);
   glColor3f(0.85,0.4,0.0);
   glVertex3f(1.0, -2.0, 0.0);  // Слева вверху
   glColor3f(0.85,0.4,0.0);
   glVertex3f(1.0, -2.0, -25.0);  // Справа вверху
   glColor3f(0.85,0.4,0.0);
   glVertex3f(1.0, 2.0, -25.0);  // Справа внизу
   glColor3f(0.85,0.4,0.0);
   glVertex3f(1.0, 2.0, 0.0);  // Слева внизу
 glEnd();
//  glRotatef(rquad,0.0,1.0,0.0);
 glBegin(GL_QUADS);
   glColor3f(0.85,0.4,0.0);
   glVertex3f(-5.0, -2.0, 0.0);  // Слева вверху
   glColor3f(0.85,0.4,0.0);
   glVertex3f(-5.0, -2.0, -25.0);  // Справа вверху
   glColor3f(0.85,0.4,0.0);
   glVertex3f(-5.0, 2.0, -25.0);  // Справа внизу
   glColor3f(0.85,0.4,0.0);
   glVertex3f(-5.0, 2.0, 0.0);  // Слева внизу
 glEnd();

// потолок
//  glRotatef(rquad,0.0,1.0,0.0);
 glBegin(GL_QUADS);
   glColor3f(0.85,0.0,0.0);
   glVertex3f(1.0, 2.0, -25.0);  // Справа внизу
   glColor3f(0.85,0.0,0.0);
   glVertex3f(1.0, 2.0, 0.0);  // Слева внизу
   glColor3f(0.85,0.0,0.0);
   glVertex3f(-5.0, 2.0, 0.0);  // Слева внизу
   glColor3f(0.85,0.0,0.0);
   glVertex3f(-5.0, 2.0, -25.0);  // Справа внизу
 glEnd();

Если я rotate ставлю после translat"а, то двигается нормально, а поворачивается в начальной позиции. Когда наоборот, то поворачивается нормально а двигается только в две стороны, т.е. для начальной координаты (когда только запустишь прогу) вперед и назад. Вообщем если взять отрезок от а до б, то при любом повороте повороте буду все равно двигатся либо к а либо к б, но никак не в сторону от а на определенное кол-во градусов.


 
RRAIN   (2004-10-13 13:02) [3]

И еще один маленький вопросик:
У меня эта прога без формы (в смысле форма создается програмно), реагирование на клавиши есть. Как сделать, чтобы мышку направо повел и с этим движением поворачивалась сцена, причем бесконечно, а не до того как курсор дойдет до края экрана. За ранее спасибо.


 
DeadMeat ©   (2004-10-13 13:08) [4]

Тебе надо два ротэйта. Один по Х другой по Y. Тот, что по Y надо после транслэйта, т.к. он не должен влиять на движение. Тот, что по Х до него, т.к. он влияет на направление движения. Или если тебе надо летать, то оба надо ставить до него... В смысле до транслэйта...


 
RRAIN   (2004-10-13 14:02) [5]

Если сделать так как ты написал, то все равно не получается. Если хочешь я могу тебе исходничек на мэйл скинуть.


 
XProger ©   (2004-10-13 15:48) [6]


function WndProc...
...
 WM_MOUSEMOVE :
  if MMove then
   begin
   Yang := Yang + LOWORD(lParam) - WndWidth div 2;
   Xang := Xang + HIWORD(lParam) - WndHeight div 2;
   MMove := false;
   SetCursorPos(WndWidth div 2, WndHeight div 2);
   end
  else
   MMove := true;
...

procedure DrawScene...
...
glRotatef(Xang, 1, 0, 0);
glRotatef(Yang, 0, 1, 0);
//рендеринг сцены
...


 
П7   (2004-10-13 16:52) [7]

Выложи куда-нибудь или замыль - разберёмся. (:


 
RRAIN   (2004-10-18 06:59) [8]

Если делать так:
function WndProc...
...
WM_MOUSEMOVE :
 if MMove then
  begin
  Yang := Yang + LOWORD(lParam) - WndWidth div 2;
  Xang := Xang + HIWORD(lParam) - WndHeight div 2;
  MMove := false;
  SetCursorPos(WndWidth div 2, WndHeight div 2);
  end
 else
  MMove := true;
...

procedure DrawScene...
...
glRotatef(Xang, 1, 0, 0);
glRotatef(Yang, 0, 1, 0);
//рендеринг сцены
...

то вся сцена зависает (ничего не показывает, просто как бы прозрачное окно). Но хотя реагирует на нажатие клавиши Esc.


 
XProger ©   (2004-10-18 23:13) [9]

Убери другие свои извращения! Этот код не даёт сбоев!
А вобще, посмотри, возвращаешь ли ты результат в WinProc ?


 
RRAIN   (2004-10-19 08:55) [10]

Все, спасибо. Я разобрался. Только немного по-другому. Из примеров с сайта DelphiGFX.



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

Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.051 c
1-1105612514
Walker
2005-01-13 13:35
2005.01.23
Quick Report for Delphi 2005


4-1101853820
XfroSt
2004-12-01 01:30
2005.01.23
Управление службой RRAS (входящие подключения)


6-1099832307
X3M
2004-11-07 15:58
2005.01.23
Послать параметры скрипту на удалённом сервере


11-1087303348
paulgl
2004-06-15 16:42
2005.01.23
Обработка событий компонента


4-1101845771
Донской
2004-11-30 23:16
2005.01.23
Как передать сервису сообщение?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский