mirror of
https://github.com/minetest/irrlicht.git
synced 2025-02-11 17:10:23 +01:00
Scale cube vertices correctly
This commit is contained in:
parent
e784335115
commit
b1260a8927
@ -71,13 +71,13 @@ static T readPrimitive(const BufferOffset& readFrom) {
|
|||||||
return *reinterpret_cast<T*>(d);
|
return *reinterpret_cast<T*>(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
static core::vector3df readVector(const BufferOffset& readFrom) {
|
static core::vector3df readVector(const BufferOffset& readFrom, const float scale) {
|
||||||
// glTF coordinates are right-handed, minetest ones are left-handed
|
// glTF coordinates are right-handed, minetest ones are left-handed
|
||||||
// 1 glTF coordinate is equivalent to 10 Irrlicht coordinates
|
// 1 glTF coordinate is equivalent to 10 Irrlicht coordinates
|
||||||
return core::vector3df(
|
return core::vector3df(
|
||||||
-1.0f * readPrimitive<float>(readFrom),
|
-scale * readPrimitive<float>(readFrom),
|
||||||
1.0f * readPrimitive<float>(BufferOffset(readFrom, sizeof(float))),
|
scale * readPrimitive<float>(BufferOffset(readFrom, sizeof(float))),
|
||||||
1.0 * readPrimitive<float>(BufferOffset(readFrom, 2 * sizeof(float))));
|
scale * readPrimitive<float>(BufferOffset(readFrom, 2 * sizeof(float))));
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16* readIndices(const BufferOffset& readFrom, const std::size_t count)
|
static u16* readIndices(const BufferOffset& readFrom, const std::size_t count)
|
||||||
@ -89,6 +89,15 @@ static u16* readIndices(const BufferOffset& readFrom, const std::size_t count)
|
|||||||
return indices;
|
return indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float getScale(const tinygltf::Model& model)
|
||||||
|
{
|
||||||
|
if (model.nodes[0].scale.size() > 0) {
|
||||||
|
return static_cast<float>(model.nodes[0].scale[0]);
|
||||||
|
}
|
||||||
|
return 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
video::S3DVertex* getVertices(const tinygltf::Model& model, const std::size_t accessorId)
|
video::S3DVertex* getVertices(const tinygltf::Model& model, const std::size_t accessorId)
|
||||||
{
|
{
|
||||||
const auto& view = model.bufferViews[
|
const auto& view = model.bufferViews[
|
||||||
@ -99,7 +108,7 @@ video::S3DVertex* getVertices(const tinygltf::Model& model, const std::size_t ac
|
|||||||
|
|
||||||
for (std::size_t i = 0; i < model.accessors[accessorId].count; ++i) {
|
for (std::size_t i = 0; i < model.accessors[accessorId].count; ++i) {
|
||||||
const auto v = readVector(BufferOffset(
|
const auto v = readVector(BufferOffset(
|
||||||
buffer.data, view.byteOffset + 3 * sizeof(float) * i));
|
buffer.data, view.byteOffset + 3 * sizeof(float) * i), getScale(model));
|
||||||
vertices[i] = {v, {0.0f, 0.0f, 0.0f}, {}, {0.0f, 0.0f}};
|
vertices[i] = {v, {0.0f, 0.0f, 0.0f}, {}, {0.0f, 0.0f}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,14 +74,14 @@ TEST_CASE("blender cube") {
|
|||||||
REQUIRE(sm.getMesh()->getMeshBuffer(0)->getVertexCount() == 24);
|
REQUIRE(sm.getMesh()->getMeshBuffer(0)->getVertexCount() == 24);
|
||||||
const auto* vertices = reinterpret_cast<irr::video::S3DVertex*>(
|
const auto* vertices = reinterpret_cast<irr::video::S3DVertex*>(
|
||||||
sm.getMesh()->getMeshBuffer(0)->getVertices());
|
sm.getMesh()->getMeshBuffer(0)->getVertices());
|
||||||
CHECK(vertices[0].Pos == irr::core::vector3df{1.0f, -1.0f, 1.0f});
|
CHECK(vertices[0].Pos == irr::core::vector3df{10.0f, -10.0f, 10.0f});
|
||||||
CHECK(vertices[3].Pos == irr::core::vector3df{1.0f, 1.0f, 1.0f});
|
CHECK(vertices[3].Pos == irr::core::vector3df{10.0f, 10.0f, 10.0f});
|
||||||
CHECK(vertices[6].Pos == irr::core::vector3df{1.0f, -1.0f, -1.0f});
|
CHECK(vertices[6].Pos == irr::core::vector3df{10.0f, -10.0f, -10.0f});
|
||||||
CHECK(vertices[9].Pos == irr::core::vector3df{1.0f, 1.0f, -1.0f});
|
CHECK(vertices[9].Pos == irr::core::vector3df{10.0f, 10.0f, -10.0f});
|
||||||
CHECK(vertices[12].Pos == irr::core::vector3df{-1.0f, -1.0f, 1.0f});
|
CHECK(vertices[12].Pos == irr::core::vector3df{-10.0f, -10.0f, 10.0f});
|
||||||
CHECK(vertices[15].Pos == irr::core::vector3df{-1.0f, 1.0f, 1.0f});
|
CHECK(vertices[15].Pos == irr::core::vector3df{-10.0f, 10.0f, 10.0f});
|
||||||
CHECK(vertices[18].Pos == irr::core::vector3df{-1.0f, -1.0f, -1.0f});
|
CHECK(vertices[18].Pos == irr::core::vector3df{-10.0f, -10.0f, -10.0f});
|
||||||
CHECK(vertices[21].Pos == irr::core::vector3df{-1.0f, 1.0f, -1.0f});
|
CHECK(vertices[21].Pos == irr::core::vector3df{-10.0f, 10.0f, -10.0f});
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("vertex indices are correct")
|
SECTION("vertex indices are correct")
|
||||||
|
Loading…
Reference in New Issue
Block a user