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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL Camera Class, помогите написать =) 
V
    Опции темы
kemiisto
  Дата 3.4.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Всем привет! Я пришёл с очередной тупостью. smile 
В общем накидал на коленках:
camera.h
Код

#ifndef CAMERA_H
#define CAMERA_H

#include "crossgl.h"

class Point3D;

class Camera
{
public:
  Camera();
  GLfloat distance() const;
  GLfloat xRot() const;
  GLfloat yRot() const;
  GLfloat zRot() const;
  GLfloat zoomFactor() const;
  Point3D position() const;
  void setDistance(GLfloat distance);
  void setXRot(GLfloat xRot);
  void setYRot(GLfloat yRot);
  void setZRot(GLfloat zRot);
  void setZoomFactor(GLfloat zoomFactor);
  void setAspectRatio(GLfloat aspectRatio);
  void place();
private:
  GLfloat distance_;
  GLfloat xRot_;
  GLfloat yRot_;
  GLfloat zRot_;
  GLfloat zoomFactor_;
  GLfloat aspectRatio_;
  GLfloat zNear_;
  GLfloat zFar_;
  void normalizeAngle(GLfloat* angle);
};

#endif // CAMERA_H

camera.cpp
Код

#include <cmath>

#include "camera.h"
#include "crossglu.h"
#include "point3d.h"

const GLfloat PI = 4.0f * atanf(1.0f);

Camera::Camera():
    distance_(0.0f), xRot_(0.0f), yRot_(0.0f), zRot_(0.0f), zoomFactor_(1.0f)
{
}

GLfloat Camera::distance() const
{
  return distance_;
}

GLfloat Camera::xRot() const
{
  return xRot_;
}

GLfloat Camera::yRot() const
{
  return yRot_;
}

GLfloat Camera::zRot() const
{
  return zRot_;
}

GLfloat Camera::zoomFactor() const
{
  return zoomFactor_;
}

Point3D Camera::position() const
{
//  собственно тут проблема! как получить текущие координаты камеры???
  return Point3D(x, y, z);
}

void Camera::setDistance(GLfloat distance)
{
  distance_ = distance;
}

void Camera::setXRot(GLfloat xRot)
{
  xRot_ = xRot;
  normalizeAngle(&xRot);
}

void Camera::setYRot(GLfloat yRot)
{
  yRot_ = yRot;
  normalizeAngle(&yRot);
}

void Camera::setZRot(GLfloat zRot)
{
  zRot_ = zRot;
  normalizeAngle(&zRot);
}

void Camera::setZoomFactor(GLfloat zoomFactor)
{
  if (zoomFactor > 3.0f)
    zoomFactor_ = 3.0f;
  else
    if (zoomFactor < 0.3f)
      zoomFactor_ = 0.3f;
    else
      zoomFactor_ = zoomFactor;
}

void Camera::setAspectRatio(GLfloat aspectRatio)
{
  aspectRatio_ = aspectRatio;
}

void Camera::place()
{
  // Start specifying the projection transformation.
  glMatrixMode(GL_PROJECTION);
  // Initialize the current projection matrix.
  // Only the specified projection transformation has an effect.
  glLoadIdentity();
  // Specify a viewing frustum.
  gluPerspective(45.0f / zoomFactor_, aspectRatio_, 1.0, 20.0);
  // Return to modeling/viewing transformation.
  glMatrixMode(GL_MODELVIEW);
  // Reset the current matrix to the "identity"
  glLoadIdentity();
  glTranslated(0.0f, 0.0f, -distance_);
  glRotated(xRot_, 1.0f, 0.0f, 0.0f);
  glRotated(yRot_, 0.0f, 1.0f, 0.0f);
  glRotated(zRot_, 0.0f, 0.0f, 1.0f);
}

void Camera::normalizeAngle(GLfloat* angle)
{
  while (*angle < 0)
    *angle += 360;
  while (*angle > 360)
    *angle -= 360;
}


За код сильно не пинать, я начинающий плюсист. smile Я так понял, я использую углы Эйлера. Точнее Tait–Bryan angles. Меня всё бы устроило, но я никак не могу пересчитать эти углы в трёхмерные координаты камеры. smile 

Может, кто сталкивался?
Или может у кого завалялся классик?

P.S. Не предлагать из NeHe! Я не понимаю, как там это работает. smile  


--------------------
PM MAIL WWW GTalk Jabber   Вверх
NuINu
Дата 9.4.2009, 21:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Зачем же вы ввзязались в эти углы эйлера? любите кватернионы?

вообщем даю пару подсказок это cal3d там есть все.
А так же смотрите Борескова, там так же есть ВСЕ и даже больше. http://www.steps3d.narod.ru/
рекомендую его книгу Графика трехмерной компьюерной инры на основе OPENGL
PM MAIL   Вверх
kemiisto
Дата 10.4.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



NuINu, за ссылки спасибо! smile Может, когда-нибудь... Но, видимо, не в этой жизни. smile 

P.S. Решил не изобретать колесо и заюзать libQGLViewer.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Rickert
Дата 10.4.2009, 07:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Чтоб камеру правильно создать,
Пример её с gametutorials нужно взять.
Про вектор вспомни, а углы - забудь,
Реализуй за день и счастлив будь smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
kemiisto
  Дата 10.4.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Rickertsmile Даже в стихах... Хороший туториал, видел. Я так понимаю, это оно же, только переведённое. Но я уже QGLViewer почти прикрутил... Так что обойдусь малой кровью. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Rickert
Дата 10.4.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



kemiisto, всё верно smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
kemiisto
Дата 10.4.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Забавно, кстати, было поковырять различные примеры. smile Нехилая гимнастика ума! Линейная алгебра, стереометрия, пространственное мышление... smile   


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Rickert
Дата 11.4.2009, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



kemiisto, айда к нам в гейм девелопмент smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
kemiisto
  Дата 11.4.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Rickert @  11.4.2009,  03:02 Найти цитируемый пост)
kemiisto, айда к нам в гейм девелопмент smile 

Уж лучше вы - к нам. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Yamomoto
Дата 8.6.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Rickert,  smile 
kemiisto,  smile 

О великие Силы !!! Огромное спасибо вам добрые человеки,
вы помогли мне найти именно тот клас камеры в котором я нуждался.
 smile 

PM MAIL   Вверх
arilou
Дата 8.6.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Yamomoto, но это не повод заниматься некропостингом  smile  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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