Я учусь на C++ и Unreal Engine в Корее.
Я хотел бы попробовать использовать SIMD-версию VectorMatrixMultiply в Unreal Engine 5, но результаты неверны. Мне нужна помощь в правильном использовании.
Реализация VectorMatrixMultiply в Unreal Engine, которую я использую, выглядит следующим образом.
void VectorMatrixMultiply(FMatrix44f* Result, const FMatrix44f* Matrix1, const FMatrix44f* Matrix2)
{
const VectorRegister4Float* A = (const VectorRegister4Float*)Matrix1;
const VectorRegister4Float* B = (const VectorRegister4Float*)Matrix2;
VectorRegister4Float* R = (VectorRegister4Float*)Result;
VectorRegister4Float Temp, R0, R1, R2;
// First row of result (Matrix1[0] * Matrix2).
Temp = VectorMultiply(VectorReplicate(A[0], 0), B[0]);
Temp = VectorMultiplyAdd(VectorReplicate(A[0], 1), B[1], Temp);
Temp = VectorMultiplyAdd(VectorReplicate(A[0], 2), B[2], Temp);
R0 = VectorMultiplyAdd(VectorReplicate(A[0], 3), B[3], Temp);
// Second row of result (Matrix1[1] * Matrix2).
Temp = VectorMultiply(VectorReplicate(A[1], 0), B[0]);
Temp = VectorMultiplyAdd(VectorReplicate(A[1], 1), B[1], Temp);
Temp = VectorMultiplyAdd(VectorReplicate(A[1], 2), B[2], Temp);
R1 = VectorMultiplyAdd(VectorReplicate(A[1], 3), B[3], Temp);
// Third row of result (Matrix1[2] * Matrix2).
Temp = VectorMultiply(VectorReplicate(A[2], 0), B[0]);
Temp = VectorMultiplyAdd(VectorReplicate(A[2], 1), B[1], Temp);
Temp = VectorMultiplyAdd(VectorReplicate(A[2], 2), B[2], Temp);
R2 = VectorMultiplyAdd(VectorReplicate(A[2], 3), B[3], Temp);
// Fourth row of result (Matrix1[3] * Matrix2).
Temp = VectorMultiply(VectorReplicate(A[3], 0), B[0]);`enter code here`
Temp = VectorMultiplyAdd(VectorReplicate(A[3], 1), B[1], Temp);
Temp = VectorMultiplyAdd(VectorReplicate(A[3], 2), B[2], Temp);
Temp = VectorMultiplyAdd(VectorReplicate(A[3], 3), B[3], Temp);
// Store result. Must not be done during steps above in case source and destination are the same.
R[0] = R0;
R[1] = R1;
R[2] = R2;
R[3] = Temp;
}
Во-первых, кажется, что результат неправильный, использую ли я вторую матрицу как есть или транспонирую ее. Я подскажу, что B[] представляет собой векторы-строки второй матрицы, но я не уверен, правильно ли это.
Как мне использовать две матрицы, чтобы получить правильный результат умножения?
Я учусь на C++ и Unreal Engine в Корее. Я хотел бы попробовать использовать SIMD-версию VectorMatrixMultiply в Unreal Engine 5, но результаты неверны. Мне нужна помощь в правильном использовании. Реализация VectorMatrixMultiply в Unreal Engine, которую я использую, выглядит следующим образом. [code]void VectorMatrixMultiply(FMatrix44f* Result, const FMatrix44f* Matrix1, const FMatrix44f* Matrix2) { const VectorRegister4Float* A = (const VectorRegister4Float*)Matrix1; const VectorRegister4Float* B = (const VectorRegister4Float*)Matrix2; VectorRegister4Float* R = (VectorRegister4Float*)Result; VectorRegister4Float Temp, R0, R1, R2;
// Store result. Must not be done during steps above in case source and destination are the same. R[0] = R0; R[1] = R1; R[2] = R2; R[3] = Temp; } [/code] Во-первых, кажется, что результат неправильный, использую ли я вторую матрицу как есть или транспонирую ее. Я подскажу, что B[] представляет собой векторы-строки второй матрицы, но я не уверен, правильно ли это. Как мне использовать две матрицы, чтобы получить правильный результат умножения?
На данный момент функции, предоставленные std :: datapar :: simd и std :: experimental :: simd несколько ограничены, особенно когда речь идет о перетасовке элементов или нетривиальной нагрузки. Допустим, у меня есть следующее:
std::array a = {
0,...
У меня есть интерфейс CPP с несколькими виртуальными функциями, которые я могу найти в своем проекте Blueprint благодаря «UINTERFACE(BlueprintType)»:
UINTERFACE(BlueprintType)
class UFLoop_ConditionalBloc : public UFBloc {
GENERATED_BODY()
public:...
Когда я использую std :: stringstream in unreal anger android Я получаю сбой при запуске приложения на телефоне. 5.6
В нереальном редакторе перейдите к файлу-> Новый проект
Выберите первого лица и C ++
Добавить этот код, где он...
Когда я использую std :: stringstream in unreal anger android Я получаю сбой при запуске приложения на телефоне. 5.6
В нереальном редакторе перейдите к файлу-> Новый проект
Выберите первого лица и C ++
Добавить этот код, где он...
Проблема:
Когда я использую std :: stringstream в нереальном двигателе на Android, я получаю сбой при запуске приложения на телефоне. />
Установите Unreal Engine 5.6
В редакторе Unreal, перейдите к файлу -> Новый проект