Я смотрю на код Ogre3D и код WildMagic и обнаружил, что оба имеют дело с базовыми классами немного по-разному.Так как я создаю свое собственное ядро, мне было интересно, что будет лучше, а потенциально лучше с точки зрения ресурсов.
В WildMagic есть класс Matrix, который наследуется от класса Table (не полиморфный),Класс таблицы может иметь N строк и N столбцов и получает методы получения и установки столбцов и строк.Класс Matrix имеет функциональность, которая имеет смысл только для Matrix, и он удобно наследуется от Table.В этом случае вектор также может наследоваться от Table (хотя WildMagic этого не делает).WildMagic также имеет объект Transform, который хранит локальные и производные преобразования для Node.Таким образом, узел будет иметь два объекта Transform, которые содержат необходимые преобразования (которые включают в себя положение, вращение, масштаб).
В Ogre3D, с другой стороны, класс Matrix не является производным от чего-либо, а узел Ogre3D имеет переменные длясохранить локальные и производные позиции: Vector localPos; Vector derPos; Matrix localRot; Matrix derRot; etc.
Теперь имейте в виду, что это основные объекты, которые будут использоваться / обновляться / изменяться тысячи раз за кадр, и их довольно сложно изменить, если вы понимаете, что имеетеузкое место производительности в будущем, когда у вас есть полная игра, основанная на этих основных классах.
Итак, теперь возникают вопросы:
- Есть ли стоимость, связанная с классом Matrix, унаследованным отКласс таблицы против класса Matrix, делающего все в первую очередь
- Существует ли стоимость, связанная с наличием 3 экземпляров объекта Transform в классе Node, по сравнению с представлением базовых типов данных через переменные-члены (я понимаю, что в обоих случаях, это композиция, просто в одном случае есть
wrapper
fили преобразования, в то время как в другом случае преобразования подвергаются непосредственно.Я предполагаю, что вопрос можно перефразировать следующим образом: Does a wrapper have a cost (considering it is an object that needs to be created and destroyed)?
- Давайте предположим, что я пишу приложение, в котором учитываются все вычисления (даже простое сложение вектора).Вы бы изменили свой выбор?