Fixing tangent and binormal logic
This commit is contained in:
@ -771,7 +771,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me
|
||||
|
||||
int binormal_pos = (binormal_src->stride ? binormal_src->stride : 3) * p.indices[src + binormal_ofs];
|
||||
ERR_FAIL_INDEX_V(binormal_pos, binormal_src->array.size(), ERR_INVALID_DATA);
|
||||
Vector3 binormal = Vector3(binormal_src->array[binormal_pos + 0], binormal_src->array[binormal_pos + 1], binormal_src->array[binormal_pos + 2]);
|
||||
Vector3 binormal = Vector3(-binormal_src->array[binormal_pos + 0], -binormal_src->array[binormal_pos + 1], -binormal_src->array[binormal_pos + 2]); // Due to Godots face order it seems we need to flip our binormal!
|
||||
|
||||
int tangent_pos = (tangent_src->stride ? tangent_src->stride : 3) * p.indices[src + tangent_ofs];
|
||||
ERR_FAIL_INDEX_V(tangent_pos, tangent_src->array.size(), ERR_INVALID_DATA);
|
||||
|
||||
@ -899,7 +899,16 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) {
|
||||
array[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, a["NORMAL"], true);
|
||||
}
|
||||
if (a.has("TANGENT")) {
|
||||
array[Mesh::ARRAY_TANGENT] = _decode_accessor_as_floats(state, a["TANGENT"], true);
|
||||
PoolVector<float> tans = _decode_accessor_as_floats(state, a["TANGENT"], true);
|
||||
{ // we need our binormals inversed, so flip our w component.
|
||||
int ts = tans.size();
|
||||
PoolVector<float>::Write w = tans.write();
|
||||
|
||||
for (int j = 3; j < ts; j += 4) {
|
||||
w[j] *= -1.0;
|
||||
}
|
||||
}
|
||||
array[Mesh::ARRAY_TANGENT] = tans;
|
||||
}
|
||||
if (a.has("TEXCOORD_0")) {
|
||||
array[Mesh::ARRAY_TEX_UV] = _decode_accessor_as_vec2(state, a["TEXCOORD_0"], true);
|
||||
|
||||
Reference in New Issue
Block a user