mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 02:08:12 +03:00
Demos: Add indexed meshes in GLTeapot Demos
Improved the basic Wavefront OBJ loader to index vertices. Uses less memory for the same mesh.
This commit is contained in:
parent
782dc348fd
commit
7426c2fe45
Notes:
sideshowbarker
2024-07-18 18:26:05 +09:00
Author: https://github.com/mgaillard 🔰 Commit: https://github.com/SerenityOS/serenity/commit/7426c2fe45d Pull-request: https://github.com/SerenityOS/serenity/pull/6971
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
||||||
|
* Copyright (c) 2021, Mathieu Gaillard <gaillard.mathieu.39@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
@ -17,7 +18,7 @@ struct Vertex {
|
|||||||
|
|
||||||
// A triangle defines a single "face" of a mesh
|
// A triangle defines a single "face" of a mesh
|
||||||
struct Triangle {
|
struct Triangle {
|
||||||
Vertex a;
|
GLuint a;
|
||||||
Vertex b;
|
GLuint b;
|
||||||
Vertex c;
|
GLuint c;
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
||||||
|
* Copyright (c) 2021, Mathieu Gaillard <gaillard.mathieu.39@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
@ -20,6 +21,12 @@ const Color colors[] {
|
|||||||
Color::Yellow,
|
Color::Yellow,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Mesh::Mesh(Vector<Vertex> vertices, Vector<Triangle> triangles)
|
||||||
|
: m_vertex_list(move(vertices))
|
||||||
|
, m_triangle_list(move(triangles))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::draw()
|
void Mesh::draw()
|
||||||
{
|
{
|
||||||
u32 color_index = 0;
|
u32 color_index = 0;
|
||||||
@ -31,9 +38,23 @@ void Mesh::draw()
|
|||||||
glBegin(GL_TRIANGLES);
|
glBegin(GL_TRIANGLES);
|
||||||
glColor4ub(cur_color.red(), cur_color.green(), cur_color.blue(), 255);
|
glColor4ub(cur_color.red(), cur_color.green(), cur_color.blue(), 255);
|
||||||
|
|
||||||
glVertex3f(triangle.a.x, triangle.a.y, triangle.a.z); // Vertex 1
|
// Vertex 1
|
||||||
glVertex3f(triangle.b.x, triangle.b.y, triangle.b.z); // Vertex 2
|
glVertex3f(
|
||||||
glVertex3f(triangle.c.x, triangle.c.y, triangle.c.z); // Vertex 3
|
m_vertex_list.at(triangle.a).x,
|
||||||
|
m_vertex_list.at(triangle.a).y,
|
||||||
|
m_vertex_list.at(triangle.a).z);
|
||||||
|
|
||||||
|
// Vertex 2
|
||||||
|
glVertex3f(
|
||||||
|
m_vertex_list.at(triangle.b).x,
|
||||||
|
m_vertex_list.at(triangle.b).y,
|
||||||
|
m_vertex_list.at(triangle.b).z);
|
||||||
|
|
||||||
|
// Vertex 3
|
||||||
|
glVertex3f(
|
||||||
|
m_vertex_list.at(triangle.c).x,
|
||||||
|
m_vertex_list.at(triangle.c).y,
|
||||||
|
m_vertex_list.at(triangle.c).z);
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
||||||
|
* Copyright (c) 2021, Mathieu Gaillard <gaillard.mathieu.39@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
@ -11,19 +12,19 @@
|
|||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
// NOTE: We don't support indexed
|
|
||||||
class Mesh : public RefCounted<Mesh> {
|
class Mesh : public RefCounted<Mesh> {
|
||||||
public:
|
public:
|
||||||
Mesh() = delete;
|
Mesh() = delete;
|
||||||
Mesh(const Vector<Triangle>& triangles)
|
|
||||||
: m_triangle_list(triangles)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw();
|
Mesh(Vector<Vertex> vertices, Vector<Triangle> triangles);
|
||||||
|
|
||||||
|
size_t vertex_count() const { return m_vertex_list.size(); }
|
||||||
|
|
||||||
size_t triangle_count() const { return m_triangle_list.size(); }
|
size_t triangle_count() const { return m_triangle_list.size(); }
|
||||||
|
|
||||||
|
void draw();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Vector<Vertex> m_vertex_list;
|
||||||
Vector<Triangle> m_triangle_list;
|
Vector<Triangle> m_triangle_list;
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
||||||
|
* Copyright (c) 2021, Mathieu Gaillard <gaillard.mathieu.39@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
@ -47,13 +48,13 @@ RefPtr<Mesh> WavefrontOBJLoader::load(const String& fname)
|
|||||||
// Create a new triangle
|
// Create a new triangle
|
||||||
triangles.append(
|
triangles.append(
|
||||||
{
|
{
|
||||||
vertices.at(face_line.at(1).to_uint().value() - 1),
|
face_line.at(1).to_uint().value() - 1,
|
||||||
vertices.at(face_line.at(2).to_uint().value() - 1),
|
face_line.at(2).to_uint().value() - 1,
|
||||||
vertices.at(face_line.at(3).to_uint().value() - 1),
|
face_line.at(3).to_uint().value() - 1,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dbgln("Wavefront: Done.");
|
dbgln("Wavefront: Done.");
|
||||||
return adopt_ref(*new Mesh(triangles));
|
return adopt_ref(*new Mesh(vertices, triangles));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user