class CyberarmEngine::Model::ModelObject

Attributes

bounding_box[R]
debug_color[R]
faces[RW]
id[R]
materials[R]
name[R]
normals[R]
scale[RW]
uvs[R]
vertices[R]

Public Class Methods

new(id, name) click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 7
def initialize(id, name)
  @id = id
  @name = name
  @vertices = []
  @uvs      = []
  @normals  = []
  @faces    = []
  @materials = []
  @bounding_box = BoundingBox.new
  @debug_color = Color.new(1.0, 1.0, 1.0)

  @scale = 1.0

  # Faces array packs everything:
  #   vertex   = index[0]
  #   uv       = index[1]
  #   normal   = index[2]
  #   material = index[3]
end

Public Instance Methods

flattened_materials() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 108
def flattened_materials
  unless @materials_list
    list = []
    @faces.each do |face|
      material = face.material
      next unless material

      face.vertices.each do # Add material to each vertex
        list << material.diffuse.red
        list << material.diffuse.green
        list << material.diffuse.blue
        # list << material.alpha
      end
    end

    @materials_list_size = list.size
    @materials_list = list.pack("f*")
  end

  @materials_list
end
flattened_normals() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 88
def flattened_normals
  unless @normals_list
    list = []
    @faces.each do |face|
      face.normals.each do |n|
        next unless n

        list << n.x
        list << n.y
        list << n.z
      end
    end

    @normals_list_size = list.size
    @normals_list = list.pack("f*")
  end

  @normals_list
end
flattened_uvs() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 68
def flattened_uvs
  unless @uvs_list
    list = []
    @faces.each do |face|
      face.uvs.each do |v|
        next unless v

        list << v.x
        list << v.y
        list << v.z
      end
    end

    @uvs_list_size = list.size
    @uvs_list = list.pack("f*")
  end

  @uvs_list
end
flattened_vertices() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 41
def flattened_vertices
  unless @vertices_list
    @debug_color = @faces.first.material.diffuse

    list = []
    @faces.each do |face|
      face.vertices.each do |v|
        next unless v

        list << v.x * @scale
        list << v.y * @scale
        list << v.z * @scale
        list << v.weight
      end
    end

    @vertices_list_size = list.size
    @vertices_list = list.pack("f*")
  end

  @vertices_list
end
flattened_vertices_size() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 64
def flattened_vertices_size
  @vertices_list_size
end
has_texture?() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 27
def has_texture?
  @materials.find { |mat| mat.texture_id } ? true : false
end
reflatten() click to toggle source
# File lib/cyberarm_engine/model/model_object.rb, line 31
def reflatten
  @vertices_list = nil
  @uvs_list = nil
  @normals_list = nil

  flattened_vertices
  flattened_uvs
  flattened_normals
end