Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Анализ поставленной задачи




Проект «Кафедра Онлайн» должен удовлетворять следующим требованиям:

- кроссплатформенность;

- быстродействие;

- минимальные (на сколько это возможно) требования к скорости интернет-соединения;

- простота управления;

- интерактивность;

- возможность свободного исследования пространства;

- информирование пользователя об объектах кафедры.

Проведем подробный анализ требований, предъявляемых к программному комплексу.

Кроссплатформенность подразумевает работу интернет-сервиса «Кафедра Онлайн» на всех операционных системах платформ PC и Macintosh, а так же на мобильных устройствах, которые поддерживают аппаратное ускорение Flash. Кроссплатформенность является одним из основных требований, так как целевая аудитория сервиса это студенты кафедры ЭВМ, а также абитуриенты, которые хотят учиться на кафедре, далеко не все они используют операционную систему семейства Microsoft Windows.

Быстродействие, а именно минимальные аппаратные требования предъявляемые к ПЭВМ могут быть достигнуты при условии создания программного комплекса с помощью использования тех средств, которые при своей работе оказывают минимальную нагрузку на аппаратуру ПЭВМ. Особенно, это требование необходимо учитывать при моделировании 3D-контента кафедры (использовать минимально-необходимое количество полигонов для построения того или иного объекта), также для реализации этого требования необходимо обеспечить динамическую загрузку/выгрузку объектов в зависимости от текущего местоположения в виртуальном 3D-пространстве. Однако, стоит заметить, что реализация данной концепции не должна пагубно отразиться на простоте управления и функциональности системы в целом.

Минимальные требования к скорости интернет-соединения могут быть достигнуты в результате компрессии текстур, а также видео-контента, так как текстуры занимают основную часть проекта, то их оптимизация даст наиболее ощутимый эффект. Так же для реализации данной концепции нужно использовать tiling-наложение текстур (это вид наложения текстур на объект, когда не видно швов, но одна и та же текстура используется для того, чтобы текстурировать весь объект целиком, либо какую-то его часть, текстурирование производится дублированием точно такой же текстуры после окончания предыдущей на координатной сетке текстурных координат).

Простота управление подразумевает в себе интуитивно понятный программный интерфейс, который создается при помощи технологий визуального проектирования (создание графического интерфейса пользователя) и событийного программирования. Правильное восприятие программного интерфейса достигается при обеспечении результатов выполнения стандартных операций общеизвестными способами (с помощью стандартных элементов интерфейса). Также простота управления может быть обеспечена при условии достижения результата выполнения одной операции разными способами с возможностью использования разных средств управления (клавиатура, мышь).



Интерактивность (взаимодействие с объектами) также может быть создана при помощи мощного событийно-управляемого языка ActionScript. Интерактивность подразумевает наличие объектов-событий, щелчок по которым будет означать начало выполнения события. Объектом-событием может быть как многополигональная 3D-модель, так и плоскость и видеорядом.

Возможность свободного исследования пространства является тем требованием из-за которого было принято решение моделировать кафедру в 3D-пространстве, само наличие 3D-пространства уже дает полную свободу при перемещении, чего невозможно добиться при использовании панорам из фотографий.

Информирование пользователя об объектах кафедры -главный критерий с точки зрения информативности всего сервиса в целом, может быть реализован при помощи технологий событийного программирования.

Анализируя вышеизложенную информацию получаем следующие выводы:

1) Сервис «Кафедра Онлайн» является средством получения информации любого характера, касательно кафедры ЭВМ, которая может понадобиться студентам при обучении, либо абитуриентам при выборе места своей учебы.

2) Человек, использующий сервис «Кафедра Онлайн» не должен обладать какими-либо специализированными навыками, либо проходить какое-либо обучение для возможности получения информации посредством данного сервиса.



3) Сервис «Кафедра Онлайн» будет работать на всех платформах и операционных системах, которые поддерживают технологию Adobe Flash.

4) Вся текстовая и мультимедийная информация сервиса «Кафедра Онлайн» может быть легко обновлена на более актуальную на соответствующий период времени.

 

 

5.1.2 Выбор формата для импорта 3D-сцены

Немаловажным критерием для реализации требования минимальной скорости интернет-соединения является выбор формата для экспорта из 3D-редактора с последующим импортированием всей сцены в движок Alternativa Platform. Данная платформа поддерживает несколько форматов для импорта 3D-объектов, это 3ds, obj и collada.

3ds простой формат данных, который содержит только 3D геометрию, а именно, позицию каждой вершины, связь координат текстуры с вершиной, нормаль для каждой вершины, анимацию, а также параметры, которые создают полигоны.

Obj трехмерный формат изображения, содержащий данные полигональной сетки, атрибуты материалов и текстур, ссылки битового массива, данные группы сглаживания, viewport конфигурации, информацию камерах и освещении, данные анимации объекта.

Collada самый прогрессивный 3D-формат из тех, что поддерживает движок Alternativa Platform. Формат использует открытый стандарт XML, помимо тех возможностей, которые предоставляет формат obj, collada с помощью функции Baking animation позволяет сохранить анимацию непосредственно в формате и использовать ее в проекте. Также поддерживаются спрайты (полигоны, которые всегда направлены нормалью к камере) которые можно создать в пакете 3ds Max предварительно установив плагин от Alternativa Platform.

Анализируя всю вышеизложенную информацию выбор остановился на формате *.3ds, так как, во-первых, его функционала хватает для реализации проекта, а во-вторых, размер конечного файла при прочих равных условиях у формата 3ds будет значительно меньше, чем у форматов, что входит в концепцию требования о минимальной скорости интернет-соединения.

Файл 3ds состоит из блоков (chunks), каждый из которых содержит данные и, возможно, подблоки. Большинство блоков содержит либо данные, либо подблоки, хотя есть и смешанные блоки. Общий формат каждого блока представлен в таблице 5.1.

Таблица 5.1 – Общий формат блока

Смещение Длина Данные
Идентификатор типа блока, chunk_id
Длина блока, chunk_len
chunk_len Данные или подблоки (в зависимости от chunk_id)

В таблице 5.2 идентификаторы для загрузки из 3ds-файла.

Таблица 5.2 – Список идентификаторов

Идентификатор Наличие данных Описание
CHUNK_MAIN Сцена
CHUNK_OBJMESH Наличие объектов
CHUNK_OBJBLOCK Объект
CHUNK_TRIMESH trimesh-объект
CHUNK_VERTLIST Список вершин
CHUNK_FACELIST Список граней
CHUNK_FACEMAT Материалы граней
CHUNK_MAPLIST Текстурные координаты
CHUNK_TRMATRIX Матрица перевода
CHUNK_CAMERA Объект-камера
CHUNK_MATERIAL Материал
CHUNK_MATNAME Название материала
CHUNK_TEXTURE Текстура
CHUNK_MAPFILE Имя файла
HUNK_KEYFRAMER Информация об анимации
CHUNK_TRACKINFO Поведение объекта
CHUNK_TRACKOBJNAME Название объекта

 

 

Продолжение таблицы 5.2

Идентификатор Наличие данных Описание
CHUNK_TRACKPIVOT Центр вращения объекта
CHUNK_TRACKPOS Траектория объекта
CHUNK_TRACKROTATE Траектория вращения
CHUNK_TRACKCAMERA Поведение камеры
CHUNK_TRACKFOV Поведение FOV камеры
CHUNK_TRACKROLL Поведение roll камеры
CHUNK_TRACKCAMTGT Поведение "цели" камеры

Конкретные данные содержат лишь блоки, отмеченные единицей, остальные блоки состоят лишь из подблоков и их необходимо различать лишь потому, что нужные блоки данных – подблоки этих остальных. Например, CHUNK_OBJMESH необходимо знать из-за того, что каждый объект в сцене описывается блоком CHUNK_OBJBLOCK, который появляется только как подблок CHUNK_OBJMESH, и просто игнорировать весь CHUNK_OBJMESH из-за этого нельзя. Кроме того, они задают структуру – например, все данные, что относятся к текущему блоку CHUNK_OBJBLOCK, относятся к текущему объекту, а подблоки этого блока уже могут быть разбросаны как угодно.

Конкретные данные содержат лишь блоки, отмеченные плюсом, остальные блоки состоят лишь из подблоков и их нам надо различать лишь потому, что нужные нам блоки данных – подблоки этих остальных. То есть, скажем, CHUNK_OBJMESH нам надо знать из-за того, что каждый объект в сцене описывается блоком CHUNK_OBJBLOCK, который появляется только как подблок CHUNK_OBJMESH, и просто игнорировать весь CHUNK_OBJMESH из-за этого нельзя. Кроме того, они задают структуру – например, все данные, что относятся к текущему блоку CHUNK_OBJBLOCK, относятся к текущему объекту, а подблоки этого блока уже могут быть разбросаны как угодно.

Дальше следует описание типов данных которые содержатся в каждом из блоков. Будут использоваться следующие обозначения:

- char[] – ASCIIZ-строка (ASCII-строка, оканчивающаяся нулем);

- byte – 8-битное беззнаковое целое число;

- word – 16-битное беззнаковое целое число;

- dword – 32-битное целое число;

- float – 32-битное число с плавающей запятой;

- vector – float x,z,y.

Примеры кода будут представлены в листингах с 5.1 до 5.13.

В файле 3DS везде изменен порядок следования y и z. то есть в файле данных ось y смотрит вглубь экрана, а ось z – вверх.

Блок: CHUNK_VERTLIST.

Данные: список вершин текущего объекта.

Листинг 5.1 – Блок CHUNK_VERTLIST

word num. // число вершин

vector vertices[num]. // координаты каждой из вершин

Блок: CHUNK_FACELIST.

Данные: список граней текущего объекта.

Листинг 5.2 – Блок CHUNK_FACELIST

word num. // число граней

struct { //

word v0. // номер первой вершины грани

word v1. // номер второй вершины грани

word v2. // номер третьей вершины грани

word flags. // флаги грани

} faces[num]. // собственно список граней

Блок: CHUNK_FACEMAT.

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

Листинг 5.3 – Блок CHUNK_FACEMAT

char name[]. // название материала

word num. // число граней из этого материала

word face_nums[num]. // список номеров граней из этого материала

Блок: CHUNK_MAPLIST.

Данные: текстурные координаты вершин текущего объекта.

Листинг 5.4 – Блок CHUNK_MAPLIST

word num. // число вершин

struct { //

float u. // координата текстуры U

// (по горизонтали)

float v. // координата текстуры V

// (по вертикали)

} texcoords[num]. // собственно список текстурных координат

Текстурные координаты задаются в диапазоне 0..1. Точка с U=0, V=0 – левый верхний край текстуры. U=1, V=1 – правый нижний. U=0.5, V=0.5 – центр.

Блок: CHUNK_TRMATRIX

Данные: содержит матрицу перевода объекта в некое абстрактное начальное состояние. в то, что было смоделировано первоначально. Требуется для корректного отображения анимации: все объекты в файле хранятся по состоянию на нулевой кадр, а анимация записана по отношению к «начальным» моделям. Т.е. при отображений нулевого кадра в этой матрице нет необходимости, а при отображении всего набора кадров надо будет сначала перевести объекты в «начальное» состояние с помощью этой самой матрицы перевода и применять все преобразования (перемещения, повороты, и т.д.) именно к «начальным» объектам.

Листинг 5.5 – Блок CHUNK_TRMATRIX

float rotmatrix[3][3]. // матрица поворота

vector offset. // смещение начального объекта

Матрица записана построчно. В ней y и z уже поменяны местами.

Блок: CHUNK_MATNAME.

Данные: название материала.

Листинг 5.6 – Блок CHUNK_MATNAME

char[] name. // название материала

Блок: CHUNK_MAPFILE.

Данные: имя файла с текстурой.

 

Листинг 5.7 – Блок CHUNK_MAPFILE

char[] filename. // имя файла с текстурой

Блок: CHUNK_TRACKOBJNAME.

Данные: название объекта, информация о поведении которого задается в текущем блоке CHUNK_TRACKINFO.

Листинг 5.8 – Блок CHUNK_TRACKOBJNAME

char[] name. // название объекта

word flags[2]. // флаги

word parent. // номер объекта-родителя

Поле parent используется для построения иерархической структуры. дерева объектов. Каждому объекту присваивается его порядковый номер при следовании в файле, поле parent выставляется в -1, если у данного объекта нет родителя. Ниже, в таблице 5.3 представлен пример.

Таблица 5.3 – Пример зависимости объектов

Объект Номер Parent
A -1
B
C
D
E
F
G
H
I
J
K
L
M
N
O

 

Продолжение таблицы 5.3

Объект Номер Parent
P

Дерево используется следующим образом: если к какому-то узлу дерева применяется преобразование, то оно же автоматически применяется и ко всем узлам, находящимся ниже в иерархии относительно этого узла.

Блок: CHUNK_TRACKPIVOT.

Данные: координаты центра вращения объекта.

Листинг 5.9 – Блок CHUNK_TRACKPIVOT

vector pivotpoint. // координаты центра вращения

Центр вращения – это точка «начального» объекта, через которую будет проведена ось вращения, задающаяся в блоке CHUNK_TRACKROTATE.

Блок: CHUNK_TRACKPOS.

Данные: траектория объекта, заданная ключевыми значениями положения объекта.

Листинг 5.10 – Блок CHUNK_TRACKPOS

word flags. // флаги

byte unknown[8]. // <неизвестно>

dword num. // число ключевых значений

struct { //

dword frame. // кадр данного ключевого значения

word splineflags. // флаги сплайна

float[] splineinfo. // параметры сплайна (кол-во и тип

// зависит от значения splineflags)

vector pos. // положение объекта

} keys[num]. // собственно ключевые значения

Блок: CHUNK_TRACKROTATE.

Данные: траектория вращения объекта, заданная ключевыми значениями вектора направления оси вращения и угла поворота относительно этой оси.

 

 

Листинг 5.11 – Блок CHUNK_TRACKROTATE

word flags. // флаги

byte unknown[8]. // <неизвестно>

dword num. // число ключевых значений

struct { //

dword frame. // кадр данного ключевого значения

word splineflags. // флаги сплайна

float[] splineinfo. // параметры сплайна (кол-во и тип

// зависят от значения splineflags)

float angle. // угол поворота (в радианах)

vector rotaxis. // ось вращения

} keys[num]. // собственно ключевые значения

Самое первое ключевое значение задает абсолютный поворот. Все последующие задают «добавочный» поворот, который надо добавить ко всем, уже сделанным.

Блок: CHUNK_TRACKCAMERA.

Данные: траектория камеры, заданная ключевыми значениями положения, угла зрения, ориентации камеры.

Листинг: состоит из подблоков CHUNK_TRACKOBJNAME, CHUNK_TRACKPOS, CHUNK_TRACKFOV, CHUNK_TRACKROLL и некоторых других, которые можно игнорировать.

Блок: CHUNK_TRACKFOV.

Данные: поведение FOV (угла зрения) камеры, заданное ключевыми значениями.

Листинг 5.12 – Блок CHUNK_TRACKFOV

word flags. // флаги

byte unknown[8]. // <неизвестно>

dword num. // число ключевых значений

struct { //

dword frame. // кадр данного ключевого значения

word splineflags. // флаги сплайна

float[] splineinfo. // параметры сплайна (кол-во и тип

// зависят от значения splineflags)

float FOV. // значение FOV

} keys[num]. // собственно ключевые значения

Блок: CHUNK_TRACKROLL.

Данные: поведение roll (угла наклона) камеры, заданное ключевыми значениями.

Листинг 5.13 – Блок CHUNK_TRACKROLL

word flags. // флаги

byte unknown[8]. // <неизвестно>

dword num. // число ключевых значений

struct { //

dword frame. // кадр данного ключевого значения

word splineflags. // флаги сплайна

float[] splineinfo. // параметры сплайна (кол-во и тип

// зависят от значения splineflags)

float roll. // значение roll

} keys[num]. // собственно ключевые значения

Блок: CHUNK_TRACKCAMTGT.

Данные: траектория «цели» камеры (точки, куда направлена камера), заданная ключевыми значениями положения.

Блок состоит из подблоков CHUNK_TRACKOBJNAME, CHUNK_TRACKPOS и некоторых других, которые также можно игнорировать.


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.024 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал