Конгер Д.
Физика для разработчиков компьютерных игр
стр. 154

Каждый раз, создавая объект класса d3d_mesh (и, соответственно, объект класса roesh_data), игра должна инициализировать данные в объекте mesh_data значениями 0 или NULL. Эту инициализацию выполняет конструктор класса roesh_data. Кроме того, конструктор присваивает элементу referenceCount значение 1, поскольку, если объект класса mesh_data создается, то к нему обращается как минимум один объект d3d_mesh.

Единственная функция, которая должна будет записывать данные в модель в этой программе, — это метод d3d_mesh: :Load(). В этой реализации данные в модели не изменяются в ходе работы программы. Это утверждение может не соответствовать истине в некоторых играх. Например, можно загрузить плоскую модель участка местности с данными

о текстурах и материалах, а затем создать на этом участке холмы и впадины, изменяя координаты у отдельных вертексов. В этом случае программа должна предоставлять доступ к отдельным вертексам. В нашем примере такая возможность не нужна, и мы ее не предоставляем.

При удалении объекта класса mesh_data вызывается деструктор, приведенный в строках 11-35 листинга 6.5. Деструктор выполняет операции, рассмотренные ранее в разделе «Очистка сетчатой модели». Сначала он удаляет массив материалов. Вспомните, что это массив структур, которые можно просто освободить. С другой стороны, текстуры хранятся в массиве указателей на COM-объекты. Поэтому деструктору приходится просматривать весь массив и вызывать функцию COM Release () для каждого элемента этого массива. Это делает цикл, приведенный в строках 20-26 листинга 6.5. После освобождения всех структур деструктор удаляет их массив в строке 27. И, наконец, деструктор освобождает саму сетчатую модель.

Подсчет ссылок выполняют основной конструктор, конструктор копирования, деструктор и оператор присваивания в классе d3d_mesh. Их код приведен в листинге 6.6.








Новости
Владельцы Dark Souls в Steam получат скидку на Dark Souls Remastered
В то время, как подавляющее большинство компаний хлебом не корми - дай только в очередной раз содрать полную сумму за какое-нибудь переиздание, эти благородные японцы объявили о том, что все владельцы оригинальной Dark Souls (Prepare to Die Edition в Steam) получат… нет, не Dark Souls Remastered бесплатно, а скидку на неё.
Tencent вложит $ 15 млн в продвижение Fortnite в Китае
Китайская корпорация Tencent займётся продвижением Fortnite в Китае.