mittsu 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +18 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +1158 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +2 -1
  7. data/LICENSE.txt +1 -1
  8. data/README.md +173 -7
  9. data/circle.yml +20 -0
  10. data/install-glfw-3.1.2.sh +14 -0
  11. data/lib/mittsu.rb +0 -2
  12. data/lib/mittsu/extras/image_utils.rb +59 -55
  13. data/lib/mittsu/renderers/glfw_window.rb +17 -2
  14. data/lib/mittsu/renderers/opengl_renderer.rb +1 -1
  15. data/lib/mittsu/renderers/shaders/shader_lib.rb +4 -4
  16. data/lib/mittsu/version.rb +1 -1
  17. data/mittsu.gemspec +11 -5
  18. metadata +53 -71
  19. data/.travis.yml +0 -3
  20. data/examples/01_-_Default1noCulling.png +0 -0
  21. data/examples/01_scene_example.rb +0 -14
  22. data/examples/02_box_mesh_example.rb +0 -30
  23. data/examples/02_sphere_mesh_example.rb +0 -30
  24. data/examples/03_complex_object_example.rb +0 -52
  25. data/examples/04_ambient_light_example.rb +0 -33
  26. data/examples/04_dir_light_example.rb +0 -36
  27. data/examples/04_hemi_light_example.rb +0 -30
  28. data/examples/04_point_light_example.rb +0 -50
  29. data/examples/04_spot_light_example.rb +0 -44
  30. data/examples/05_earth_example.rb +0 -42
  31. data/examples/05_earth_moon_example.rb +0 -46
  32. data/examples/05_texture_example.rb +0 -32
  33. data/examples/06_cube_texture_example.rb +0 -36
  34. data/examples/06_skybox_example.rb +0 -60
  35. data/examples/07_earth_normal_example.rb +0 -36
  36. data/examples/08_shadow_example.rb +0 -87
  37. data/examples/09_line_example.rb +0 -52
  38. data/examples/10_obj_loader_example.rb +0 -68
  39. data/examples/11_character_input_example.rb +0 -18
  40. data/examples/11_continuous_keyboard_input_example.rb +0 -35
  41. data/examples/11_keyboard_input_example.rb +0 -43
  42. data/examples/12_mouse_click_example.rb +0 -38
  43. data/examples/12_mouse_motion_example.rb +0 -35
  44. data/examples/12_mouse_scroll_example.rb +0 -36
  45. data/examples/12_orbit_zoom_example.rb +0 -68
  46. data/examples/13_joystick_example.rb +0 -80
  47. data/examples/cubemap/tron_bk.png +0 -0
  48. data/examples/cubemap/tron_dn.png +0 -0
  49. data/examples/cubemap/tron_ft.png +0 -0
  50. data/examples/cubemap/tron_lf.png +0 -0
  51. data/examples/cubemap/tron_rt.png +0 -0
  52. data/examples/cubemap/tron_up.png +0 -0
  53. data/examples/earth.png +0 -0
  54. data/examples/earth_normal.png +0 -0
  55. data/examples/example_helper.rb +0 -2
  56. data/examples/male-02-1noCulling.png +0 -0
  57. data/examples/male02.mtl +0 -54
  58. data/examples/male02.obj +0 -13888
  59. data/examples/moon.png +0 -0
  60. data/examples/orig_02_-_Defaul1noCulling.png +0 -0
  61. data/examples/texture.png +0 -0
@@ -1,87 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '08 Shadow Example'
11
- renderer.shadow_map_enabled = true
12
- renderer.shadow_map_type = Mittsu::PCFSoftShadowMap
13
-
14
- floor = Mittsu::Mesh.new(
15
- Mittsu::BoxGeometry.new(100.0, 1.0, 100.0),
16
- Mittsu::MeshPhongMaterial.new(color: 0x00ff00)
17
- )
18
- floor.position.y = -1.0
19
- floor.receive_shadow = true
20
- scene.add(floor)
21
-
22
- NB = 15
23
- NR = 5
24
- balls = NB.times.map do |index|
25
- NR.times.map do |r|
26
- ring = (3 + r)
27
- i = r * 0.1 + (index.to_f / NB.to_f) * Math::PI * 2
28
- Mittsu::Mesh.new(
29
- Mittsu::SphereGeometry.new(0.5, 16, 16),
30
- Mittsu::MeshLambertMaterial.new(color: r.even? ? 0x00ffff : 0xff00ff)
31
- ).tap do |b|
32
- b.cast_shadow = true
33
- b.receive_shadow = true
34
- b.position.z = Math.cos(i) * ring
35
- b.position.x = Math.sin(i) * ring
36
- scene.add(b)
37
- end
38
- end
39
- end.flatten
40
-
41
- ball = Mittsu::Mesh.new(
42
- Mittsu::SphereGeometry.new(1.0, 32, 32),
43
- Mittsu::MeshLambertMaterial.new(color: 0xffffff)
44
- )
45
- ball.cast_shadow = true
46
- ball.receive_shadow = true
47
- scene.add(ball)
48
-
49
- light = Mittsu::SpotLight.new(0xffffff, 1.0)
50
- light.position.set(20.0, 30.0, 0.0)
51
-
52
- light.cast_shadow = true
53
- light.shadow_darkness = 0.5
54
-
55
- light.shadow_map_width = 1024
56
- light.shadow_map_height = 1024
57
-
58
- light.shadow_camera_near = 1.0
59
- light.shadow_camera_far = 100.0
60
- light.shadow_camera_fov = 60.0
61
-
62
- light.shadow_camera_visible = true
63
- scene.add(light)
64
-
65
- camera.position.z = 10.0
66
- camera.position.y = 10.0
67
- camera.look_at(floor.position)
68
-
69
- renderer.window.on_resize do |width, height|
70
- renderer.set_viewport(0, 0, width, height)
71
- camera.aspect = width.to_f / height.to_f
72
- camera.update_projection_matrix
73
- end
74
-
75
- x = 0
76
- renderer.window.run do
77
- # break if x > 0
78
- x += 1
79
- light.position.x = Math::sin(x * 0.01) * 20.0
80
- light.position.z = Math::cos(x * 0.01) * 20.0
81
-
82
- balls.each_with_index do |b, i|
83
- b.position.y = (1.0 + Math::sin(x * 0.05 + i)) * 2.0
84
- end
85
-
86
- renderer.render(scene, camera)
87
- end
@@ -1,52 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '09 Line Example'
11
-
12
- ball = Mittsu::Mesh.new(
13
- Mittsu::SphereGeometry.new(0.1),
14
- Mittsu::MeshBasicMaterial.new(color: 0xff00ff)
15
- )
16
- scene.add(ball)
17
-
18
- material = Mittsu::LineBasicMaterial.new(color: 0xff00ff)
19
-
20
- geometry = Mittsu::Geometry.new()
21
- NP = 10000
22
- MD = 10.0
23
- NR = 200
24
- NP.times do |i|
25
- d = (i.to_f / NP) * MD
26
- r = (i.to_f / NP) * Math::PI * NR
27
- x = Math.sin(r) * d
28
- y = Math.cos(r) * d
29
- geometry.vertices.push(Mittsu::Vector3.new(x, y, 0.0))
30
- end
31
-
32
- line = Mittsu::Line.new(geometry, material)
33
- scene.add(line)
34
-
35
- camera.position.z = 5.0
36
- camera.position.y = 0.0
37
- camera.look_at(line.position)
38
-
39
- renderer.window.on_resize do |width, height|
40
- renderer.set_viewport(0, 0, width, height)
41
- camera.aspect = width.to_f / height.to_f
42
- camera.update_projection_matrix
43
- end
44
-
45
- x = 0
46
- renderer.window.run do
47
- # break if x > 0
48
- x += 1
49
- line.rotation.z = x * 0.1
50
-
51
- renderer.render(scene, camera)
52
- end
@@ -1,68 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '10 OBJ Loader Example'
11
- renderer.shadow_map_enabled = true
12
- renderer.shadow_map_type = Mittsu::PCFSoftShadowMap
13
-
14
- loader = Mittsu::OBJMTLLoader.new
15
-
16
- object = loader.load('male02.obj', 'male02.mtl')
17
-
18
- object.receive_shadow = true
19
- object.cast_shadow = true
20
-
21
- object.traverse do |child|
22
- child.receive_shadow = true
23
- child.cast_shadow = true
24
- end
25
-
26
- scene.add(object)
27
-
28
- scene.print_tree
29
-
30
- floor = Mittsu::Mesh.new(
31
- Mittsu::BoxGeometry.new(1000.0, 1.0, 1000.0),
32
- Mittsu::MeshPhongMaterial.new(color: 0xffffff)
33
- )
34
- floor.position.y = -1.0
35
- floor.receive_shadow = true
36
- scene.add(floor)
37
-
38
- scene.add Mittsu::AmbientLight.new(0xffffff)
39
-
40
- light = Mittsu::SpotLight.new(0xffffff, 1.0)
41
- light.position.set(300.0, 200.0, 0.0)
42
-
43
- light.cast_shadow = true
44
- light.shadow_darkness = 0.5
45
-
46
- light.shadow_map_width = 1024
47
- light.shadow_map_height = 1024
48
-
49
- light.shadow_camera_near = 1.0
50
- light.shadow_camera_far = 2000.0
51
- light.shadow_camera_fov = 60.0
52
-
53
- light.shadow_camera_visible = false
54
- scene.add(light)
55
-
56
- camera.position.z = 200.0
57
- camera.position.y = 100.0
58
-
59
- renderer.window.on_resize do |width, height|
60
- renderer.set_viewport(0, 0, width, height)
61
- camera.aspect = width.to_f / height.to_f
62
- camera.update_projection_matrix
63
- end
64
-
65
- renderer.window.run do
66
- object.rotation.y += 0.1
67
- renderer.render(scene, camera)
68
- end
@@ -1,18 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '11 Character Input Example'
11
-
12
- renderer.window.on_character_input do |char|
13
- print char
14
- end
15
-
16
- renderer.window.run do
17
- renderer.render(scene, camera)
18
- end
@@ -1,35 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '11 Continous Keyboard Example'
11
-
12
- geometry = Mittsu::BoxGeometry.new(1.0, 1.0, 1.0)
13
- material = Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
14
- cube = Mittsu::Mesh.new(geometry, material)
15
- scene.add(cube)
16
-
17
- camera.position.z = 5.0
18
-
19
- renderer.window.on_resize do |width, height|
20
- renderer.set_viewport(0, 0, width, height)
21
- camera.aspect = width.to_f / height.to_f
22
- camera.update_projection_matrix
23
- end
24
-
25
- renderer.window.run do
26
- cube.rotation.x += 0.1
27
- cube.rotation.y += 0.1
28
-
29
- cube.position.y += 0.1 if renderer.window.key_down?(GLFW_KEY_UP)
30
- cube.position.y -= 0.1 if renderer.window.key_down?(GLFW_KEY_DOWN)
31
- cube.position.x -= 0.1 if renderer.window.key_down?(GLFW_KEY_LEFT)
32
- cube.position.x += 0.1 if renderer.window.key_down?(GLFW_KEY_RIGHT)
33
-
34
- renderer.render(scene, camera)
35
- end
@@ -1,43 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '11 Keyboard Input Example'
11
-
12
- geometry = Mittsu::BoxGeometry.new(1.0, 1.0, 1.0)
13
- material = Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
14
- cube = Mittsu::Mesh.new(geometry, material)
15
- scene.add(cube)
16
-
17
- camera.position.z = 5.0
18
-
19
- renderer.window.on_resize do |width, height|
20
- renderer.set_viewport(0, 0, width, height)
21
- camera.aspect = width.to_f / height.to_f
22
- camera.update_projection_matrix
23
- end
24
-
25
- renderer.window.on_key_typed do |key|
26
- case key
27
- when GLFW_KEY_UP
28
- cube.position.y += 0.5
29
- when GLFW_KEY_DOWN
30
- cube.position.y -= 0.5
31
- when GLFW_KEY_LEFT
32
- cube.position.x -= 0.5
33
- when GLFW_KEY_RIGHT
34
- cube.position.x += 0.5
35
- end
36
- end
37
-
38
- renderer.window.run do
39
- cube.rotation.x += 0.1
40
- cube.rotation.y += 0.1
41
-
42
- renderer.render(scene, camera)
43
- end
@@ -1,38 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '12 Mouse Click Example'
11
-
12
- camera.position.z = 5.0
13
-
14
- cubes = []
15
- renderer.window.on_mouse_button_pressed do |button, position|
16
- geometry = Mittsu::BoxGeometry.new(1.0, 1.0, 1.0)
17
- material = Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
18
- cube = Mittsu::Mesh.new(geometry, material)
19
- cube.position.x = ((position.x/SCREEN_WIDTH)*2.0-1.0) * 5.0
20
- cube.position.y = ((position.y/SCREEN_HEIGHT)*-2.0+1.0) * 5.0
21
- scene.add(cube)
22
- cubes << cube
23
- end
24
-
25
- renderer.window.on_resize do |width, height|
26
- renderer.set_viewport(0, 0, width, height)
27
- camera.aspect = width.to_f / height.to_f
28
- camera.update_projection_matrix
29
- end
30
-
31
- renderer.window.run do
32
- cubes.each do |cube|
33
- cube.rotation.x += 0.1
34
- cube.rotation.y += 0.1
35
- end
36
-
37
- renderer.render(scene, camera)
38
- end
@@ -1,35 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '12 Mouse Motion Example'
11
-
12
- geometry = Mittsu::BoxGeometry.new(1.0, 1.0, 1.0)
13
- material = Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
14
- cube = Mittsu::Mesh.new(geometry, material)
15
- scene.add(cube)
16
-
17
- camera.position.z = 5.0
18
-
19
- renderer.window.on_mouse_move do |position|
20
- cube.position.x = ((position.x/SCREEN_WIDTH)*2.0-1.0) * 5.0
21
- cube.position.y = ((position.y/SCREEN_HEIGHT)*-2.0+1.0) * 5.0
22
- end
23
-
24
- renderer.window.on_resize do |width, height|
25
- renderer.set_viewport(0, 0, width, height)
26
- camera.aspect = width.to_f / height.to_f
27
- camera.update_projection_matrix
28
- end
29
-
30
- renderer.window.run do
31
- cube.rotation.x += 0.1
32
- cube.rotation.y += 0.1
33
-
34
- renderer.render(scene, camera)
35
- end
@@ -1,36 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '12 Mouse Scroll Example'
11
-
12
- geometry = Mittsu::BoxGeometry.new(1.0, 1.0, 1.0)
13
- material = Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
14
- cube = Mittsu::Mesh.new(geometry, material)
15
- scene.add(cube)
16
-
17
- camera.position.z = 5.0
18
-
19
- renderer.window.on_scroll do |offset|
20
- scroll_factor = (1.5 ** (offset.y * 0.1))
21
- camera.zoom *= scroll_factor
22
- camera.update_projection_matrix
23
- end
24
-
25
- renderer.window.on_resize do |width, height|
26
- renderer.set_viewport(0, 0, width, height)
27
- camera.aspect = width.to_f / height.to_f
28
- camera.update_projection_matrix
29
- end
30
-
31
- renderer.window.run do
32
- cube.rotation.x += 0.1
33
- cube.rotation.y += 0.1
34
-
35
- renderer.render(scene, camera)
36
- end
@@ -1,68 +0,0 @@
1
- require_relative './example_helper'
2
-
3
- SCREEN_WIDTH = 800
4
- SCREEN_HEIGHT = 600
5
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
6
-
7
- scene = Mittsu::Scene.new
8
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
9
-
10
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: '12 Orbit/Zoom Example'
11
-
12
- axis_object = Mittsu::Object3D.new
13
- axis_object.add(Mittsu::Mesh.new(
14
- Mittsu::BoxGeometry.new(1.0, 1.0, 1.0),
15
- Mittsu::MeshBasicMaterial.new(color: 0xffffff)))
16
- axis_object.add(Mittsu::Mesh.new(
17
- Mittsu::BoxGeometry.new(10.0, 0.1, 0.1),
18
- Mittsu::MeshBasicMaterial.new(color: 0xff0000)))
19
- axis_object.add(Mittsu::Mesh.new(
20
- Mittsu::BoxGeometry.new(0.1, 10.0, 0.1),
21
- Mittsu::MeshBasicMaterial.new(color: 0x00ff00)))
22
- axis_object.add(Mittsu::Mesh.new(
23
- Mittsu::BoxGeometry.new(0.1, 0.1, 10.0),
24
- Mittsu::MeshBasicMaterial.new(color: 0x0000ff)))
25
- scene.add(axis_object)
26
-
27
- camera_container = Mittsu::Object3D.new
28
- camera_container.add(camera)
29
- camera.position.z = 5.0
30
- scene.add(camera_container)
31
-
32
- renderer.window.on_scroll do |offset|
33
- scroll_factor = (1.5 ** (offset.y * 0.1))
34
- camera.zoom *= scroll_factor
35
- camera.update_projection_matrix
36
- end
37
-
38
- X_AXIS = Mittsu::Vector3.new(1.0, 0.0, 0.0)
39
- Y_AXIS = Mittsu::Vector3.new(0.0, 1.0, 0.0)
40
-
41
- mouse_delta = Mittsu::Vector2.new
42
- last_mouse_position = Mittsu::Vector2.new
43
-
44
- renderer.window.on_mouse_button_pressed do |button, position|
45
- if button == GLFW_MOUSE_BUTTON_LEFT
46
- last_mouse_position.copy(position)
47
- end
48
- end
49
-
50
- renderer.window.on_mouse_move do |position|
51
- if renderer.window.mouse_button_down?(GLFW_MOUSE_BUTTON_LEFT)
52
- mouse_delta.copy(last_mouse_position).sub(position)
53
- last_mouse_position.copy(position)
54
-
55
- camera_container.rotate_on_axis(Y_AXIS, mouse_delta.x * 0.01)
56
- camera_container.rotate_on_axis(X_AXIS, mouse_delta.y * 0.01)
57
- end
58
- end
59
-
60
- renderer.window.on_resize do |width, height|
61
- renderer.set_viewport(0, 0, width, height)
62
- camera.aspect = width.to_f / height.to_f
63
- camera.update_projection_matrix
64
- end
65
-
66
- renderer.window.run do
67
- renderer.render(scene, camera)
68
- end