Class: Bestguigui::Render3D

Inherits:
Object
  • Object
show all
Defined in:
lib/bestguigui_lab/render_3d.rb

Overview

Instancie-la une fois, garde une référence, utilise-la dans draw :

@renderer = Render3D.new
@renderer.render_3d(self) { @renderer.look_at(...) ; @model.draw }

Instance Method Summary collapse

Instance Method Details

#draw_ground(size: 50.0, color: Gosu::Color::FUCHSIA) ⇒ Object

Sol plat rapide (aucune texture) pour se repérer dans une scène en cours de préparation : un carré de size*2 de côté centré à l'origine.



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/bestguigui_lab/render_3d.rb', line 23

def draw_ground(size: 50.0, color: Gosu::Color::FUCHSIA)
    glColor4ub(color.red, color.green, color.blue, color.alpha)

    glBegin(GL_QUADS)
    glVertex3f(-size, 0, -size)
    glVertex3f(-size, 0, size)
    glVertex3f(size, 0, size)
    glVertex3f(size, 0, -size)
    glEnd

    glColor4ub(255, 255, 255, 255) # remet le blanc : ObjModel module sa texture avec la couleur courante

end

#look_at(eye, center, up_vector = [0, 1, 0]) ⇒ Object

À appeler dans le bloc de render_3d, avant de dessiner, pour positionner la caméra : eye = position, center = point regardé.



17
18
19
# File 'lib/bestguigui_lab/render_3d.rb', line 17

def look_at(eye, center, up_vector = [0, 1, 0])
    gluLookAt(*eye, *center, *up_vector)
end

#render_3d(window, z_order: 0, fov: 60.0, clip: [0.1, 1000.0], &block) ⇒ Object

fov : angle de champ de vision vertical, en degrés. clip : [proche, lointain] — tout ce qui est en dehors n'est pas dessiné.



10
11
12
13
# File 'lib/bestguigui_lab/render_3d.rb', line 10

def render_3d(window, z_order: 0, fov: 60.0, clip: [0.1, 1000.0], &block)
    w, h = window.fullscreen? ? [Gosu.screen_width, Gosu.screen_height] : [window.width, window.height]
    Gosu.gl(z_order) { render_3d_frame(w, h, fov, clip, &block) }
end