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

Метод Render () из листинга 6.3 выполняет три шага для рендеринга каждой части модели с помощью Direct3D. С помощью цикла, начинающегося в строке 7, перебираются все части модели. При каждом проходе цикла метод Render () вызывает функцию Direct3D LPDIRECT3DDEVICE9: : Set-Material (), чтобы задать материал части, рендеринг которой нужно выполнить.

Далее, чтобы задать текстуру части, метод Render () вызывает функцию Direct3D LPDIRECT3DDEVICE9: :SetTexture(), а чтобы выполнить собственно рендеринг этой части - функцию DrawSubset ().

Оптимизация в методе Render()

Я целенаправленно проигнорировал возможность оптимизировать метод d3d_mesh: : Render (). Оператор if в строках 16-20 стоит поместить в еще один оператор if, проверяющий, равен ли NULL элемент массива allTex-tures [i]. Если да, то не нужно вызывать функцию SetTexture (), поскольку для части не задана текстура. Это ускорит выполнение рендеринга.

Так почему же этого оператора if нет?

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

Я упоминаю об этом, поскольку вы можете попытаться применить этот код в реальной игре. Если вы это сделаете, учтите, что некоторым частям моделей могут быть не назначены никакие текстуры. Если такая возможность существует, добавьте в код этот оператор if. Это позволит повысить производительность.

Подсчет ссылок в классе d3d_mesh

Как уже упоминалось, в игре одна и та же модель может использоваться для создания нескольких экземпляров объектов. Чтобы позволить такое использование класса d3d_mesh, в нем реализован подсчет ссылок.








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