Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Камера и Frustum Culling, вычисление плоскостей 
:(
    Опции темы
dvamaster
  Дата 7.4.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Программная 3D отрисовка.

Задача: Вычислить плоскости отсечения произвольной камеры.
Цель: Отсечение до проекцирования.

Подскажите как вычислить плоскости (точка + нормаль) отсечения по видимости (Frustum Culling) произвольной камерой заданной двумя векторами, точкой и углом (вектор направления взгляда, вектор направления верха камеры и точки положения, угол обзора).

Для стандарной камеры (находящейся в нулевой точке, направленной по положительной оси Z, верх камеры направлен по положительной оси Y) вычислить не проблема. Угол обзора и точка положения не вызывает проблем...

Как имея характеристики камеры (т.е. вектор направления взгляда, вектор направления верха камеры) повернуть плоскости отсечения?

используемые типы
Код

  TVertex = record
    x, y, z: TFloat;
  end;

  TNormal = record
    x, y, z: TFloat;
  end;

  TPlane = record
    Point: TVertex;
    Normal: TNormal;
  end;


Будет лучше если подскажите как повернуть уже высчитаные плоскости (в будущем пригодится)

Это сообщение отредактировал(а) dvamaster - 7.4.2011, 11:26


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
dvamaster
Дата 7.4.2011, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А может есть исходники функции OpenGL gluLookAt

Добавлено через 10 минут и 11 секунд
нашел вот это кому интересно

http://www.glscene.ru/forum_viewtopic.php?7.49124.10

Код

function LookAtCamera(campos,objpos: TVector):TMatrix;  
 var look, up, left: TVector;  
 begin  
   result:=IdentityHmgMatrix;  
   look:=VectorSubtract(objpos,campos);  
   look[3]:=0;  
   NormalizeVector(look);  
   left:=vectormake(1,0,0,0);  
   up:=VectorCrossProduct(left,look);  
   NormalizeVector(up);  
   left:=VectorCrossProduct(look,up);  
   NormalizeVector(left);  
   campos[3]:=1;  
   result[0]:=left;  
   result[1]:=up;  
   result[2]:=look;  
   result[3]:=campos;  
 end;



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
dvamaster
Дата 7.4.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

function CreateLookAtMatrix(const eye, center, normUp: TVector): TMatrix;  
 var  
   XAxis, YAxis, ZAxis, negEye: TVector;  
   M: TMatrix;  
 begin  
   ZAxis := VectorSubtract(center, eye);  
   NormalizeVector(ZAxis);  
   XAxis := VectorCrossProduct(ZAxis, normUp);  
   NormalizeVector(XAxis);  
   YAxis := VectorCrossProduct(XAxis, ZAxis);  
   M[0] := XAxis;  
   M[1] := YAxis;  
   M[2] := VectorNegate(ZAxis);  
   M[3] := NullHmgPoint;  
   TransposeMatrix(M);  
   negEye := VectorNegate(eye);  
   negEye[3] := 1;  
   negEye := VectorTransform(negEye, M);  
   M[3] := negEye;  
   Result := M;  
 end; 



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


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

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


 




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


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

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