X-Git-Url: http://nitlanguage.org diff --git a/lib/gamnit/depth/more_materials.nit b/lib/gamnit/depth/more_materials.nit index 52191c3..ec4a3cd 100644 --- a/lib/gamnit/depth/more_materials.nit +++ b/lib/gamnit/depth/more_materials.nit @@ -18,15 +18,17 @@ module more_materials intrude import depth_core intrude import flat -# Simple material with static colors used for debugging or display abstract objects -class SmoothMaterial - super Material - +redef class Material # Get the default blueish material - init default do init( + new do return new SmoothMaterial( [0.0, 0.0, 0.3, 1.0], [0.0, 0.0, 0.6, 1.0], [1.0, 1.0, 1.0, 1.0]) +end + +# Simple material with static colors +class SmoothMaterial + super Material # Ambient color, always visible var ambient_color: Array[Float] is writable @@ -47,7 +49,7 @@ class SmoothMaterial # Actor specs program.translation.uniform(actor.center.x, actor.center.y, actor.center.z, 0.0) program.scale.uniform actor.scale - program.rotation.uniform new Matrix.rotation(actor.rotation, 0.0, 1.0, 0.0) + program.rotation.uniform new Matrix.gamnit_euler_rotation(actor.pitch, actor.yaw, actor.roll) # From mesh program.coord.array_enabled = true @@ -75,9 +77,9 @@ class SmoothMaterial # Execute draw if mesh.indices.is_empty then - glDrawArrays(gl_TRIANGLES, 0, mesh.vertices.length/3) + glDrawArrays(mesh.draw_mode, 0, mesh.vertices.length/3) else - glDrawElements(gl_TRIANGLES, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) + glDrawElements(mesh.draw_mode, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) end end end @@ -144,7 +146,7 @@ class TexturedMaterial # If using a texture, set `texture_coords` program.tex_coord.array_enabled = sample_used_texture != null if sample_used_texture != null then - if sample_used_texture isa GamnitRootTexture then + if sample_used_texture isa RootTexture then # Coordinates are directly valid program.tex_coord.array(mesh.texture_coords, 2) else @@ -154,11 +156,13 @@ class TexturedMaterial var xd = sample_used_texture.offset_right - xa var ya = sample_used_texture.offset_top var yd = sample_used_texture.offset_bottom - ya + xd *= 0.999 + yd *= 0.999 var tex_coords = new Array[Float].with_capacity(mesh.texture_coords.length) for i in [0..mesh.texture_coords.length/2[ do tex_coords[i*2] = xa + xd * mesh.texture_coords[i*2] - tex_coords[i*2+1] = ya + yd * mesh.texture_coords[i*2+1] + tex_coords[i*2+1] = 1.0 - (ya + yd * mesh.texture_coords[i*2+1]) end program.tex_coord.array(tex_coords, 2) @@ -167,7 +171,8 @@ class TexturedMaterial program.coord.array_enabled = true program.coord.array(mesh.vertices, 3) - program.rotation.uniform new Matrix.rotation(actor.rotation, 0.0, 1.0, 0.0) + + program.rotation.uniform new Matrix.gamnit_euler_rotation(actor.pitch, actor.yaw, actor.roll) program.ambient_color.uniform(ambient_color[0], ambient_color[1], ambient_color[2], ambient_color[3]*actor.alpha) program.diffuse_color.uniform(diffuse_color[0], diffuse_color[1], diffuse_color[2], diffuse_color[3]*actor.alpha) @@ -180,9 +185,9 @@ class TexturedMaterial program.camera.uniform(app.world_camera.position.x, app.world_camera.position.y, app.world_camera.position.z) if mesh.indices.is_empty then - glDrawArrays(gl_TRIANGLES, 0, mesh.vertices.length/3) + glDrawArrays(mesh.draw_mode, 0, mesh.vertices.length/3) else - glDrawElements(gl_TRIANGLES, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) + glDrawElements(mesh.draw_mode, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) end end end @@ -212,15 +217,16 @@ class NormalsMaterial program.coord.array_enabled = true program.coord.array(mesh.vertices, 3) - program.rotation.uniform new Matrix.rotation(actor.rotation, 0.0, 1.0, 0.0) + + program.rotation.uniform new Matrix.gamnit_euler_rotation(actor.pitch, actor.yaw, actor.roll) program.normal.array_enabled = true program.normal.array(mesh.normals, 3) if mesh.indices.is_empty then - glDrawArrays(gl_TRIANGLES, 0, mesh.vertices.length/3) + glDrawArrays(mesh.draw_mode, 0, mesh.vertices.length/3) else - glDrawElements(gl_TRIANGLES, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) + glDrawElements(mesh.draw_mode, mesh.indices.length, gl_UNSIGNED_SHORT, mesh.indices_c.native_array) end end end @@ -317,7 +323,7 @@ class LambertProgram float lambert = max(dot(light_dir, v_normal), 0.0); if (use_map_ambient) - gl_FragColor = ambient_color + texture2D(map_ambient, v_tex_coord); + gl_FragColor = ambient_color * texture2D(map_ambient, v_tex_coord); else gl_FragColor = ambient_color; @@ -325,6 +331,8 @@ class LambertProgram gl_FragColor += lambert * diffuse_color * texture2D(map_diffuse, v_tex_coord); else gl_FragColor += lambert * diffuse_color; + + if (gl_FragColor.a < 0.01) discard; } """ @ glsl_fragment_shader