Archive for » August, 2008 «

Saturday, August 30th, 2008 | Author: admin

Этаглава посвящена одной из основных тем классической физики: движению материальных точек. Это обширная тема, и ее знание позволяет реализовать некоторые весьма впечатляющие эффекты, но это знание даст нам еще и возможность перейти к работе с твердыми и деформируемыми телами. Кроме того, в этой тлавФ вы познакомитесь с несколькими силами, моделирование которых нам понадобится и даст возможность сильно увеличить реалистичность игр. Кроме того, в этой главе изложены начала математического анализа. Вперед!
Материальные точки more…

Tags: Динамика, ОБНОВЛЕНИЕ, производная

Related posts

Monday, August 25th, 2008 | Author: admin

Опытные программисты, хорошо знающие язык С++, заметят, что можно и не объявлять элементы данных класса mesh_data как public. Их можно объявить как private и создать встраиваемые (inline) public-методы доступа к ним. Использование этих методов позволит избежать снижения скорости при доступе к данным. Это правда. Компилятор С++ подставляет код встраиваемых методов в места их вызова, примерно так же, как препроцессор - макрокоманды в программах на С.
Если вы реализуете класс с подсчетом ссылок более сложный, чем класс mesh_data, я настоятельно рекомендую создать public-методы доступа к его элементам данных, а сами элементы данных объявить как private. Хотя код станет несколько более объемным, он будет надежнее, а использование встраиваемых методов не приведет к снижению more…

Tags: Динамика, Предупреждение, производная

Related posts

Wednesday, August 20th, 2008 | Author: admin

Как уже упоминалось, в игре одна и та же модель может использоваться для создания нескольких экземпляров объектов. Чтобы позволить такое использование класса d3d_mesh, в нем реализован подсчет ссылок.Чтобы не хранить данные модели в классе d3d_mesh, данные хранят во вспомогательном классе mesh_data. В классе d3d_mesh есть динамически выделяемый объект класса mesh_data. На один и тот же объект mesh_data может ссылаться несколько объектов d3d_mesh, и объект mesh_data отслеживает все объекты d3d_mesh, указывающие на него, как показано на рисунке 6.3.
На рисунке 6.3 показаны три объекта d3d_mesh, в которых есть указатели, изображенные в виде стрелок. Все три объекта обращаются к одним и тем же данным, и их указатели указывают на один и тот же объект mesh_data. В объекте mesh_data есть элемент referenceCount, в котором хранится количество объектов d3d mesh, ссылающихся на этот объект.Чтобы понять, как выполняется подсчет ссылок, для начала еще раз посмотрим на определение класса d3d_mesh. Для удобства оно повторено ниже в листинге 6.4. more…

Tags: D3d, Динамика, Предупреждение

Related posts

Wednesday, August 20th, 2008 | Author: admin

Метод d3d_mesh: :Load() может загрузить не любую сетчатую модель Di-rect3D, которая может храниться в Х-файле. Он загружает только простые сетчатые модели, которые мы будем использовать в оставшейся части книги. За дополнительной информацией об Х-файлах и загрузке моделей обратитесь к литературе. Я рекомендую книгу Wolfgang F. Engle «Beginning Direct3D Game Programming* (издательство Premier Press). Это одна из немногих книг, в которой подробно разбираются Х-файлы и их применение.
Рендеринг сетчатой модели в классе d3d_mesh
Рендеринг модели значительно проще, чем ее загрузка. Как уже говорилось ранее, модели состоят из частей. Поэтому, чтобы выполнить рендеринг модели, программа должна перебрать все части модели и для каждой части выполнить следующие шаги:
1. Выбрать для части материал. more…

Tags: D3d, Load, Предупреждение

Related posts

Friday, August 15th, 2008 | Author: admin

Большая часть древних мыслителей Запада считала, что движущиеся объекты постепенно останавливаются. Это утверждение, на первый взгляд, подтверждается практикой. Если вы хоть раз передвигали мебель, вы готовы будете поклясться, что движение в данный момент времени не гарантирует движения в последующие моменты. Однако у древних мыслителей были сомнения в правильности этой теории. Они видели несоответствие теории и практики и пытались выяснить причины этих несоответствий.
Галилей предложил хорошую альтернативу этой теории, назвав ее принципом инерции. Его теория утверждает, что объект, движущийся по прямой линии с постоянной скоростью, будет продолжать двигаться вечно, если на него не действуют другие объекты. Создание такой теории потребовало хорошего воображения - почти все предметы вокруг нас постепенно останавливаются, если их постоянно не подталкивать. Однако Галилей понял, что это постепенное замедление движения вызвано трением между объектами, а не свойственно самим объектам. more…

Tags: D3d, Динамика, Силы

Related posts

Friday, August 15th, 2008 | Author: admin

Первое, на что стоит обратить внимание в методе Load(), - данные сохраняются в объекте класса mesh_data. Как я уже говорил, это делается для подсчета ссылок, который мы рассмотрим немного позже.
У метода Load () есть единственный параметр — имя Х-файла, из которого загружается модель. Объявив некоторые нужные ему переменные, метод Load() вызывает функцию D3DXLoadMeshFromX(), чтобы загрузить Х-файл (строки 7-15 листинга 6.2). Если файл успешно загружен, метод получает указатель на буфер материалов в строках 21-23.
Далее метод Load() выделяет массив структур материалов в строках 30-31. Если выделение массива проходит успешно, метод перебирает все материалы в списке в строках 58-91. В теле цикла метод копирует данные о материалах из буфера в массив материалов в текущем объекте. При этом цвет в рассеянном свете задается равным цвету в свете more…

Tags: D3d, D3DXLoadMeshFromX, Силы

Related posts

Sunday, August 10th, 2008 | Author: admin

Обратите внимание, что, когда машина начинает тормозить, расстояние, которое она преодолевает за единицу времени, начинает уменьшаться. Когда машина остановилась, не важно, сколько еще пройдет времени — пройденное расстояние увеличиваться не будет.
Попробуем определить скорость машины в какой-то момент времени. Первое приближение такой скорости можно получить, выбрав At, располагающееся в районе точки, для которой мы хотим узнать скорость. Взгляните на рисунок 7.5. С помощью графика мы можем найти расстояние, пройденное в начале и в конце интервала At. Разница между этими расстояниями и есть Ах. Средняя скорость в интервале времени At как раз и будет равна Дх / At.
Как видите, между средней скоростью и скоростью, измеренной в какой-то момент, есть весьма существенное различие - сравните наклон исходной линии и наклон линии, которую мы использовали, чтобы получить приближенную оценку. Наклон линии равен изменению вертикальной координаты, деленному на изменение горизонтальной координаты. У more…

Tags: At, D3DXLoadMeshFromX, Силы

Related posts

Sunday, August 10th, 2008 | Author: admin

Класс d3d mesh
Вся описанная выше функциональность есть в классе d3d_mesh. Этот класс может загружать, отображать и очищать сетчатые модели.
Кроме того, класс d3d_mesh поддерживает возможность, необходимую для большинства игр. Часто в играх отображается множество экземпляров одинаковых объектов. Поиграйте в трехмерную «бродилку». На стенах лабиринта есть факелы? В памяти на самом деле находится только одна модель факела, которую игра использует для отображения всех факелов.
В классе d3d_mesh есть специальные элементы, позволяющие использовать в сцене одну и ту же модель много раз. Мы рассмотрим эти элементы подробно в разделе «Подсчет ссылок в классе d3d_mesh» далее в этой главе.
Определение класса d3d_mesh приведено в листинге 6.1. more…

Tags: At, Силы, факела

Related posts

Tuesday, August 05th, 2008 | Author: admin

Загрузить сетчатую модель довольно просто - это делает функция D3DXLoadMeshFromX (). Эта функция создает буферы для хранения материалов и текстур, которые хранятся в Х-файле. Прежде чем можно будетзагрузить модель, нужно объявить указатели на буфер материалов и интерфейс модели и создать переменную типа DWORD для хранения количества материалов:
LPD3DXMESH theMesh;
LPD3DXBUFFER materialsBuffer = NULL; DWORD numMaterials = 01;
Теперь можно загрузить модель в память:
D3DXLoadMeshFromX( meshFileName, D3DXMESH_MANAGED, d3dDevice, NULL, more…

Tags: At, модели, факела

Related posts