fffff
This commit is contained in:
parent
a3075433f0
commit
1bb131ecd2
@ -183,6 +183,11 @@ namespace ZL
|
||||
{
|
||||
bones[i].children.push_back(getIndexByValue(boneChildren[boneName][j], boneNames));
|
||||
}
|
||||
|
||||
/*if (boneName == "Bone.020")
|
||||
{
|
||||
std::cout << i << std::endl;
|
||||
}*/
|
||||
}
|
||||
|
||||
startBones = bones;
|
||||
@ -299,8 +304,6 @@ namespace ZL
|
||||
localVerticesBoneWeight[i][j].weight = localVerticesBoneWeight[i][j].weight / sumWeights;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::getline(f, tempLine);//=== Animation Keyframes ===
|
||||
@ -376,8 +379,9 @@ namespace ZL
|
||||
}
|
||||
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0] = floatValues[0];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 1 * 3] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 2 * 3] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 1 * 4] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 2 * 4] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 3 * 4] = floatValues[3];
|
||||
|
||||
|
||||
std::getline(f, tempLine);
|
||||
@ -390,8 +394,9 @@ namespace ZL
|
||||
}
|
||||
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1] = floatValues[0];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 1 * 3] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 2 * 3] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 1 * 4] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 2 * 4] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 3 * 4] = floatValues[3];
|
||||
|
||||
std::getline(f, tempLine);
|
||||
b = tempLine.cbegin();
|
||||
@ -403,11 +408,26 @@ namespace ZL
|
||||
}
|
||||
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2] = floatValues[0];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 1 * 3] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 2 * 3] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 1 * 4] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 2 * 4] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 3 * 4] = floatValues[3];
|
||||
|
||||
|
||||
std::getline(f, tempLine);// ignore last matrix line
|
||||
std::getline(f, tempLine);
|
||||
b = tempLine.cbegin();
|
||||
e = tempLine.cend();
|
||||
floatValues.clear();
|
||||
while (std::regex_search(b, e, match, pattern_float)) {
|
||||
floatValues.push_back(std::stof(match.str()));
|
||||
b = match.suffix().first;
|
||||
}
|
||||
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[3] = floatValues[0];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[3 + 1 * 4] = floatValues[1];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[3 + 2 * 4] = floatValues[2];
|
||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[3 + 3 * 4] = floatValues[3];
|
||||
|
||||
//std::getline(f, tempLine);// ignore last matrix line
|
||||
|
||||
//=============== Matrix end ==================
|
||||
|
||||
@ -471,19 +491,48 @@ namespace ZL
|
||||
currentBones[i].boneStartWorld.v[1] = oneFrameBones[i].boneStartWorld.v[1] + t * (nextFrameBones[i].boneStartWorld.v[1] - oneFrameBones[i].boneStartWorld.v[1]);
|
||||
currentBones[i].boneStartWorld.v[2] = oneFrameBones[i].boneStartWorld.v[2] + t * (nextFrameBones[i].boneStartWorld.v[2] - oneFrameBones[i].boneStartWorld.v[2]);
|
||||
|
||||
Vector4f q1 = MatrixToQuat(oneFrameBones[i].boneMatrixWorld);
|
||||
Vector4f q2 = MatrixToQuat(nextFrameBones[i].boneMatrixWorld);
|
||||
Matrix3f oneFrameBonesMatrix;
|
||||
|
||||
oneFrameBonesMatrix.m[0] = oneFrameBones[i].boneMatrixWorld.m[0];
|
||||
oneFrameBonesMatrix.m[1] = oneFrameBones[i].boneMatrixWorld.m[1];
|
||||
oneFrameBonesMatrix.m[2] = oneFrameBones[i].boneMatrixWorld.m[2];
|
||||
|
||||
oneFrameBonesMatrix.m[3] = oneFrameBones[i].boneMatrixWorld.m[0 + 1*4];
|
||||
oneFrameBonesMatrix.m[4] = oneFrameBones[i].boneMatrixWorld.m[1 + 1*4];
|
||||
oneFrameBonesMatrix.m[5] = oneFrameBones[i].boneMatrixWorld.m[2 + 1*4];
|
||||
|
||||
oneFrameBonesMatrix.m[6] = oneFrameBones[i].boneMatrixWorld.m[0 + 2*4];
|
||||
oneFrameBonesMatrix.m[7] = oneFrameBones[i].boneMatrixWorld.m[1 + 2*4];
|
||||
oneFrameBonesMatrix.m[8] = oneFrameBones[i].boneMatrixWorld.m[2 + 2*4];
|
||||
|
||||
Matrix3f nextFrameBonesMatrix;
|
||||
|
||||
nextFrameBonesMatrix.m[0] = nextFrameBones[i].boneMatrixWorld.m[0];
|
||||
nextFrameBonesMatrix.m[1] = nextFrameBones[i].boneMatrixWorld.m[1];
|
||||
nextFrameBonesMatrix.m[2] = nextFrameBones[i].boneMatrixWorld.m[2];
|
||||
|
||||
nextFrameBonesMatrix.m[3] = nextFrameBones[i].boneMatrixWorld.m[0 + 1 * 4];
|
||||
nextFrameBonesMatrix.m[4] = nextFrameBones[i].boneMatrixWorld.m[1 + 1 * 4];
|
||||
nextFrameBonesMatrix.m[5] = nextFrameBones[i].boneMatrixWorld.m[2 + 1 * 4];
|
||||
|
||||
nextFrameBonesMatrix.m[6] = nextFrameBones[i].boneMatrixWorld.m[0 + 2 * 4];
|
||||
nextFrameBonesMatrix.m[7] = nextFrameBones[i].boneMatrixWorld.m[1 + 2 * 4];
|
||||
nextFrameBonesMatrix.m[8] = nextFrameBones[i].boneMatrixWorld.m[2 + 2 * 4];
|
||||
|
||||
Vector4f q1 = MatrixToQuat(oneFrameBonesMatrix);
|
||||
Vector4f q2 = MatrixToQuat(nextFrameBonesMatrix);
|
||||
Vector4f q1_norm = q1.normalized();
|
||||
Vector4f q2_norm = q2.normalized();
|
||||
|
||||
Vector4f result = slerp(q1_norm, q2_norm, t);
|
||||
|
||||
currentBones[i].boneMatrixWorld = QuatToMatrix(result);
|
||||
Matrix3f boneMatrixWorld3 = QuatToMatrix(result);
|
||||
|
||||
//skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBones[i].boneMatrixWorld, InverseMatrix(animations[0].keyFrames[0].bones[i].boneMatrixWorld));
|
||||
currentBones[i].boneMatrixWorld = MakeMatrix4x4(boneMatrixWorld3, currentBones[i].boneStartWorld);
|
||||
|
||||
Matrix4f currentBoneMatrixWorld4 = MakeMatrix4x4(currentBones[i].boneMatrixWorld, currentBones[i].boneStartWorld);
|
||||
Matrix4f startBoneMatrixWorld4 = MakeMatrix4x4(animations[0].keyFrames[0].bones[i].boneMatrixWorld, animations[0].keyFrames[0].bones[i].boneStartWorld);
|
||||
Matrix4f currentBoneMatrixWorld4 = currentBones[i].boneMatrixWorld;
|
||||
Matrix4f startBoneMatrixWorld4 = animations[0].keyFrames[0].bones[i].boneMatrixWorld;
|
||||
|
||||
Matrix4f inverstedStartBoneMatrixWorld4 = InverseMatrix(startBoneMatrixWorld4);
|
||||
|
||||
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
||||
@ -496,13 +545,19 @@ namespace ZL
|
||||
{
|
||||
currentBones[i].boneStartWorld = oneFrameBones[i].boneStartWorld;
|
||||
currentBones[i].boneMatrixWorld = oneFrameBones[i].boneMatrixWorld;
|
||||
Matrix4f currentBoneMatrixWorld4 = MakeMatrix4x4(currentBones[i].boneMatrixWorld, currentBones[i].boneStartWorld);
|
||||
Matrix4f startBoneMatrixWorld4 = MakeMatrix4x4(animations[0].keyFrames[0].bones[i].boneMatrixWorld, animations[0].keyFrames[0].bones[i].boneStartWorld);
|
||||
//Matrix4f currentBoneMatrixWorld4 = MakeMatrix4x4(currentBones[i].boneMatrixWorld, currentBones[i].boneStartWorld);
|
||||
//Matrix4f startBoneMatrixWorld4 = MakeMatrix4x4(animations[0].keyFrames[0].bones[i].boneMatrixWorld, animations[0].keyFrames[0].bones[i].boneStartWorld);
|
||||
Matrix4f currentBoneMatrixWorld4 = currentBones[i].boneMatrixWorld;
|
||||
Matrix4f startBoneMatrixWorld4 = animations[0].keyFrames[0].bones[i].boneMatrixWorld;
|
||||
Matrix4f inverstedStartBoneMatrixWorld4 = InverseMatrix(startBoneMatrixWorld4);
|
||||
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
||||
|
||||
}
|
||||
*/
|
||||
if (i == 10)
|
||||
{
|
||||
std::cout << i << std::endl;
|
||||
}
|
||||
}*/
|
||||
|
||||
for (int i = 0; i < mesh.PositionData.size(); i++)
|
||||
{
|
||||
Vector4f originalPos = {
|
||||
|
||||
@ -11,7 +11,7 @@ namespace ZL
|
||||
{
|
||||
Vector3f boneStartWorld;
|
||||
float boneLength;
|
||||
Matrix3f boneMatrixWorld;
|
||||
Matrix4f boneMatrixWorld;
|
||||
// boneVector = boneLength * (0, 1, 0) в осях блендера
|
||||
// Then multiply by boneMatrixWorld и вы получите конечную точку
|
||||
|
||||
|
||||
@ -53,8 +53,10 @@ void GameObjectManager::initialize() {
|
||||
preloadedRoomMeshArr[0].Move(Vector3f{ 0, 93, 0 });
|
||||
|
||||
|
||||
violaIdleModel.LoadFromFile("./idleviola001.txt");
|
||||
violaWalkModel.LoadFromFile("./walkviolla001.txt");
|
||||
//violaIdleModel.LoadFromFile("./idleviola001.txt");
|
||||
violaIdleModel.LoadFromFile("./idleviola008.txt");
|
||||
|
||||
violaWalkModel.LoadFromFile("./walkviola008.txt");
|
||||
sideThreadLoadingCompleted = true;
|
||||
});
|
||||
|
||||
@ -250,7 +252,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
||||
case SDLK_LEFT:
|
||||
case SDLK_a:
|
||||
Environment::leftPressed = true;
|
||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
||||
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||
if (Environment::violaCurrentAnimation == 0) {
|
||||
Environment::violaCurrentAnimation = 1;
|
||||
Environment::violaLastWalkFrame = -1;
|
||||
@ -259,7 +261,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
||||
case SDLK_RIGHT:
|
||||
case SDLK_d:
|
||||
Environment::rightPressed = true;
|
||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
||||
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||
if (Environment::violaCurrentAnimation == 0) {
|
||||
Environment::violaCurrentAnimation = 1;
|
||||
Environment::violaLastWalkFrame = -1;
|
||||
@ -268,7 +270,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
||||
case SDLK_UP:
|
||||
case SDLK_w:
|
||||
Environment::upPressed = true;
|
||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
||||
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||
if (Environment::violaCurrentAnimation == 0) {
|
||||
Environment::violaCurrentAnimation = 1;
|
||||
Environment::violaLastWalkFrame = -1;
|
||||
@ -277,7 +279,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
||||
case SDLK_DOWN:
|
||||
case SDLK_s:
|
||||
Environment::downPressed = true;
|
||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
||||
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||
if (Environment::violaCurrentAnimation == 0) {
|
||||
Environment::violaCurrentAnimation = 1;
|
||||
Environment::violaLastWalkFrame = -1;
|
||||
@ -451,6 +453,7 @@ void GameObjectManager::updateScene(size_t ms) {
|
||||
|
||||
if (Environment::violaCurrentAnimation == 0) {
|
||||
Environment::violaCurrentIdleFrame += ms / 24.f;
|
||||
//Environment::violaCurrentIdleFrame = 0;
|
||||
|
||||
while (Environment::violaCurrentIdleFrame >= 40) {
|
||||
Environment::violaCurrentIdleFrame -= 40;
|
||||
|
||||
@ -61,7 +61,6 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
|
||||
renderer.TranslateMatrix({ 0,0, -100 * Environment::zoom });
|
||||
|
||||
renderer.RotateMatrix(QuatFromRotateAroundX(Environment::cameraAlpha));
|
||||
//renderer.RotateMatrix(QuatFromRotateAroundY(Environment::cameraPhi));
|
||||
|
||||
//Go a little bit up to make camera at the position of Viola
|
||||
renderer.TranslateMatrix({ 0, Environment::cameraDefaultVerticalShift, 0 });
|
||||
@ -70,6 +69,7 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
|
||||
//Viola stuff
|
||||
renderer.ScaleMatrix(10);
|
||||
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 2.0));
|
||||
renderer.RotateMatrix(QuatFromRotateAroundZ(M_PI));
|
||||
|
||||
|
||||
|
||||
@ -123,6 +123,7 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
|
||||
|
||||
drawViola(gameObjects);
|
||||
|
||||
|
||||
renderer.shaderManager.PushShader(hideCamShaderName);
|
||||
renderer.RenderUniform1i(textureUniformName, 0);
|
||||
|
||||
|
||||
17612
idleviola008.txt
Normal file
17612
idleviola008.txt
Normal file
File diff suppressed because it is too large
Load Diff
18795
walkviola008.txt
Normal file
18795
walkviola008.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user