mirror of
https://github.com/minetest/irrlicht.git
synced 2024-11-16 15:30:25 +01:00
Test vertex normals on cube
This commit is contained in:
parent
d90b906d26
commit
93b538cb58
|
@ -87,7 +87,8 @@ static core::vector2df readVec2DF(const BufferOffset& readFrom)
|
|||
|
||||
}
|
||||
|
||||
static core::vector3df readVec3DF(const BufferOffset& readFrom, const float scale)
|
||||
static core::vector3df readVec3DF(const BufferOffset& readFrom,
|
||||
const float scale = 1.0f)
|
||||
{
|
||||
// glTF coordinates are right-handed, minetest ones are left-handed
|
||||
// 1 glTF coordinate is equivalent to 10 Irrlicht coordinates
|
||||
|
@ -130,6 +131,20 @@ static void copyPositions(const tinygltf::Model& model,
|
|||
}
|
||||
}
|
||||
|
||||
static void copyNormals(const tinygltf::Model& model,
|
||||
const Span<video::S3DVertex> vertices,
|
||||
const std::size_t accessorId)
|
||||
{
|
||||
const auto& view = model.bufferViews[
|
||||
model.accessors[accessorId].bufferView];
|
||||
const auto& buffer = model.buffers[view.buffer];
|
||||
for (std::size_t i = 0; i < model.accessors[accessorId].count; ++i) {
|
||||
const auto n = readVec3DF(BufferOffset(
|
||||
buffer.data, view.byteOffset + 3 * sizeof(float) * i));
|
||||
vertices.buffer[i].Normal = n;
|
||||
}
|
||||
}
|
||||
|
||||
static void copyTCoords(const tinygltf::Model& model,
|
||||
const Span<video::S3DVertex> vertices,
|
||||
const std::size_t accessorId)
|
||||
|
@ -153,6 +168,12 @@ static video::S3DVertex* getVertices(const tinygltf::Model& model,
|
|||
vertexBuffer, model.accessors[accessorId].count};
|
||||
copyPositions(model, vertices, accessorId);
|
||||
|
||||
const auto normalsField
|
||||
= model.meshes[0].primitives[0].attributes.find("NORMAL");
|
||||
if (normalsField != model.meshes[0].primitives[0].attributes.end()) {
|
||||
copyNormals(model, vertices, normalsField->second);
|
||||
}
|
||||
|
||||
const auto tCoordsField
|
||||
= model.meshes[0].primitives[0].attributes.find("TEXCOORD_0");
|
||||
if (tCoordsField != model.meshes[0].primitives[0].attributes.end()) {
|
||||
|
|
|
@ -93,6 +93,19 @@ TEST_CASE("blender cube") {
|
|||
CHECK(indices[2] == 9);
|
||||
}
|
||||
|
||||
SECTION("vertex normals are correct") {
|
||||
REQUIRE(sm.getMesh()->getMeshBuffer(0)->getVertexCount() == 24);
|
||||
const auto* vertices = reinterpret_cast<irr::video::S3DVertex*>(
|
||||
sm.getMesh()->getMeshBuffer(0)->getVertices());
|
||||
CHECK(vertices[0].Normal == irr::core::vector3df{1.0f, 0.0f, 0.0f});
|
||||
CHECK(vertices[1].Normal == irr::core::vector3df{0.0f, -1.0f, 0.0f});
|
||||
CHECK(vertices[2].Normal == irr::core::vector3df{0.0f, 0.0f, 1.0f});
|
||||
CHECK(vertices[3].Normal == irr::core::vector3df{1.0f, 0.0f, 0.0f});
|
||||
CHECK(vertices[6].Normal == irr::core::vector3df{1.0f, 0.0f, 0.0f});
|
||||
CHECK(vertices[23].Normal == irr::core::vector3df{-1.0f, 0.0f, 0.0f});
|
||||
|
||||
}
|
||||
|
||||
SECTION("texture coords are correct") {
|
||||
REQUIRE(sm.getMesh()->getMeshBuffer(0)->getVertexCount() == 24);
|
||||
const auto* vertices = reinterpret_cast<irr::video::S3DVertex*>(
|
||||
|
|
Loading…
Reference in New Issue
Block a user