mirror of
https://github.com/minetest/irrlicht.git
synced 2025-02-21 13:20:27 +01:00
Fix getScale()
* Fix getScale() * Create blender_cube_scaled.gltf * Add scaling unit test * Remove comment * Undo github's silent reversion of 1,1,1
This commit is contained in:
parent
f33b8a612d
commit
777ec9d130
@ -238,12 +238,12 @@ core::vector2df CGLTFMeshFileLoader::MeshExtractor::readVec2DF(
|
||||
*/
|
||||
core::vector3df CGLTFMeshFileLoader::MeshExtractor::readVec3DF(
|
||||
const BufferOffset& readFrom,
|
||||
const float scale = 1.0f)
|
||||
const core::vector3df scale = {1.0f,1.0f,1.0f})
|
||||
{
|
||||
return core::vector3df(
|
||||
scale * readPrimitive<float>(readFrom),
|
||||
scale * readPrimitive<float>(BufferOffset(readFrom, sizeof(float))),
|
||||
-scale * readPrimitive<float>(BufferOffset(readFrom, 2 *
|
||||
scale.X * readPrimitive<float>(readFrom),
|
||||
scale.Y * readPrimitive<float>(BufferOffset(readFrom, sizeof(float))),
|
||||
-scale.Z * readPrimitive<float>(BufferOffset(readFrom, 2 *
|
||||
sizeof(float))));
|
||||
}
|
||||
|
||||
@ -311,13 +311,15 @@ void CGLTFMeshFileLoader::MeshExtractor::copyTCoords(
|
||||
* Required: NO
|
||||
* @returns: core::vector2df
|
||||
*/
|
||||
float CGLTFMeshFileLoader::MeshExtractor::getScale() const
|
||||
core::vector3df CGLTFMeshFileLoader::MeshExtractor::getScale() const
|
||||
{
|
||||
if (m_model.nodes[0].scale.size() > 0) {
|
||||
return static_cast<float>(m_model.nodes[0].scale[0]);
|
||||
core::vector3df buffer{1.0f,1.0f,1.0f};
|
||||
if (m_model.nodes[0].scale.size() == 3) {
|
||||
buffer.X = static_cast<float>(m_model.nodes[0].scale[0]);
|
||||
buffer.Y = static_cast<float>(m_model.nodes[0].scale[1]);
|
||||
buffer.Z = static_cast<float>(m_model.nodes[0].scale[2]);
|
||||
}
|
||||
|
||||
return 1.0f;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ private:
|
||||
*/
|
||||
static core::vector3df readVec3DF(
|
||||
const BufferOffset& readFrom,
|
||||
const float scale);
|
||||
const core::vector3df scale);
|
||||
|
||||
void copyPositions(const std::size_t accessorIdx,
|
||||
std::vector<vertex_t>& vertices) const;
|
||||
@ -100,7 +100,7 @@ private:
|
||||
*
|
||||
* Returns vec3(1.0, 1.0, 1.0) if no scale factor is present.
|
||||
*/
|
||||
float getScale() const;
|
||||
core::vector3df getScale() const;
|
||||
|
||||
std::size_t getElemCount(const std::size_t accessorIdx) const;
|
||||
|
||||
|
105
source/Irrlicht/tests/assets/blender_cube_scaled.gltf
Normal file
105
source/Irrlicht/tests/assets/blender_cube_scaled.gltf
Normal file
@ -0,0 +1,105 @@
|
||||
{
|
||||
"asset" : {
|
||||
"generator" : "Khronos glTF Blender I/O v1.7.33",
|
||||
"version" : "2.0"
|
||||
},
|
||||
"scene" : 0,
|
||||
"scenes" : [
|
||||
{
|
||||
"name" : "Scene",
|
||||
"nodes" : [
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"nodes" : [
|
||||
{
|
||||
"mesh" : 0,
|
||||
"name" : "Cube",
|
||||
"scale" : [
|
||||
150,
|
||||
1,
|
||||
21.5
|
||||
]
|
||||
}
|
||||
],
|
||||
"meshes" : [
|
||||
{
|
||||
"name" : "Cube.004",
|
||||
"primitives" : [
|
||||
{
|
||||
"attributes" : {
|
||||
"POSITION" : 0,
|
||||
"NORMAL" : 1,
|
||||
"TEXCOORD_0" : 2
|
||||
},
|
||||
"indices" : 3
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"accessors" : [
|
||||
{
|
||||
"bufferView" : 0,
|
||||
"componentType" : 5126,
|
||||
"count" : 24,
|
||||
"max" : [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"min" : [
|
||||
-1,
|
||||
-1,
|
||||
-1
|
||||
],
|
||||
"type" : "VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView" : 1,
|
||||
"componentType" : 5126,
|
||||
"count" : 24,
|
||||
"type" : "VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView" : 2,
|
||||
"componentType" : 5126,
|
||||
"count" : 24,
|
||||
"type" : "VEC2"
|
||||
},
|
||||
{
|
||||
"bufferView" : 3,
|
||||
"componentType" : 5123,
|
||||
"count" : 36,
|
||||
"type" : "SCALAR"
|
||||
}
|
||||
],
|
||||
"bufferViews" : [
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 288,
|
||||
"byteOffset" : 0
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 288,
|
||||
"byteOffset" : 288
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 192,
|
||||
"byteOffset" : 576
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 72,
|
||||
"byteOffset" : 768
|
||||
}
|
||||
],
|
||||
"buffers" : [
|
||||
{
|
||||
"byteLength" : 840,
|
||||
"uri" : "data:application/octet-stream;base64,AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAADAPgAAgD8AAAA+AACAPgAAwD4AAAAAAAAgPwAAgD8AACA/AAAAAAAAYD8AAIA+AADAPgAAQD8AAAA+AAAAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAADAAkAAAAJAAYACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAQADQAEAAIABwASAAwABwAMAAEAFgALAAUAFgAFABAA"
|
||||
}
|
||||
]
|
||||
}
|
@ -143,6 +143,27 @@ TEST_CASE("invalid JSON returns nullptr") {
|
||||
CHECK(sm.getMesh() == nullptr);
|
||||
}
|
||||
|
||||
TEST_CASE("blender cube scaled") {
|
||||
ScopedMesh sm("source/Irrlicht/tests/assets/blender_cube_scaled.gltf");
|
||||
REQUIRE(sm.getMesh() != nullptr);
|
||||
REQUIRE(sm.getMesh()->getMeshBufferCount() == 1);
|
||||
|
||||
SECTION("Scaling is correct") {
|
||||
REQUIRE(sm.getMesh()->getMeshBuffer(0)->getVertexCount() == 24);
|
||||
const auto* vertices = reinterpret_cast<irr::video::S3DVertex*>(
|
||||
sm.getMesh()->getMeshBuffer(0)->getVertices());
|
||||
|
||||
CHECK(vertices[0].Pos == irr::core::vector3df{-150.0f, -1.0f, -21.5f});
|
||||
CHECK(vertices[3].Pos == irr::core::vector3df{-150.0f, 1.0f, -21.5f});
|
||||
CHECK(vertices[6].Pos == irr::core::vector3df{-150.0f, -1.0f, 21.5f});
|
||||
CHECK(vertices[9].Pos == irr::core::vector3df{-150.0f, 1.0f, 21.5f});
|
||||
CHECK(vertices[12].Pos == irr::core::vector3df{150.0f, -1.0f, -21.5f});
|
||||
CHECK(vertices[15].Pos == irr::core::vector3df{150.0f, 1.0f, -21.5f});
|
||||
CHECK(vertices[18].Pos == irr::core::vector3df{150.0f, -1.0f, 21.5f});
|
||||
CHECK(vertices[21].Pos == irr::core::vector3df{150.0f, 1.0f, 21.5f});
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("snow man") {
|
||||
ScopedMesh sm("source/Irrlicht/tests/assets/snow_man.gltf");
|
||||
REQUIRE(sm.getMesh() != nullptr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user