Class: Bestguigui::Render3D::Billboard
- Inherits:
-
Object
- Object
- Bestguigui::Render3D::Billboard
- Includes:
- OpenGL
- Defined in:
- lib/bestguigui/render_3d/billboard.rb
Overview
Sprite plat texturé dans l'espace 3D — pour des personnages/objets en 2D dans un décor 3D (technique "billboard" classique). Ce motif était dupliqué à l'identique dans plusieurs endroits du jeu porté.
Bestguigui::Render3D::Billboard.draw(camera, texture, x, y, z, width, height)
face: (optionnel) prend la Camera pour orienter le sprite vers elle
à chaque frame — sans, le sprite garde une orientation fixe (pratique
pour un sprite vu de dos/de profil qui ne doit pas pivoter).
Bestguigui::Render3D::Billboard.draw(camera, texture, x, y, z, w, h, face: camera)
Class Method Summary collapse
- .draw(camera, texture, x, y, z, width, height, face: nil, shader: Shader.default) ⇒ Object
-
.quad ⇒ Object
Quad unité (x: -0.5..0.5, y: 0..1) partagé par tous les billboards — un seul VBO en mémoire GPU, jamais recréé.
Class Method Details
.draw(camera, texture, x, y, z, width, height, face: nil, shader: Shader.default) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/bestguigui/render_3d/billboard.rb', line 30 def self.draw(camera, texture, x, y, z, width, height, face: nil, shader: Shader.default) model = Mat4.translation(x, y, z) model *= Mat4.rotation_x(-face.angle_v) * Mat4.rotation_y(90 - face.angle) if face model *= Mat4.scaling(width, height, 1) shader.use shader.set_mat4("u_model", model) shader.set_mat4("u_view", camera.view_matrix) shader.set_mat4("u_projection", camera.projection_matrix) shader.set_bool("u_alpha_test", true) shader.set_vec3("u_tint", 1, 1, 1) shader.set_int("u_texture", 0) texture.bind quad.draw end |
.quad ⇒ Object
Quad unité (x: -0.5..0.5, y: 0..1) partagé par tous les billboards — un seul VBO en mémoire GPU, jamais recréé.
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/bestguigui/render_3d/billboard.rb', line 19 def self.quad @quad ||= Mesh.new([ -0.5, 1.0, 0.0, 0.0, 0.0, -0.5, 0.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.0, 1.0, 1.0, -0.5, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 1.0, 1.0, 0.5, 1.0, 0.0, 1.0, 0.0 ]) end |