diff --git a/lib/renderer/opengl_renderer.rb b/lib/renderer/opengl_renderer.rb index f2c4b83..351fa6e 100644 --- a/lib/renderer/opengl_renderer.rb +++ b/lib/renderer/opengl_renderer.rb @@ -15,12 +15,13 @@ class IMICFPS handleGlError - if Shader.available?("default") + if Shader.available?("ddefault") Shader.use("default") do |shader| glUniform3f(shader.attribute_location("worldPosition"), object.position.x, object.position.y, object.position.z) handleGlError - draw_model(object.model) + draw_mesh(object.model) + # draw_model(object.model) object.draw end else diff --git a/lib/states/game_states/game.rb b/lib/states/game_states/game.rb index bea5025..738c186 100644 --- a/lib/states/game_states/game.rb +++ b/lib/states/game_states/game.rb @@ -24,7 +24,7 @@ class IMICFPS @crosshair_color = Gosu::Color.rgb(255,127,0) # @font = Gosu::Font.new(18, name: "DejaVu Sans") - @text = Text.new("Pending...", x: 10, y: 10, z: 1, size: 18, font: "DejaVu Sans") + @text = Text.new("Pending...", x: 10, y: 10, z: 1, size: 18, font: "DejaVu Sans", shadow_color: Gosu::Color::BLACK) Light.new(x: 3, y: -6, z: 6, game_state: self) Light.new(x: 0, y: 100, z: 0, diffuse: Color.new(1.0, 0.5, 0.1), game_state: self) diff --git a/lib/ui/command.rb b/lib/ui/command.rb index 7126ad5..8daca81 100644 --- a/lib/ui/command.rb +++ b/lib/ui/command.rb @@ -111,7 +111,7 @@ class IMICFPS if list.size == 1 console.text_input.text = "#{split.first} #{split[1]} #{list.first} " else - console.stdin("Available options: #{list.map { |value| Commands::Style.highlight(value) }.join(",")}") + console.stdin("Available options: #{list.map { |value| Commands::Style.highlight(value) }.join(",")}") if list.size > 0 end end end diff --git a/lib/wavefront/model.rb b/lib/wavefront/model.rb index d4b9dd2..e052893 100644 --- a/lib/wavefront/model.rb +++ b/lib/wavefront/model.rb @@ -85,7 +85,6 @@ class IMICFPS def populate_vertex_buffer @vertices_buffer_size = 0 @vertices_buffer_data = [] - model_has_texture = @materials.any? { |id, mat| mat.texture_id != nil } verts = [] colors = [] @@ -98,7 +97,7 @@ class IMICFPS colors << face.colors.map { |vert| [vert.x, vert.y, vert.z] } norms << face.normals.map { |vert| [vert.x, vert.y, vert.z, vert.weight] } - if model_has_texture + if @has_texture uvs << face.uvs.map { |vert| [vert.x, vert.y, vert.z] } tex_ids << face.material.texture_id ? face.material.texture_id.to_f : -1.0 end @@ -108,16 +107,22 @@ class IMICFPS @vertices_buffer_data << vert @vertices_buffer_data << colors[i] @vertices_buffer_data << norms[i] - @vertices_buffer_data << uvs[i] if uvs.size > 0 - @vertices_buffer_data << tex_ids[i] if tex_ids.size > 0 + + # if @has_texture + # @vertices_buffer_data << uvs[i] if uvs.size > 0 + # @vertices_buffer_data << tex_ids[i] if tex_ids.size > 0 + # end end data_size = 0 data_size += Fiddle::SIZEOF_FLOAT * 3 * verts.size data_size += Fiddle::SIZEOF_FLOAT * 3 * colors.size data_size += Fiddle::SIZEOF_FLOAT * 4 * norms.size - data_size += Fiddle::SIZEOF_FLOAT * 3 * uvs.size - data_size += Fiddle::SIZEOF_FLOAT * 1 * tex_ids.size + + if @has_texture + data_size += Fiddle::SIZEOF_FLOAT * 3 * uvs.size + data_size += Fiddle::SIZEOF_FLOAT * 1 * tex_ids.size + end @vertices_buffer_size = data_size @@ -140,21 +145,34 @@ class IMICFPS program = Shader.get("default").program + stride = 0 + position_stride = Fiddle::SIZEOF_FLOAT * 3 + color_stride = Fiddle::SIZEOF_FLOAT * 3 + normal_stride = Fiddle::SIZEOF_FLOAT * 4 + uv_stride = Fiddle::SIZEOF_FLOAT * 3 + texture_id_stride = Fiddle::SIZEOF_FLOAT + + if @has_texture + stride = position_stride + color_stride + normal_stride + uv_stride + texture_id_stride + else + stride = position_stride + color_stride + normal_stride + end + # index, size, type, normalized, stride, pointer # vertices (positions) - glVertexAttribPointer(glGetAttribLocation(program, "inPosition"), 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * 3, nil) + glVertexAttribPointer(glGetAttribLocation(program, "inPosition"), 3, GL_FLOAT, GL_FALSE, stride, nil) handleGlError # colors - glVertexAttribPointer(glGetAttribLocation(program, "inColor"), 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inColor"), 3, GL_FLOAT, GL_FALSE, stride + position_stride, nil) handleGlError # normals - glVertexAttribPointer(glGetAttribLocation(program, "inNormal"), 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (4 + 3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inNormal"), 4, GL_FLOAT, GL_FALSE, stride + position_stride + color_stride, nil) handleGlError # uvs - glVertexAttribPointer(glGetAttribLocation(program, "inUV"), 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inUV"), 3, GL_FLOAT, GL_FALSE, stride + position_stride + color_stride + normal_stride, nil) handleGlError # texture ids - glVertexAttribPointer(glGetAttribLocation(program, "inTextureID"), 1, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT + (Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3)), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inTextureID"), 1, GL_FLOAT, GL_FALSE, stride + position_stride + color_stride + normal_stride + uv_stride, nil) handleGlError glDisableVertexAttribArray(4)