forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   DirectX вектор умножить на матрицу (расчет скелетки) (http://forum.boolean.name/showthread.php?t=16171)

pozitiffcat 11.01.2012 00:04

DirectX вектор умножить на матрицу (расчет скелетки)
 
Возвращаюсь к своему старому нерешенному вопросу.
Есть матрица есть точка, нужно вычислить новую позицию точки не прибегая к синусам и косинусам. Можно ли так?
Код:

float weight = 0.5f; //вес точки
D3DXMATRIX mat; //какаято матрица
D3DXMATRIX oldpos; //исходная позиция точки
D3DXVECTOR newpos = oldpos * mat;

и как быть с весом?
Внятной теории ненашел

Mr_F_ 11.01.2012 00:13

Ответ: DirectX вектор умножить на матрицу (расчет скелетки)
 
не уверен, что там оператор умножения перегружен (давно не юзал встроенную математику), но помню что юзал эту функцию:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

616}[aKeP 11.01.2012 08:31

Ответ: DirectX вектор умножить на матрицу (расчет скелетки)
 
Оператор умножения в D3DX перегружен, но по-моему только для матриц.
Вот функции преобразования:
D3DXVECTOR3 *D3DXVec3TransformCoord(
D3DXVECTOR3* pOut, // Результат
CONST D3DXVECTOR3* pV, // Преобразуемая точка
CONST D3DXMATRIX* pM // Матрица преобразования
);


D3DXVECTOR3 *D3DXVec3TransformNormal(
D3DXVECTOR3 *pOut, // Результат
CONST D3DXVECTOR3 *pV, // Преобразуемый вектор
CONST D3DXMATRIX *pM // Матрица преобразования
);

pozitiffcat, что тебе именно с весом сделать надо?
Если ты хочешь физику точки сделать, то нужно искать момент инерции.
Если ты принимаешь вес за, что-то другое, то можно поподробнее.

Knightmare 11.01.2012 08:42

Ответ: DirectX вектор умножить на матрицу (расчет скелетки)
 
Суммарный вес всех костей равен 1. Неужели так сложно догадаться, что надо тупо перемножить вершину на матрицу каждой кости, результат домножить на вес и потом все вектора сложить?

PHP код:

Vector resultPosition;
for(
int i 0vertex->getTotalWeights(); i++)
    
resultVector += (skeleton->getBoneMatrix(vertex->getBoneIndex(i)) * vertex->getPosition()) * vertex->getBoneWeight(i); 


pozitiffcat 11.01.2012 09:13

Ответ: DirectX вектор умножить на матрицу (расчет скелетки)
 
Цитата:

Сообщение от Knightmare (Сообщение 216529)
Суммарный вес всех костей равен 1. Неужели так сложно догадаться, что надо тупо перемножить вершину на матрицу каждой кости, результат домножить на вес и потом все вектора сложить?

PHP код:

Vector resultPosition;
for(
int i 0vertex->getTotalWeights(); i++)
    
resultVector += (skeleton->getBoneMatrix(vertex->getBoneIndex(i)) * vertex->getPosition()) * vertex->getBoneWeight(i); 


я догадывался, но всеже что бы не городить быдлокод спросил


Часовой пояс GMT +4, время: 02:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot