Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятки с позиционированием в OpenGL ES 
:(
    Опции темы
Kabu
Дата 5.9.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.9.2009

Репутация: нет
Всего: нет



Перерыл весь инет, а решения проблемы так и не нашел. Если кто знает в чем проблема, просветите.
В общем проблема следующая: взял отсюда реализацию gluLookAt() для OpenGL ES и решил проверить чего она может
Логика программы следующая:
1. Инициализирую OpenGL ES
2. Определяю матрицу проекции, затем делаю текущей матрицу модели:
Код

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(90,1,1,100);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

3. Далее код прорисовки кадра выглядит следующим образом (рисую простой треугольник и над ним позиционирую камеру, перед прорисовкой каждого кадра изменяю угол поворота камеры, направляя взгляд вдоль оси Y).
Код

void Render()
{
  static int Order = 1; 
  static float rotation = -5;
                                      /* Vertex 1    Vertex 2    Vertex 3*/                           
  GLshort vertexArray[9] =  {-25,-25,0,   25,-25,0,     0,25,0 };
  GLubyte colorArray[12] = {200,0,0,0,   0,200,0,0,    0,0,200,0};
  
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
  glLoadIdentity();  
 
  //Определяю угол поворота
  rotation+=(5*Order);
  // Если угол поворота больше 80, то со следующего врейма буду его уменьшать.
  if (abs(rotation)>80) Order*=-1;
//
GLfloat StartY = 0;
GLfloat StartZ = 20;
 // Позиционирую камеру
  gluLookAt( 0,StartY ,StartZ ,    
                  0,StartY +StartZ *(GLfloat)sin(rotation*3.14f/180),StartZ -StartZ *(GLfloat)cos(rotation*3.14f/180),
                  0,1,0);
 
  glEnableClientState(GL_VERTEX_ARRAY);
  glVertexPointer(3, GL_SHORT, 0, vertexArray);
 
  glEnableClientState(GL_COLOR_ARRAY);
  glColorPointer(4,GL_UNSIGNED_BYTE, 0, colorArray);
 
  glDrawArrays(GL_TRIANGLES, 0, 3);
  glDisableClientState(GL_VERTEX_ARRAY);
  glDisableClientState(GL_COLOR_ARRAY);
        
  eglSwapBuffers(glesDisplay, glesSurface);
}

Если угол поворота достигает примерно 40 градусов при StartY=0, StartZ = 20, то изображение как-бы переворачивается. Попробовал поизменять StartY и StartZ и оказалось, что когда вне области видимости камеры(т.е. под камерой) лежит чуть меньше половины треугольника, то происходит зеркальное отображение картинки.
Допустим если StartY=-20, а StartZ=20, то глюк происходит если поворот осуществлен примерно на 80 градусов.
На картинках First - это когда StartY = -20, а Second - когда StartY = 0.
Библиотека GLES Vincent
Пишу на eMbedded Visual C++4.0. Точно такая же проблема возникала, когда писал на C#, собсно после этого и решил попробовать на сях. Эта проблема остается, если не использовать функцию gluLookAt, а позиционировать объект поворотами и перемещением. Если поворачивать вектор UP и держать его всегда перпендикулярно оси взгляда, то это тоже не помогает, я его даже держал вдоль оси Z - без толку. На реальных девайсах под управлением WinCE, WindowsMobile 5.0 и WindowsMobile 6.0 проблема остается.
Скорее всего я чегото недопонимаю, помогите кто чем может.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Img.rar 92,62 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.