Sha256: 9cf8ffef159d9c8a6b4c837795b13778208a8f47e1eea225d9e7393a9e1b07a2

Contents?: true

Size: 1.31 KB

Versions: 6

Compression:

Stored size: 1.31 KB

Contents

module CyberarmEngine
  class OrthographicCamera
    attr_accessor :position, :orientation, :zoom, :left, :right, :bottom, :top,
                  :min_view_distance, :max_view_distance

    def initialize(
      position:, right:, top:, orientation: Vector.new(0, 0, 0),
      zoom: 1, left: 0, bottom: 0,
      min_view_distance: 0.1, max_view_distance: 200.0
    )
      @position = position
      @orientation = orientation

      @zoom = zoom

      @left = left
      @right = right
      @bottom = bottom
      @top = top

      @min_view_distance = min_view_distance
      @max_view_distance = max_view_distance
    end

    # Immediate mode renderering fallback
    def draw
      glMatrixMode(GL_PROJECTION)
      glLoadIdentity
      glOrtho(@left, @right, @bottom, @top, @min_view_distance, @max_view_distance)
      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
      glRotatef(@orientation.x, 1, 0, 0)
      glRotatef(@orientation.y, 0, 1, 0)
      glTranslatef(-@position.x, -@position.y, -@position.z)
      glMatrixMode(GL_MODELVIEW)
      glLoadIdentity
    end

    def projection_matrix
      Transform.orthographic(@left, @right, @bottom, @top, @min_view_distance, @max_view_distance)
    end

    def view_matrix
      Transform.translate_3d(@position * -1) * Transform.rotate_3d(@orientation)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cyberarm_engine-0.19.0 lib/cyberarm_engine/opengl/orthographic_camera.rb
cyberarm_engine-0.18.0 lib/cyberarm_engine/opengl/orthographic_camera.rb
cyberarm_engine-0.17.1 lib/cyberarm_engine/opengl/orthographic_camera.rb
cyberarm_engine-0.17.0 lib/cyberarm_engine/opengl/orthographic_camera.rb
cyberarm_engine-0.16.0 lib/cyberarm_engine/opengl/orthographic_camera.rb
cyberarm_engine-0.15.0 lib/cyberarm_engine/opengl/orthographic_camera.rb