Вот код из сообщения в блоге:
Код: Выделить всё
// objects_store.h
struct ObjectsStore
{
vector m_Positions;
vector m_Orientations;
};
// Runtime solution:
struct TranslationData
{
Vector3D m_ObjPosition;
const Quaternion m_ObjOrientation;
const Vector3D m_ObjTranslation;
};
void PrepareTranslations(const ObjectsStore& inStore,
const vector& inTranslations,
vector& outObjectsToTranslate)
{
assert(inStore.m_Positions.size() == inStore.m_Orientations.size());
assert(inStore.m_Positions.size() == inTranslations.size());
for (size_t i = 0; i < inTranslations.size(); ++i)
{
outObjectsToTranslate.push_back
({
inStore.m_Positions[i];
inStore.m_Orientations[i];
inTranslations[i];
});
}
}
void TranslateObject(vector& ioObjectsToTranslate)
{
for (TranslationData& data: ioObjectsToTranslate)
data.m_ObjPosition += data.m_ObjOrientation * data.m_ObjTranslation;
}
void ApplyTranslation(const vector& inTranslationData
ObjectsStore& outStore)
{
assert(inStore.m_Positions.size() == inTranslationData.size());
for (size_t i = 0; i < inTranslationData.size(); ++i)
outStore.m_Positions[i] = inTranslationData[i].m_ObjPosition;
}
void UpdateGame(ObjectsStore& ioStore, vector& inTranslations)
{
vector translation_data;
PrepareTranslations(ioStore, inTranslations, translation_data);
TranslateObject(translation_data);
ApplyTranslation(translation_data, ioStore);
}
Насколько я понимаю Поймите это, очевидно, что вычисления тогда очень эффективны для подготовленных данных, но с дополнительные затраты на их подготовку.
Может ли кто-нибудь сказать мне, чего мне здесь не хватает? Требуются ли дополнительные затраты для получения других преимуществ (например, более четкого кода и т. д.) или это на самом деле более эффективно, чем прямая модификация?
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... direct-acc