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));
|
bones[i].children.push_back(getIndexByValue(boneChildren[boneName][j], boneNames));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*if (boneName == "Bone.020")
|
||||||
|
{
|
||||||
|
std::cout << i << std::endl;
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
startBones = bones;
|
startBones = bones;
|
||||||
@ -299,8 +304,6 @@ namespace ZL
|
|||||||
localVerticesBoneWeight[i][j].weight = localVerticesBoneWeight[i][j].weight / sumWeights;
|
localVerticesBoneWeight[i][j].weight = localVerticesBoneWeight[i][j].weight / sumWeights;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::getline(f, tempLine);//=== Animation Keyframes ===
|
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] = floatValues[0];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 1 * 3] = floatValues[1];
|
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 1 * 4] = floatValues[1];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[0 + 2 * 3] = floatValues[2];
|
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);
|
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] = floatValues[0];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 1 * 3] = floatValues[1];
|
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 1 * 4] = floatValues[1];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[1 + 2 * 3] = floatValues[2];
|
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);
|
std::getline(f, tempLine);
|
||||||
b = tempLine.cbegin();
|
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] = floatValues[0];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 1 * 3] = floatValues[1];
|
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 1 * 4] = floatValues[1];
|
||||||
animations[0].keyFrames[i].bones[boneNumber].boneMatrixWorld.m[2 + 2 * 3] = floatValues[2];
|
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 ==================
|
//=============== 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[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]);
|
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);
|
Matrix3f oneFrameBonesMatrix;
|
||||||
Vector4f q2 = MatrixToQuat(nextFrameBones[i].boneMatrixWorld);
|
|
||||||
|
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 q1_norm = q1.normalized();
|
||||||
Vector4f q2_norm = q2.normalized();
|
Vector4f q2_norm = q2.normalized();
|
||||||
|
|
||||||
Vector4f result = slerp(q1_norm, q2_norm, t);
|
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 currentBoneMatrixWorld4 = currentBones[i].boneMatrixWorld;
|
||||||
Matrix4f startBoneMatrixWorld4 = MakeMatrix4x4(animations[0].keyFrames[0].bones[i].boneMatrixWorld, animations[0].keyFrames[0].bones[i].boneStartWorld);
|
Matrix4f startBoneMatrixWorld4 = animations[0].keyFrames[0].bones[i].boneMatrixWorld;
|
||||||
|
|
||||||
Matrix4f inverstedStartBoneMatrixWorld4 = InverseMatrix(startBoneMatrixWorld4);
|
Matrix4f inverstedStartBoneMatrixWorld4 = InverseMatrix(startBoneMatrixWorld4);
|
||||||
|
|
||||||
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
||||||
@ -496,13 +545,19 @@ namespace ZL
|
|||||||
{
|
{
|
||||||
currentBones[i].boneStartWorld = oneFrameBones[i].boneStartWorld;
|
currentBones[i].boneStartWorld = oneFrameBones[i].boneStartWorld;
|
||||||
currentBones[i].boneMatrixWorld = oneFrameBones[i].boneMatrixWorld;
|
currentBones[i].boneMatrixWorld = oneFrameBones[i].boneMatrixWorld;
|
||||||
Matrix4f currentBoneMatrixWorld4 = MakeMatrix4x4(currentBones[i].boneMatrixWorld, 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 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);
|
Matrix4f inverstedStartBoneMatrixWorld4 = InverseMatrix(startBoneMatrixWorld4);
|
||||||
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
skinningMatrixForEachBone[i] = MultMatrixMatrix(currentBoneMatrixWorld4, inverstedStartBoneMatrixWorld4);
|
||||||
|
|
||||||
}
|
if (i == 10)
|
||||||
*/
|
{
|
||||||
|
std::cout << i << std::endl;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
for (int i = 0; i < mesh.PositionData.size(); i++)
|
for (int i = 0; i < mesh.PositionData.size(); i++)
|
||||||
{
|
{
|
||||||
Vector4f originalPos = {
|
Vector4f originalPos = {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ namespace ZL
|
|||||||
{
|
{
|
||||||
Vector3f boneStartWorld;
|
Vector3f boneStartWorld;
|
||||||
float boneLength;
|
float boneLength;
|
||||||
Matrix3f boneMatrixWorld;
|
Matrix4f boneMatrixWorld;
|
||||||
// boneVector = boneLength * (0, 1, 0) в осях блендера
|
// boneVector = boneLength * (0, 1, 0) в осях блендера
|
||||||
// Then multiply by boneMatrixWorld и вы получите конечную точку
|
// Then multiply by boneMatrixWorld и вы получите конечную точку
|
||||||
|
|
||||||
|
|||||||
@ -53,8 +53,10 @@ void GameObjectManager::initialize() {
|
|||||||
preloadedRoomMeshArr[0].Move(Vector3f{ 0, 93, 0 });
|
preloadedRoomMeshArr[0].Move(Vector3f{ 0, 93, 0 });
|
||||||
|
|
||||||
|
|
||||||
violaIdleModel.LoadFromFile("./idleviola001.txt");
|
//violaIdleModel.LoadFromFile("./idleviola001.txt");
|
||||||
violaWalkModel.LoadFromFile("./walkviolla001.txt");
|
violaIdleModel.LoadFromFile("./idleviola008.txt");
|
||||||
|
|
||||||
|
violaWalkModel.LoadFromFile("./walkviola008.txt");
|
||||||
sideThreadLoadingCompleted = true;
|
sideThreadLoadingCompleted = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -250,7 +252,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
|||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
Environment::leftPressed = true;
|
Environment::leftPressed = true;
|
||||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||||
if (Environment::violaCurrentAnimation == 0) {
|
if (Environment::violaCurrentAnimation == 0) {
|
||||||
Environment::violaCurrentAnimation = 1;
|
Environment::violaCurrentAnimation = 1;
|
||||||
Environment::violaLastWalkFrame = -1;
|
Environment::violaLastWalkFrame = -1;
|
||||||
@ -259,7 +261,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
|||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
Environment::rightPressed = true;
|
Environment::rightPressed = true;
|
||||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||||
if (Environment::violaCurrentAnimation == 0) {
|
if (Environment::violaCurrentAnimation == 0) {
|
||||||
Environment::violaCurrentAnimation = 1;
|
Environment::violaCurrentAnimation = 1;
|
||||||
Environment::violaLastWalkFrame = -1;
|
Environment::violaLastWalkFrame = -1;
|
||||||
@ -268,7 +270,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
|||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
Environment::upPressed = true;
|
Environment::upPressed = true;
|
||||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||||
if (Environment::violaCurrentAnimation == 0) {
|
if (Environment::violaCurrentAnimation == 0) {
|
||||||
Environment::violaCurrentAnimation = 1;
|
Environment::violaCurrentAnimation = 1;
|
||||||
Environment::violaLastWalkFrame = -1;
|
Environment::violaLastWalkFrame = -1;
|
||||||
@ -277,7 +279,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
|||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
case SDLK_s:
|
case SDLK_s:
|
||||||
Environment::downPressed = true;
|
Environment::downPressed = true;
|
||||||
audioPlayerAsync.playSoundAsync("Звук-Идут-по-земле.ogg"); // Заменено
|
audioPlayerAsync.playSoundAsync("walk.ogg"); // Заменено
|
||||||
if (Environment::violaCurrentAnimation == 0) {
|
if (Environment::violaCurrentAnimation == 0) {
|
||||||
Environment::violaCurrentAnimation = 1;
|
Environment::violaCurrentAnimation = 1;
|
||||||
Environment::violaLastWalkFrame = -1;
|
Environment::violaLastWalkFrame = -1;
|
||||||
@ -451,6 +453,7 @@ void GameObjectManager::updateScene(size_t ms) {
|
|||||||
|
|
||||||
if (Environment::violaCurrentAnimation == 0) {
|
if (Environment::violaCurrentAnimation == 0) {
|
||||||
Environment::violaCurrentIdleFrame += ms / 24.f;
|
Environment::violaCurrentIdleFrame += ms / 24.f;
|
||||||
|
//Environment::violaCurrentIdleFrame = 0;
|
||||||
|
|
||||||
while (Environment::violaCurrentIdleFrame >= 40) {
|
while (Environment::violaCurrentIdleFrame >= 40) {
|
||||||
Environment::violaCurrentIdleFrame -= 40;
|
Environment::violaCurrentIdleFrame -= 40;
|
||||||
|
|||||||
@ -61,7 +61,6 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
|
|||||||
renderer.TranslateMatrix({ 0,0, -100 * Environment::zoom });
|
renderer.TranslateMatrix({ 0,0, -100 * Environment::zoom });
|
||||||
|
|
||||||
renderer.RotateMatrix(QuatFromRotateAroundX(Environment::cameraAlpha));
|
renderer.RotateMatrix(QuatFromRotateAroundX(Environment::cameraAlpha));
|
||||||
//renderer.RotateMatrix(QuatFromRotateAroundY(Environment::cameraPhi));
|
|
||||||
|
|
||||||
//Go a little bit up to make camera at the position of Viola
|
//Go a little bit up to make camera at the position of Viola
|
||||||
renderer.TranslateMatrix({ 0, Environment::cameraDefaultVerticalShift, 0 });
|
renderer.TranslateMatrix({ 0, Environment::cameraDefaultVerticalShift, 0 });
|
||||||
@ -70,6 +69,7 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
|
|||||||
//Viola stuff
|
//Viola stuff
|
||||||
renderer.ScaleMatrix(10);
|
renderer.ScaleMatrix(10);
|
||||||
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 2.0));
|
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 2.0));
|
||||||
|
renderer.RotateMatrix(QuatFromRotateAroundZ(M_PI));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -123,6 +123,7 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
|
|||||||
|
|
||||||
drawViola(gameObjects);
|
drawViola(gameObjects);
|
||||||
|
|
||||||
|
|
||||||
renderer.shaderManager.PushShader(hideCamShaderName);
|
renderer.shaderManager.PushShader(hideCamShaderName);
|
||||||
renderer.RenderUniform1i(textureUniformName, 0);
|
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