Fix object angles.

This commit is contained in:
lzwdgc 2017-12-09 22:21:06 +03:00
parent 5f7c59e2eb
commit ce1ba32d58
3 changed files with 55 additions and 15 deletions

View file

@ -120,6 +120,30 @@ void write_mmo(Storage *storage, const mmo_storage &s)
auto this_map = storage->maps[map_id]; auto this_map = storage->maps[map_id];
auto check_val = [](auto &v)
{
if (v > 1)
{
v = v - floor(v);
std::cerr << /*object->name2 << */": yaw > 1\n";
}
if (v < -1)
{
v = v - ceil(v);
std::cerr << /*object->name2 << */": yaw < -1\n";
}
};
auto calc_yaw = [&check_val](auto &v)
{
//check_val(v[0].x);
//check_val(v[1].x);
auto yaw = atan2(v[1].x, v[0].x);
yaw = RAD2GRAD(yaw);
return -(yaw - 90);
};
int inserted = 0; int inserted = 0;
int exist = 0; int exist = 0;
for (auto &seg : s.objects.segments) for (auto &seg : s.objects.segments)
@ -160,13 +184,28 @@ void write_mmo(Storage *storage, const mmo_storage &s)
mb.z = ASSIGN(object->position.z, 0); mb.z = ASSIGN(object->position.z, 0);
mb.roll = 0; mb.roll = 0;
mb.pitch = 0; mb.pitch = 0;
auto yaw = ASSIGN(object->m_rotate_z[0].x, 0); /*auto yaw = ASSIGN(object->m_rotate_z[0].x, 0);
if (yaw > 1) if (yaw > 1)
{
yaw = yaw - floor(yaw); yaw = yaw - floor(yaw);
std::cerr << object->name2 << ": yaw > 1\n";
}
if (yaw < -1) if (yaw < -1)
{
yaw = yaw - ceil(yaw); yaw = yaw - ceil(yaw);
std::cerr << object->name2 << ": yaw < -1\n";
}
mb.yaw = acos(yaw); mb.yaw = acos(yaw);
RAD2GRAD(mb.yaw); RAD2GRAD(mb.yaw);
// wrong 1
/*if (mb.yaw < 90)
mb.yaw += 90;
else
{
mb.yaw -= 90;
mb.yaw = -mb.yaw;
}*/
mb.yaw = calc_yaw(object->m_rotate_z);
mb.scale = ASSIGN(object->m_rotate_z[2].z, 1); mb.scale = ASSIGN(object->m_rotate_z[2].z, 1);
auto i = find_if(storage->mapBuildings.begin(), storage->mapBuildings.end(), [&](const auto &p) auto i = find_if(storage->mapBuildings.begin(), storage->mapBuildings.end(), [&](const auto &p)
{ {
@ -185,6 +224,7 @@ void write_mmo(Storage *storage, const mmo_storage &s)
} }
} }
} }
if (seg->segment_type == ObjectType::TREE || if (seg->segment_type == ObjectType::TREE ||
seg->segment_type == ObjectType::STONE || seg->segment_type == ObjectType::STONE ||
seg->segment_type == ObjectType::LAMP || seg->segment_type == ObjectType::LAMP ||
@ -221,13 +261,7 @@ void write_mmo(Storage *storage, const mmo_storage &s)
mb.z = ASSIGN(object->position.z, 0); mb.z = ASSIGN(object->position.z, 0);
mb.roll = 0; mb.roll = 0;
mb.pitch = 0; mb.pitch = 0;
auto yaw = ASSIGN(object->m_rotate_z[0].x, 0); mb.yaw = calc_yaw(object->m_rotate_z) - 90;
if (yaw > 1)
yaw = yaw - floor(yaw);
if (yaw < -1)
yaw = yaw - ceil(yaw);
mb.yaw = acos(yaw);
RAD2GRAD(mb.yaw);
mb.scale = ASSIGN(object->m_rotate_z[2].z, 1); mb.scale = ASSIGN(object->m_rotate_z[2].z, 1);
auto i = find_if(storage->mapObjects.begin(), storage->mapObjects.end(), [&](const auto &p) auto i = find_if(storage->mapObjects.begin(), storage->mapObjects.end(), [&](const auto &p)
{ {

View file

@ -116,7 +116,7 @@ void mmp::load(const buffer &b)
void mmp::load(const std::string &fn) void mmp::load(const std::string &fn)
{ {
filename = fn; filename = fn;
buffer b(read_file(filename)); buffer b(read_file(filename, true));
load(b); load(b);
} }

View file

@ -242,25 +242,26 @@ bool CreateScene(model &model, const std::string &name, FbxManager* pSdkManager,
for (auto &v : b.vertices) for (auto &v : b.vertices)
{ {
FbxVector4 x; FbxVector4 x;
x.Set(-v.coordinates.x * scale_mult, v.coordinates.y * scale_mult, -v.coordinates.z * scale_mult, v.coordinates.w); x.Set(v.coordinates.z * scale_mult, v.coordinates.y * scale_mult, v.coordinates.x * scale_mult, v.coordinates.w);
c += x; c += x;
} }
c /= b.vertices.size(); c /= b.vertices.size();
auto s = create_socket_named(name); auto s = create_socket_named(name);
if (mirror_x) if (mirror_x)
c.mData[0] = -c.mData[0]; c.mData[2] = -c.mData[2];
s->LclTranslation.Set(c); s->LclTranslation.Set(c);
}; };
//std::map<std::string, //std::map<std::string,
int socket_id = 0; int engine_id = 0;
int fx_id = 0;
for (auto &b : model.blocks) for (auto &b : model.blocks)
{ {
// //
if (b.isEngineFx()) if (b.isEngineFx())
{ {
create_socket(b, "EngineFx_" + std::to_string(socket_id++)); create_socket(b, "EngineFx_" + std::to_string(engine_id++));
continue; continue;
} }
else if (b.h.name == "LIGHTGUN") else if (b.h.name == "LIGHTGUN")
@ -279,6 +280,11 @@ bool CreateScene(model &model, const std::string &name, FbxManager* pSdkManager,
create_socket(b, "WeaponRocket"); create_socket(b, "WeaponRocket");
continue; continue;
} }
else if (b.h.name.find("FX") == 0)
{
create_socket(b, "Fx_" + std::to_string(fx_id++));
continue;
}
if (!b.canPrint()) if (!b.canPrint())
continue; continue;
@ -320,9 +326,9 @@ bool CreateScene(model &model, const std::string &name, FbxManager* pSdkManager,
for (auto &v : b.vertices) for (auto &v : b.vertices)
{ {
FbxVector4 x; FbxVector4 x;
x.Set(-v.coordinates.x * scale_mult, v.coordinates.z * scale_mult, v.coordinates.y * scale_mult, v.coordinates.w); x.Set(v.coordinates.z * scale_mult, v.coordinates.x * scale_mult, v.coordinates.y * scale_mult, v.coordinates.w);
m->SetControlPointAt(x, i++); m->SetControlPointAt(x, i++);
normal->GetDirectArray().Add(FbxVector4(-v.normal.x, -v.normal.z, v.normal.y)); normal->GetDirectArray().Add(FbxVector4(v.normal.z, -v.normal.x, v.normal.y));
float f; float f;
auto uc = modf(fabs(v.texture_coordinates.u), &f); auto uc = modf(fabs(v.texture_coordinates.u), &f);