Главная страница
    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.48 MB
Время: 0.053 c
1-1105534232
nicesc
2005-01-12 15:50
2005.01.23
Динамический массив и чтение из файла...


14-1104860833
quickblack
2005-01-04 20:47
2005.01.23
начало новой эры


14-1104324056
Vulko
2004-12-29 15:40
2005.01.23
Задача по матану. Спасите! Док-ть сходимость последовательности


1-1105562080
chir
2005-01-12 23:34
2005.01.23
ToolButton6.DropdownMenu.Popup(0,0); - как получить координаты?


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