Restructured 'objects' folder into a meaningful 'assets' folder, added 'war_factory' model, refactored GameObject#bind_model and ModelLoader to understand the restructuring.

This commit is contained in:
2019-02-17 10:50:08 -06:00
parent 3f7c5e992d
commit 9f6f330202
45 changed files with 3899 additions and 2442 deletions

View File

@@ -0,0 +1,2 @@
name: "biped"
model: "biped.obj"

View File

@@ -1,8 +1,8 @@
# Blender MTL File: 'biped.blend'
# Blender MTL File: 'None'
# Material Count: 5
newmtl eye
Ns 96.078431
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
@@ -12,7 +12,7 @@ d 1.000000
illum 2
newmtl pants
Ns 96.078431
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.068996 0.139143 0.640000
Ks 0.500000 0.500000 0.500000
@@ -22,7 +22,7 @@ d 1.000000
illum 2
newmtl shirt
Ns 96.078431
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.006647 0.280444 0.000000
Ks 0.500000 0.500000 0.500000
@@ -32,7 +32,7 @@ d 1.000000
illum 2
newmtl shoe
Ns 96.078431
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.134359 0.134359 0.134359
Ks 0.500000 0.500000 0.500000
@@ -42,7 +42,7 @@ d 1.000000
illum 2
newmtl skin
Ns 96.078431
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.110067 0.069785 0.027733
Ks 0.500000 0.500000 0.500000

File diff suppressed because it is too large Load Diff

View File

@@ -10,4 +10,4 @@ Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd /home/cyberarm/Code/i-mic-fps/blends/randomish_terrain.png
map_Kd assets/base/randomish_terrain/textures/randomish_terrain_ao.png

View File

@@ -0,0 +1,3 @@
---
name: "randomish_terrain"
model: "randomish_terrain.obj"

View File

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

View File

@@ -10,4 +10,4 @@ Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd objects/skydome_next.png
map_Kd assets/base/skydome/textures/skydome_next.png

View File

@@ -0,0 +1,2 @@
name: "skydome"
model: "skydome.obj"

View File

Before

Width:  |  Height:  |  Size: 379 KiB

After

Width:  |  Height:  |  Size: 379 KiB

View File

Before

Width:  |  Height:  |  Size: 5.2 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB

View File

View File

@@ -1,8 +1,8 @@
# Blender MTL File: 'tree.blend'
# Blender MTL File: 'None'
# Material Count: 2
newmtl Material
Ns 96.078431
newmtl Material.002
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.181267 0.106319 0.092156
Ks 0.500000 0.500000 0.500000
@@ -11,8 +11,8 @@ Ni 1.000000
d 1.000000
illum 2
newmtl leaf
Ns 96.078431
newmtl leaf.001
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.127997 0.491692 0.000000
Ks 0.500000 0.500000 0.500000

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
name: "tree"
model: "tree.obj"

View File

@@ -0,0 +1,42 @@
# Blender MTL File: 'war_factory.blend'
# Material Count: 4
newmtl Material
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.527055 0.242208
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl door
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.000000 0.006044 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl garage
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.358382 0.358382 0.358382
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl pipes
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.336018 0.296986 0.261323
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
name: "war_factory"
model: "war_factory.obj"

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
blends/war_factory.blend Normal file

Binary file not shown.

BIN
blends/war_factory.blend1 Normal file

Binary file not shown.

View File

@@ -1,4 +1,5 @@
require "fiddle"
require "yaml"
require "opengl"
require "glu"
@@ -94,7 +95,7 @@ require_relative "lib/wavefront/model"
require_relative "lib/window"
MODEL_METER_SCALE = 0.001 # Objects exported from blender using the millimeter object scale will be close to 1 GL unit
MODEL_METER_SCALE = 1.0 # Objects exported from blender using the millimeter object scale will be close to 1 GL unit
if ARGV.join.include?("--profile")

View File

@@ -1,4 +1,8 @@
class IMICFPS
def self.assets_path
File.expand_path("./../../assets", __FILE__)
end
module CommonMethods
def window; $window; end

View File

@@ -16,7 +16,7 @@ class IMICFPS
object.debug_color = Color.new(1.0,0.0,0.0)
b.debug_color = Color.new(1.0,0.0,0.0)
@game_state.game_objects.delete(object) unless object.is_a?(Player)
# @game_state.game_objects.delete(object) unless object.is_a?(Player)
puts "#{object} is intersecting #{b}" if object.is_a?(Player)
else
object.debug_color = Color.new(0,1,0)

View File

@@ -43,7 +43,9 @@ class IMICFPS
return self
end
def bind_model(model)
def bind_model(package, name)
model = ModelLoader.new(manifest_file: IMICFPS.assets_path + "/#{package}/#{name}/#{name}.yaml", game_object: @dummy_game_object)
raise "model isn't a model!" unless model.is_a?(ModelLoader)
@bound_model = model
@bound_model.model.game_object = self

View File

@@ -7,7 +7,7 @@ class IMICFPS
attr_reader :name, :bound_model, :first_person_view
def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/biped.obj", game_object: self))
bind_model("base", "biped")
@speed = 2.5 # meter's per second
@running_speed = 6.8 # meter's per second
@old_speed = @speed

View File

@@ -1,7 +1,7 @@
class IMICFPS
class Skydome < GameObject
def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/skydome.obj", game_object: self))
bind_model("base", "skydome")
end
def draw

View File

@@ -1,7 +1,7 @@
class IMICFPS
class Terrain < GameObject
def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/randomish_terrain.obj", game_object: self))
bind_model("base", "randomish_terrain")
# bind_model(ModelLoader.new(type: :obj, file_path: "/home/cyberarm/Documents/blends/untitled.obj", game_object: self))
self.scale = 1
@nearest_vertex_lookup = {}

View File

@@ -1,7 +1,7 @@
class IMICFPS
class TestObject < GameObject
def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/sponza.obj", game_object: self))
bind_model("base", "war_factory")
end
end
end

View File

@@ -1,13 +1,15 @@
class IMICFPS
class Tree < GameObject
def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/tree.obj", game_object: self))
bind_model("base", "tree")
vert = @terrain.find_nearest_vertex(self, 4.5)
if vert
self.x = vert.x
self.y = vert.y
self.z = vert.z
end
# @y_rotation += rand(1..100)
end
# def update

View File

@@ -8,10 +8,13 @@ class IMICFPS
attr_reader :model, :name, :debug_color
def initialize(type:, file_path:, game_object: nil)
@type = type
@file_path = file_path
@name = file_path.split("/").last.split(".").first
def initialize(manifest_file:, game_object: nil)
@manifest = YAML.load(File.read(manifest_file))
pp @manifest
@file_path = File.expand_path("./../model/", manifest_file) + "/#{@manifest["model"]}"
@name = @manifest["name"]
@type = File.basename(@file_path).split(".").last.to_sym
@debug_color = Color.new(0.0, 1.0, 0.0)
@model = nil

View File

@@ -14,6 +14,8 @@ class IMICFPS
Tree.new(x: rand(@terrain.width)-(@terrain.width/2.0), z: rand(@terrain.depth)-(@terrain.depth/2.0), terrain: @terrain, game_state: self)
end
TestObject.new(terrain: @terrain, game_state: self, scale: 1.0)
@player = Player.new(x: 1, y: 0, z: -1, terrain: @terrain, game_state: self)
@camera = Camera.new(x: 0, y: -2, z: 1)
@camera.attach_to(@player)

View File

@@ -10,10 +10,10 @@ class IMICFPS
@dummy_game_object = nil
@assets = []
@asset_index = 0
add_asset(:obj, "objects/randomish_terrain.obj")
add_asset(:obj, "objects/skydome.obj")
add_asset(:obj, "objects/tree.obj")
add_asset(:obj, "objects/biped.obj")
add_asset(:model, "base", "randomish_terrain")
add_asset(:model, "base", "skydome")
add_asset(:model, "base", "tree")
add_asset(:model, "base", "biped")
# Currently broken
# Shader.new(name: "lighting", vertex_file: "shaders/vertex/lighting.glsl", fragment_file: "shaders/fragment/lighting.glsl")
@@ -46,7 +46,13 @@ class IMICFPS
@cycled = false
hash = @assets[@asset_index]
ModelLoader.new(type: hash[:type], file_path: hash[:path], game_object: @dummy_game_object)
case hash[:type]
when :model
ModelLoader.new(manifest_file: IMICFPS.assets_path + "/#{hash[:package]}/#{hash[:name]}/#{hash[:name]}.yaml", game_object: @dummy_game_object)
# when :shader
else
warn "Unknown asset: #{hash}"
end
@asset_index+=1
end
@@ -60,14 +66,14 @@ class IMICFPS
@lock = true
end
else
@state.text = "Loading #{@assets[@asset_index][:path].split('/').last}..."
@state.text = "Loading #{@assets[@asset_index][:name].split('/').last}..."
@state.x = (window.width/2)-(@state.width/2)
@cycled = true
end
end
def add_asset(type, path)
@assets << {type: type, path: path}
def add_asset(type, package, name)
@assets << {type: type, package: package, name: name}
end
def progressbar(x = window.width/4, y = window.height - 104)

View File

@@ -14,7 +14,7 @@ class IMICFPS
end
def set_texture(texture_path)
# puts "#{name} texture #{texture_path}"
puts "#{name} texture #{texture_path}"
@texture = Gosu::Image.new(texture_path, retro: false)
array_of_pixels = @texture.to_blob

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Material.001
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd objects/skydome.png

View File

@@ -1,52 +0,0 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib cube.mtl
o Cube_Cube.001
v -999.999939 999.999878 1000.000000
v -999.999939 -999.999878 -1000.000000
v -999.999939 -1000.000000 999.999878
v -999.999939 1000.000000 -999.999878
v 999.999939 -999.999878 -1000.000000
v 999.999939 1000.000000 -999.999878
v 999.999939 -1000.000000 999.999878
v 999.999939 999.999878 1000.000000
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000
usemtl Material.001
s 1
f 1/1/1 2/2/1 3/3/1
f 4/4/2 5/5/2 2/6/2
f 6/7/3 7/8/3 5/9/3
f 8/10/4 3/11/4 7/12/4
f 5/13/5 3/11/5 2/6/5
f 4/4/6 8/14/6 6/15/6
f 1/1/1 4/16/1 2/2/1
f 4/4/2 6/17/2 5/5/2
f 6/7/3 8/18/3 7/8/3
f 8/10/4 1/19/4 3/11/4
f 5/13/5 7/20/5 3/11/5
f 4/4/6 1/19/6 8/14/6

View File

@@ -1,11 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
map_Kd objects/skydome.png

View File

@@ -1,17 +0,0 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib plane.mtl
o Plane
v -999.999939 0.000000 999.999939
v 999.999939 0.000000 999.999939
v -999.999939 0.000000 -999.999939
v 999.999939 0.000000 -999.999939
vt 0.395761 0.622989
vt 0.116739 0.902011
vt 0.116739 0.622989
vt 0.395761 0.902011
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 2/1/1 3/2/1 1/3/1
f 2/1/1 4/4/1 3/2/1

File diff suppressed because it is too large Load Diff