Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > skyman000

Оценить эту запись

Molehill 3D API вводный курс статей. часть 3. Работа с матрицами.

Запись от skyman000 размещена 28.05.2011 в 17:57
Обновил(-а) skyman000 28.05.2011 в 20:26

Содержание:

Molehill 3D API вводный курс статей. часть 1. Что такое Molehill?
Molehill 3D API вводный курс статей. часть 2. Усложнение задач.
Molehill 3D API вводный курс статей. часть 3. Работа с матрицами.
Molehill 3D API вводный курс статей. часть 4. Первый 3D объект с простой текстурой.

Работа с матрицами

Итак как вы помните в шейдере вершин мы умножаем все точки буфера вершин на матрицу преобразований
Код AS3:
"m44 op, va0, vc0    \n"
Где vc0 собственно наша матрица

В цикле рендера мы постоянно ее определяем
Код AS3:
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, model);
однако стоит отметить что с такой матрицей мы не сможем толком отобразить ни один объект
так как у нас даже нет перспективы

для того чтоб мы могли управлять камерой
могли управлять обьектами на сцене
имели какую то перспективу

нам необходимо составить матрицу перспективы
умножить ее на матрицу модели
и умножить на матрицу камеры

итак первое
составляем перспективную матрицу

Код AS3:
projection.identity();
projection.perspectiveFieldOfViewRH(45.0, stage.stageWidth / stage.stageHeight, 1.0, 100.0);
где 45 – угол зрения

и добавляем определение этой матрицы в главный класс
Код AS3:
private var projection:PerspectiveMatrix3D = new PerspectiveMatrix3D();
а так же определения матрицы камеры
Код AS3:
private var view:Matrix3D = new Matrix3D();
нам еще желательно тут же определить матрицу в которой мы будем собирать остальные три
Код AS3:
private var modelViewProjection:Matrix3D = new Matrix3D();
теперь в цикле рендера можно собрать все три матрицы в одну

Код AS3:
modelViewProjection.append(model);
modelViewProjection.append(view);
modelViewProjection.append(projection);
и записать ее в vc0

Код AS3:
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, modelViewProjection);
теперь можно спокойно рассматривать объекты с разных сторон.

По традиции вот код примера
(Тыкнув на треугольник, вы сможете покрутить камеру стрелками клавиатуры.)
Вложения
Тип файла: rar MoleHill3.rar (2.8 Кб, 232 просмотров)
Всего комментариев 1

Комментарии

Старый 06.11.2011 02:08 deamoK вне форума
deamoK
 
Аватар для deamoK
Почему не используется нативный класс PerspectiveProjection?
Пытался с ним пробовать, но экране вылезает абсурд, приходится пользоваться левой функцией из различных примеров...
Просто я хочу понять, почему для той же цели (создание матрицы проекции) не годится старый класс (persproj)
 

 


Часовой пояс GMT +4, время: 06:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.