Class: Quake::Renderer::GLBrushModel
- Inherits:
-
Object
- Object
- Quake::Renderer::GLBrushModel
- Defined in:
- lib/quake/renderer/gl_brush_model.rb
Overview
Renders BSP sub-models (brush entities like doors, buttons, platforms). Each brush entity references a model in the BSP models array (models, [2], etc.) and has a position/angle from its entity definition.
Instance Method Summary collapse
-
#initialize(level, texture_manager, lightmap) ⇒ GLBrushModel
constructor
A new instance of GLBrushModel.
-
#render(entities) ⇒ Object
Render all brush entities at their current positions.
Constructor Details
#initialize(level, texture_manager, lightmap) ⇒ GLBrushModel
Returns a new instance of GLBrushModel.
11 12 13 14 15 16 17 18 19 |
# File 'lib/quake/renderer/gl_brush_model.rb', line 11 def initialize(level, texture_manager, lightmap) @level = level @texture_manager = texture_manager @lightmap = lightmap # Precompute surfaces for each sub-model (model index 1+) @model_surfaces = {} precompute_all_submodels end |
Instance Method Details
#render(entities) ⇒ Object
Render all brush entities at their current positions. entities: array of Entity objects that have model_index set
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/quake/renderer/gl_brush_model.rb', line 23 def render(entities) GL.Enable(GL::TEXTURE_2D) GL.Color3f(1.0, 1.0, 1.0) entities.each do |ent| next unless ent.brush_entity? surfaces = @model_surfaces[ent.model_index] next unless surfaces GL.PushMatrix GL.Translatef(ent.position.x, ent.position.y, ent.position.z) if ent.angle != 0.0 && ent.angles != Math::Vec3::ORIGIN GL.Rotatef(ent.angles.x, 1.0, 0.0, 0.0) GL.Rotatef(ent.angles.y, 0.0, 1.0, 0.0) GL.Rotatef(ent.angles.z, 0.0, 0.0, 1.0) end render_model_surfaces(surfaces) GL.PopMatrix end end |