Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Искажение при поворотах камеры, OpenGL 
:(
    Опции темы
Metalex
Дата 6.12.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

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



Здравствуйте. Я создал сцену и "перемещаю" по ней камеру с помощью такого кода:
Код

class SCamera {
public:
    SVector lastposition;
    SVector position;
    SVector rotation;
    GLfloat angle;

    SCamera();
    void Apply();
    void Up();
    void Down();
    void Forward();
    void Backward();

Код

void SCamera::Apply() {
    // поворачивает камеру по оси X (влево и вправо)
    glRotatef(rotation.x, 1.0, 0.0, 0.0);
    // поворачивает камеру по аси Y (вверх и вниз)
    glRotatef(rotation.y, 0.0, 1.0, 0.0);
    // начало координат транслируется в координаты камеры
    glTranslated(-position.x, -position.y, -position.z);
}

void SCamera::Up() {
    rotation.x += 1.0f;
    if (rotation.x > 360.0f) {
        rotation.x -= 360.0f;
    }
}

void SCamera::Down() {
    rotation.x -= 1.0f;
    if (rotation.x < -360.0f) {
        rotation.x += 360.0f;
    }
}

void SCamera::Forward() {
    SVector rotrad;
    rotrad.x = (rotation.x / 180.0f * PI);
    rotrad.y = (rotation.y / 180.0f * PI);
    position.x += GLfloat(sin(rotrad.y));
    position.y -= GLfloat(sin(rotrad.x));
    position.z -= GLfloat(cos(rotrad.y));
}

void SCamera::Backward() {
    SVector rotrad;
    rotrad.x = (rotation.x / 180.0f * PI);
    rotrad.y = (rotation.y / 180.0f * PI);
    position.x -= GLfloat(sin(rotrad.y));
    position.y += GLfloat(sin(rotrad.x));
    position.z += GLfloat(cos(rotrad.y));
}


SVector - класс, который имеет 3 члена - x,y,z.
Но при таких изменениях у меня все расплывается. Например, когда я отклоняюсь вправо, слева у меня начинается какое-то непонятное растягивание. Привожу скрины.
user posted image
user posted image
Из-за чего это происходит? 
Как это можно исправить?
Благодарю за ответы.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
admsasha
Дата 22.3.2012, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Эта проблема была решена ? У меня такая же ситуация.
PM MAIL WWW ICQ Jabber   Вверх
Sajtran
Дата 17.7.2012, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



странный какой-то код, вы сначала поворачиваетесь, а потом отходите - как то наоборот должно быть
а вообще погуглить не мешало бы, куча исходников по управлению камерой и связанной с этим математикой 
http://www.gamedev.ru/code/articles/openglcamera
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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