mittsu 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-workflow.yml +3 -38
  3. data/Gemfile +0 -4
  4. data/README.md +16 -130
  5. data/bin/console +0 -4
  6. data/lib/mittsu/cameras/cube_camera.rb +1 -1
  7. data/lib/mittsu/core/uniform.rb +23 -0
  8. data/lib/mittsu/core.rb +1 -0
  9. data/lib/mittsu/loaders/stl_loader.rb +186 -0
  10. data/lib/mittsu/loaders.rb +1 -0
  11. data/lib/mittsu/textures/render_target.rb +93 -0
  12. data/lib/mittsu/textures/render_target_cube.rb +8 -0
  13. data/lib/mittsu/textures/texture.rb +1 -1
  14. data/lib/mittsu/textures.rb +2 -0
  15. data/lib/mittsu/version.rb +1 -1
  16. data/lib/mittsu.rb +0 -1
  17. data/mittsu.gemspec +8 -12
  18. metadata +28 -199
  19. data/install-glfw.ps1 +0 -13
  20. data/lib/mittsu/renderers/generic_lib.rb +0 -125
  21. data/lib/mittsu/renderers/glfw_lib.rb +0 -64
  22. data/lib/mittsu/renderers/glfw_window.rb +0 -233
  23. data/lib/mittsu/renderers/opengl/core/buffer_geometry.rb +0 -11
  24. data/lib/mittsu/renderers/opengl/core/geometry.rb +0 -346
  25. data/lib/mittsu/renderers/opengl/core/object_3d.rb +0 -134
  26. data/lib/mittsu/renderers/opengl/lights/ambient_light.rb +0 -26
  27. data/lib/mittsu/renderers/opengl/lights/directional_light.rb +0 -35
  28. data/lib/mittsu/renderers/opengl/lights/hemisphere_light.rb +0 -39
  29. data/lib/mittsu/renderers/opengl/lights/light.rb +0 -55
  30. data/lib/mittsu/renderers/opengl/lights/point_light.rb +0 -36
  31. data/lib/mittsu/renderers/opengl/lights/spot_light.rb +0 -47
  32. data/lib/mittsu/renderers/opengl/materials/line_basic_material.rb +0 -16
  33. data/lib/mittsu/renderers/opengl/materials/material.rb +0 -274
  34. data/lib/mittsu/renderers/opengl/materials/mesh_basic_material.rb +0 -21
  35. data/lib/mittsu/renderers/opengl/materials/mesh_lambert_material.rb +0 -33
  36. data/lib/mittsu/renderers/opengl/materials/mesh_phong_material.rb +0 -44
  37. data/lib/mittsu/renderers/opengl/materials/opengl_material_basics.rb +0 -57
  38. data/lib/mittsu/renderers/opengl/materials/point_cloud_material.rb +0 -27
  39. data/lib/mittsu/renderers/opengl/materials/shader_material.rb +0 -11
  40. data/lib/mittsu/renderers/opengl/objects/group.rb +0 -9
  41. data/lib/mittsu/renderers/opengl/objects/line.rb +0 -45
  42. data/lib/mittsu/renderers/opengl/objects/mesh.rb +0 -70
  43. data/lib/mittsu/renderers/opengl/objects/point_cloud.rb +0 -39
  44. data/lib/mittsu/renderers/opengl/objects/sprite.rb +0 -12
  45. data/lib/mittsu/renderers/opengl/opengl_buffer.rb +0 -13
  46. data/lib/mittsu/renderers/opengl/opengl_debug.rb +0 -81
  47. data/lib/mittsu/renderers/opengl/opengl_default_target.rb +0 -50
  48. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +0 -758
  49. data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +0 -132
  50. data/lib/mittsu/renderers/opengl/opengl_helper.rb +0 -161
  51. data/lib/mittsu/renderers/opengl/opengl_implementations.rb +0 -37
  52. data/lib/mittsu/renderers/opengl/opengl_lib.rb +0 -19
  53. data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +0 -43
  54. data/lib/mittsu/renderers/opengl/opengl_mittsu_params.rb +0 -53
  55. data/lib/mittsu/renderers/opengl/opengl_program.rb +0 -250
  56. data/lib/mittsu/renderers/opengl/opengl_shader.rb +0 -58
  57. data/lib/mittsu/renderers/opengl/opengl_state.rb +0 -205
  58. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +0 -417
  59. data/lib/mittsu/renderers/opengl/plugins/sprite_fragment.glsl +0 -38
  60. data/lib/mittsu/renderers/opengl/plugins/sprite_plugin.rb +0 -250
  61. data/lib/mittsu/renderers/opengl/plugins/sprite_vertex.glsl +0 -31
  62. data/lib/mittsu/renderers/opengl/scenes/scene.rb +0 -9
  63. data/lib/mittsu/renderers/opengl/textures/compressed_texture.rb +0 -20
  64. data/lib/mittsu/renderers/opengl/textures/cube_texture.rb +0 -77
  65. data/lib/mittsu/renderers/opengl/textures/data_texture.rb +0 -21
  66. data/lib/mittsu/renderers/opengl/textures/texture.rb +0 -107
  67. data/lib/mittsu/renderers/opengl_render_target.rb +0 -201
  68. data/lib/mittsu/renderers/opengl_renderer.rb +0 -1028
  69. data/lib/mittsu/renderers/shaders/rbsl_loader.rb +0 -166
  70. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_fragment.glsl +0 -5
  71. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_pars_fragment.glsl +0 -5
  72. data/lib/mittsu/renderers/shaders/shader_chunk/alphatest_fragment.glsl +0 -5
  73. data/lib/mittsu/renderers/shaders/shader_chunk/bumpmap_pars_fragment.glsl +0 -40
  74. data/lib/mittsu/renderers/shaders/shader_chunk/color_fragment.glsl +0 -5
  75. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_fragment.glsl +0 -5
  76. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_vertex.glsl +0 -5
  77. data/lib/mittsu/renderers/shaders/shader_chunk/color_vertex.glsl +0 -5
  78. data/lib/mittsu/renderers/shaders/shader_chunk/common.glsl +0 -60
  79. data/lib/mittsu/renderers/shaders/shader_chunk/default_vertex.glsl +0 -15
  80. data/lib/mittsu/renderers/shaders/shader_chunk/defaultnormal_vertex.glsl +0 -21
  81. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_fragment.glsl +0 -62
  82. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_fragment.glsl +0 -21
  83. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_vertex.glsl +0 -7
  84. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_vertex.glsl +0 -17
  85. data/lib/mittsu/renderers/shaders/shader_chunk/fog_fragment.glsl +0 -26
  86. data/lib/mittsu/renderers/shaders/shader_chunk/fog_pars_fragment.glsl +0 -15
  87. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_fragment.glsl +0 -5
  88. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_fragment.glsl +0 -6
  89. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_vertex.glsl +0 -5
  90. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_vertex.glsl +0 -5
  91. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_pars_vertex.glsl +0 -43
  92. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_vertex.glsl +0 -196
  93. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_fragment.glsl +0 -243
  94. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_fragment.glsl +0 -58
  95. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_vertex.glsl +0 -5
  96. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_vertex.glsl +0 -5
  97. data/lib/mittsu/renderers/shaders/shader_chunk/linear_to_gamma_fragment.glsl +0 -2
  98. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_fragment.glsl +0 -5
  99. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_fragment.glsl +0 -12
  100. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_vertex.glsl +0 -11
  101. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_vertex.glsl +0 -15
  102. data/lib/mittsu/renderers/shaders/shader_chunk/map_fragment.glsl +0 -9
  103. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_fragment.glsl +0 -11
  104. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_vertex.glsl +0 -6
  105. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_fragment.glsl +0 -5
  106. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_pars_fragment.glsl +0 -6
  107. data/lib/mittsu/renderers/shaders/shader_chunk/map_vertex.glsl +0 -5
  108. data/lib/mittsu/renderers/shaders/shader_chunk/morphnormal_vertex.glsl +0 -12
  109. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_pars_vertex.glsl +0 -13
  110. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_vertex.glsl +0 -20
  111. data/lib/mittsu/renderers/shaders/shader_chunk/normalmap_pars_fragment.glsl +0 -27
  112. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +0 -216
  113. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_fragment.glsl +0 -19
  114. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_vertex.glsl +0 -6
  115. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_vertex.glsl +0 -9
  116. data/lib/mittsu/renderers/shaders/shader_chunk/skinbase_vertex.glsl +0 -8
  117. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_pars_vertex.glsl +0 -47
  118. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_vertex.glsl +0 -20
  119. data/lib/mittsu/renderers/shaders/shader_chunk/skinnormal_vertex.glsl +0 -20
  120. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_fragment.glsl +0 -12
  121. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_pars_fragment.glsl +0 -5
  122. data/lib/mittsu/renderers/shaders/shader_chunk/worldpos_vertex.glsl +0 -17
  123. data/lib/mittsu/renderers/shaders/shader_chunk.rb +0 -9
  124. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_fragment.rbsl +0 -37
  125. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_uniforms.rbslu +0 -3
  126. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_vertex.rbsl +0 -33
  127. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_fragment.rbsl +0 -12
  128. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_uniforms.rbslu +0 -2
  129. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_vertex.rbsl +0 -12
  130. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_fragment.rbsl +0 -26
  131. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_uniforms.rbslu +0 -0
  132. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_vertex.rbsl +0 -12
  133. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_fragment.rbsl +0 -56
  134. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_uniforms.rbslu +0 -7
  135. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_vertex.rbsl +0 -37
  136. data/lib/mittsu/renderers/shaders/shader_lib/particle_basic/particle_basic_fragment.rbsl +0 -27
  137. data/lib/mittsu/renderers/shaders/shader_lib/particle_basic/particle_basic_uniforms.rbslu +0 -2
  138. data/lib/mittsu/renderers/shaders/shader_lib/particle_basic/particle_basic_vertex.rbsl +0 -25
  139. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_fragment.rbsl +0 -45
  140. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_uniforms.rbslu +0 -11
  141. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_vertex.rbsl +0 -43
  142. data/lib/mittsu/renderers/shaders/shader_lib.rb +0 -43
  143. data/lib/mittsu/renderers/shaders/shader_templates/fragment.glsl.erb +0 -105
  144. data/lib/mittsu/renderers/shaders/shader_templates/vertex.glsl.erb +0 -143
  145. data/lib/mittsu/renderers/shaders/uniforms_lib.rb +0 -106
  146. data/lib/mittsu/renderers/shaders/uniforms_utils.rb +0 -31
  147. data/lib/mittsu/renderers.rb +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 806e8ad78d34edc7dfa72cbe35414c0fe765628b5dd074d691d5bf0f45dd52cb
4
- data.tar.gz: b477a885ca405bd5ad8b71464b06ce794567c00abceb56738f3ace06885fe4d3
3
+ metadata.gz: 620d1bf034251f9514abec4fb1e28357bccbe984f517d6763c5f1e544e3c9728
4
+ data.tar.gz: 157868417127b487b51b8ccbc1bfa901063f557915a3f0f66f43f0a6cfe600da
5
5
  SHA512:
6
- metadata.gz: d65b207aaaf6136a1e6d7fd39237bd5710192748338eb388fd974d4128069cbc41b6df4132bc2597793f507ed7349abdb0f3d28e9df1584ff9d4e1f9a39c8bc2
7
- data.tar.gz: b4eb049497dc7f46d4285d8d8d677f3221f08d904dcc21b1efa3e7044edea42a1d49e8979d74bd26c3bc9470598fd9755c460865cc324ce71b6c87fec036d07e
6
+ metadata.gz: 611d3f4d2aa790e21f04cd22b45b3a8ed3901dbc60e97e1a2f72574bdb846d12773b552397131cda37471f39ed97d4702f0976ca83438d2202f1439e0e722b6e
7
+ data.tar.gz: 0d2fd2ab7d43a2ebbe523103b33fc1ce8a0bcd3ce046f2c82fd2e633e8e2b6b80cfede3ffc7758a82d753d69afb7f75c3ce49f69aa278161dbb1586603c017a6
@@ -8,23 +8,20 @@ on:
8
8
  - main
9
9
 
10
10
  jobs:
11
- linux:
12
- name: Linux
11
+ test:
12
+ name: Test
13
13
  runs-on: ubuntu-latest
14
14
  strategy:
15
15
  matrix:
16
16
  ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
17
17
  steps:
18
18
  - uses: actions/checkout@v4
19
- - uses: awalsh128/cache-apt-pkgs-action@v1
20
- with:
21
- packages: libglfw3
22
19
  - uses: ruby/setup-ruby@v1
23
20
  with:
24
21
  ruby-version: ${{ matrix.ruby }}
25
22
  bundler-cache: true
26
23
  - name: Test & publish code coverage
27
- uses: paambaati/codeclimate-action@v2.2.1
24
+ uses: paambaati/codeclimate-action@v9.0.0
28
25
  if: github.event_name == 'push'
29
26
  env:
30
27
  CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
@@ -33,35 +30,3 @@ jobs:
33
30
  - name: Test
34
31
  if: github.event_name != 'push'
35
32
  run: bundle exec rake test
36
-
37
- macos:
38
- name: macOS
39
- runs-on: macos-latest
40
- strategy:
41
- matrix:
42
- ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
43
- steps:
44
- - uses: actions/checkout@v4
45
- - run: brew install glfw
46
- - uses: ruby/setup-ruby@v1
47
- with:
48
- ruby-version: ${{ matrix.ruby }}
49
- bundler-cache: true
50
- - run: bundle exec rake test
51
-
52
- windows:
53
- name: Windows
54
- runs-on: windows-latest
55
- env:
56
- MITTSU_LIBGLFW_PATH: c:\projects\mittsu\glfw-3.3.1.bin.WIN32\lib-mingw
57
- strategy:
58
- matrix:
59
- ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
60
- steps:
61
- - uses: actions/checkout@v4
62
- - run: .\install-glfw.ps1
63
- - uses: ruby/setup-ruby@v1
64
- with:
65
- ruby-version: ${{ matrix.ruby }}
66
- bundler-cache: true
67
- - run: bundle exec rake test
data/Gemfile CHANGED
@@ -1,7 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
-
5
- if /darwin/ === RUBY_PLATFORM
6
- gem 'ffi', '~> 1.9', '!= 1.11.1'
7
- end
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Mittsu
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/mittsu.svg)](https://badge.fury.io/rb/mittsu)
4
- [![Test Coverage](https://api.codeclimate.com/v1/badges/22be300984d81fa10af8/test_coverage)](https://codeclimate.com/github/danini-the-panini/mittsu/test_coverage)
5
- [![Maintainability](https://api.codeclimate.com/v1/badges/22be300984d81fa10af8/maintainability)](https://codeclimate.com/github/danini-the-panini/mittsu/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/339a016dc2e7fc51c82a/test_coverage)](https://codeclimate.com/github/danini-the-panini/mittsu/test_coverage)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/339a016dc2e7fc51c82a/maintainability)](https://codeclimate.com/github/danini-the-panini/mittsu/maintainability)
6
6
  [![Build Status](https://github.com/danini-the-panini/mittsu/workflows/Build/badge.svg)](https://github.com/danini-the-panini/mittsu/actions?query=workflow%3A%22Build%22)
7
7
 
8
8
  3D Graphics Library for Ruby
9
9
 
10
- Mittsu makes 3D graphics easier by providing an abstraction over OpenGL, and is based heavily off of [THREE.js](http://threejs.org). No more weird pointers and wondering about the difference between a VAO and a VBO (besides the letter). Simply think of something awesome and make it!
10
+ Mittsu is a 3D Graphics Library for Ruby, based heavily on Three.js
11
11
 
12
12
  ## GIFs!
13
13
 
@@ -19,26 +19,6 @@ Mittsu makes 3D graphics easier by providing an abstraction over OpenGL, and is
19
19
 
20
20
  ## Installation
21
21
 
22
- Install the prerequisites:
23
-
24
- Mittsu depends on Ruby 2.x, OpenGL 3.3+, and GLFW 3.1.x
25
-
26
- ```bash
27
- # OSX
28
- $ brew install glfw3
29
-
30
- # Ubuntu
31
- $ sudo apt-get install libglfw3
32
- ```
33
-
34
- **NOTE:** On Windows, you will have to manually specify the glfw3.dll path in an environment variable
35
- (you can download it [here](http://www.glfw.org/download.html))
36
- ```bash
37
- # ex) set MITTSU_LIBGLFW_PATH=C:\Users\username\lib-mingw-w64
38
- > set MITTSU_LIBGLFW_PATH=C:\path\to\glfw3.dll
39
- > ruby your_awesome_mittsu_app.rb
40
- ```
41
-
42
22
  Add this line to your application's Gemfile:
43
23
 
44
24
  ```ruby
@@ -55,22 +35,14 @@ Or install it yourself as:
55
35
 
56
36
  ## Usage
57
37
 
58
- ### tl;dr
59
-
60
- Copy-Paste and Run:
38
+ Create a basic scene with a perspective camera and a green box:
61
39
 
62
40
  ```ruby
63
41
  require 'mittsu'
64
42
 
65
- SCREEN_WIDTH = 800
66
- SCREEN_HEIGHT = 600
67
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
68
-
69
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: 'Hello, World!'
70
-
71
43
  scene = Mittsu::Scene.new
72
44
 
73
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
45
+ camera = Mittsu::PerspectiveCamera.new(75.0, 1.0, 0.1, 1000.0)
74
46
  camera.position.z = 5.0
75
47
 
76
48
  box = Mittsu::Mesh.new(
@@ -79,116 +51,30 @@ box = Mittsu::Mesh.new(
79
51
  )
80
52
 
81
53
  scene.add(box)
82
-
83
- renderer.window.run do
84
- box.rotation.x += 0.1
85
- box.rotation.y += 0.1
86
-
87
- renderer.render(scene, camera)
88
- end
89
- ```
90
-
91
- ### Step by Step
92
-
93
- First, we need to require Mittsu in order to use it:
94
- ```ruby
95
- require 'mittsu'
96
- ```
97
-
98
- Then, we'll define some constants to help us with setting up our 3D environment:
99
- ```ruby
100
- SCREEN_WIDTH = 800
101
- SCREEN_HEIGHT = 600
102
- ASPECT = SCREEN_WIDTH.to_f / SCREEN_HEIGHT.to_f
103
- ```
104
-
105
- The aspect ratio will be used for setting up the camera later.
106
-
107
- Once we have all that we can create the canvas we will use to draw our graphics onto. In Mittsu this is called a renderer. It provides a window and an OpenGL context:
108
-
109
- ```ruby
110
- renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: 'Hello, World!'
111
- ```
112
- This will give us an 800x600 window with the title `Hello, World!`.
113
-
114
- Now that we have our canvas, let's start setting up the scene we wish to draw onto it:
115
-
116
- ```ruby
117
- scene = Mittsu::Scene.new
118
54
  ```
119
55
 
120
- A scene is like a stage where all our 3D objects live and animate.
121
-
122
- We can't draw a 3D scene without knowing where we're looking:
123
-
124
- ```ruby
125
- camera = Mittsu::PerspectiveCamera.new(75.0, ASPECT, 0.1, 1000.0)
126
- ```
127
-
128
- This camera has a 75° field-of-view (FOV), the aspect ratio of the window (which we defined earlier), and shows everything between a distance of 0.1 to 1000.0 away from the camera.
129
-
130
- The camera starts off at the origin `[0,0,0]` and faces the negative Z-axis. We'll position it somewhere along the positive Z-axis so that it is looking at the center of the scene from a short distance:
56
+ ## More Resources
131
57
 
132
- ```ruby
133
- camera.position.z = 5.0
134
- ```
135
-
136
- Our scene isn't going to be very exciting if there is nothing in it, so we'll create a box:
137
-
138
- ```ruby
139
- box = Mittsu::Mesh.new(
140
- Mittsu::BoxGeometry.new(1.0, 1.0, 1.0),
141
- Mittsu::MeshBasicMaterial.new(color: 0x00ff00)
142
- )
143
- ```
144
-
145
- A `Mesh` in Mittsu is the combination of a `Geometry` (the shape of the object) and a `Material` (the "look" of the object). Here we've created a 1x1x1 box that is colored green.
146
-
147
- Box in hand, we make it part of our scene:
148
-
149
- ```ruby
150
- scene.add(box)
151
- ```
152
-
153
- Here comes the fun part... the render loop!
154
-
155
- ```ruby
156
- renderer.window.run do
157
- ```
158
-
159
- The given block is called every frame. This is where you can tell the renderer what scene to draw, and do any updates to the objects in your scene.
160
-
161
- Just to make things a bit more interesting, we'll make the box rotate around its X and Y axes, so that it spins like crazy.
162
-
163
- ```ruby
164
- box.rotation.x += 0.1
165
- box.rotation.y += 0.1
166
- ```
167
-
168
- Last but not least, we tell the renderer to draw our scene this frame, which will tell the graphics processor to draw our green box with its updated rotation.
169
-
170
- ```ruby
171
- renderer.render(scene, camera)
172
- ```
173
-
174
- Easy peasy! :)
58
+ Mittsu follows a similar structure to THREE.js, so you can generally use [the same documentation](http://threejs.org/docs/) for a description of the various classes and how they work.
175
59
 
176
- ```ruby
177
- end
178
- ```
60
+ If you want to actually render scenes, you'll need a renderer. There is a reference OpenGL renderer [here](https://github.com/danini-the-panini/mittsu-opengl).
179
61
 
62
+ ## See also
180
63
 
181
- ### More Resources
64
+ - [Tank Demo](https://github.com/danini-the-panini/mittsu-tank-demo)
65
+ - [OpenGL Renderer](https://github.com/danini-the-panini/mittsu-opengl)
66
+ - [Mesh Analysis](https://github.com/manyfold3d/mittsu-mesh_analysis)
67
+ - [3MF Support](https://github.com/manyfold3d/mittsu-3mf)
182
68
 
183
- Mittsu follows a similar structure to THREE.js, so you can generally use [the same documentation](http://threejs.org/docs/) for a description of the various classes and how they work.
69
+ ## Where is Mittsu used?
184
70
 
185
- If you just want to see what Mittsu can do and how to do it, take a peek inside the `examples` folder.
71
+ - [Manyfold](https://github.com/manyfold3d/manyfold) - A self-hosted digital asset manager for 3d print files.
186
72
 
187
73
  ## Where you can help
188
74
 
189
75
  1. Testing!
190
76
 
191
- Currently the only unit tests are for most of the maths library, otherwise the library is tested by running the examples and checking that they look correct.
77
+ Currently the only unit tests are for most of the maths library.
192
78
 
193
79
  2. Refactoring!
194
80
 
data/bin/console CHANGED
@@ -6,9 +6,5 @@ require "mittsu"
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
9
  require "irb"
14
10
  IRB.start
@@ -40,7 +40,7 @@ module Mittsu
40
40
  @camera_nz.look_at(Mittsu::Vector3.new(0.0, 0.0, -1.0))
41
41
  self.add(@camera_nz)
42
42
 
43
- @render_target = Mittsu::OpenGLRenderTargetCube(cube_resolution, cube_resolution, format: Mittsu::RGBFormat, mag_filter: Mittsu::LinearFilter, min_filter: Mittsu::LinearFilter)
43
+ @render_target = Mittsu::RenderTargetCube(cube_resolution, format: Mittsu::RGBFormat, mag_filter: Mittsu::LinearFilter, min_filter: Mittsu::LinearFilter)
44
44
  end
45
45
 
46
46
  def update_cube_map(renderer, scene)
@@ -0,0 +1,23 @@
1
+ module Mittsu
2
+ class Uniform
3
+ attr_accessor :type, :value, :needs_update, :array
4
+
5
+ def initialize(type, value)
6
+ super()
7
+ @type, @value = type, value
8
+ @needs_update = nil
9
+ end
10
+
11
+ def clone
12
+ new_value = case self.value
13
+ when Color, Vector2, Vector3, Vector4, Matrix4#, Texture # TODO: when Texture exists
14
+ self.value.clone
15
+ when Array
16
+ self.value.dup
17
+ else
18
+ self.value
19
+ end
20
+ Uniform.new(self.type, new_value)
21
+ end
22
+ end
23
+ end
data/lib/mittsu/core.rb CHANGED
@@ -8,3 +8,4 @@ require "mittsu/core/geometry"
8
8
  require "mittsu/core/object_3d"
9
9
  require "mittsu/core/raycaster"
10
10
  require "mittsu/core/hash_array"
11
+ require "mittsu/core/uniform"
@@ -0,0 +1,186 @@
1
+ require 'stringio'
2
+
3
+ module Mittsu
4
+ class STLLoader
5
+ include EventDispatcher
6
+
7
+ FLOAT = /[\d|.|+|\-|e]+/
8
+ NORMAL_PATTERN = /normal\s+(#{FLOAT})\s+(#{FLOAT})\s+(#{FLOAT})/
9
+ VERTEX_PATTERN = /^\s*vertex\s+(#{FLOAT})\s+(#{FLOAT})\s+(#{FLOAT})/
10
+
11
+ def initialize(manager = DefaultLoadingManager)
12
+ @manager = manager
13
+ @_listeners = {}
14
+ end
15
+
16
+ def load(url)
17
+ loader = FileLoader.new(@manager)
18
+
19
+ data = loader.load(url)
20
+ parse(data)
21
+ end
22
+
23
+ def parse(data)
24
+ reset_loader_vars
25
+ stream = StringIO.new(data, "rb")
26
+ # Load STL header (first 80 bytes max)
27
+ header = stream.read(80)
28
+ if header.slice(0,5) === "solid"
29
+ stream.rewind
30
+ parse_ascii(stream)
31
+ else
32
+ parse_binary(stream)
33
+ end
34
+ @group
35
+ end
36
+
37
+ private
38
+
39
+ def reset_loader_vars
40
+ @vertex_hash = {}
41
+ @vertex_count = 0
42
+ @line_num = 0
43
+ @group = Group.new
44
+ end
45
+
46
+ def parse_ascii(stream)
47
+ while line = read_line(stream)
48
+ case line
49
+ when /^\s*solid/
50
+ parse_ascii_solid(stream)
51
+ else
52
+ raise_error
53
+ end
54
+ end
55
+ end
56
+
57
+ def parse_ascii_solid(stream)
58
+ vertices = []
59
+ faces = []
60
+ while line = read_line(stream)
61
+ case line
62
+ when /^\s*facet/
63
+ facet_vertices, face = parse_ascii_facet(line, stream)
64
+ vertices += facet_vertices
65
+ faces << face
66
+ when /^\s*endsolid/
67
+ break
68
+ else
69
+ raise_error
70
+ end
71
+ end
72
+ add_mesh vertices, faces
73
+ end
74
+
75
+ def parse_ascii_facet(line, stream)
76
+ vertices = []
77
+ normal = nil
78
+ if line.match NORMAL_PATTERN
79
+ normal = Vector3.new($1, $2, $3)
80
+ end
81
+ while line = read_line(stream)
82
+ case line
83
+ when /^\s*outer loop/
84
+ nil # Ignored
85
+ when /^\s*endloop/
86
+ nil # Ignored
87
+ when VERTEX_PATTERN
88
+ vertices << Vector3.new($1, $2, $3)
89
+ when /^\s*endfacet/
90
+ break
91
+ else
92
+ raise_error
93
+ end
94
+ end
95
+ return nil if vertices.length != 3
96
+ # Merge with existing vertices
97
+ face, new_vertices = face_with_merged_vertices(vertices)
98
+ face.normal = normal
99
+ return new_vertices, face
100
+ end
101
+
102
+ def parse_binary(stream)
103
+ vertices = []
104
+ faces = []
105
+ num_faces = stream.read(4).unpack('L<').first
106
+ num_faces.times do |i|
107
+ # Face normal
108
+ normal = read_binary_vector(stream)
109
+ # Vertices
110
+ face_vertices = []
111
+ face_vertices << read_binary_vector(stream)
112
+ face_vertices << read_binary_vector(stream)
113
+ face_vertices << read_binary_vector(stream)
114
+ # Throw away the attribute bytes
115
+ stream.read(2)
116
+ # Store data
117
+ face, new_vertices = face_with_merged_vertices(face_vertices)
118
+ face.normal = normal
119
+ faces << face
120
+ vertices += new_vertices
121
+ end
122
+ add_mesh vertices, faces
123
+ end
124
+
125
+ def face_with_merged_vertices(vertices)
126
+ new_vertices = []
127
+ indices = []
128
+ vertices.each do |v|
129
+ index, is_new = vertex_index(v)
130
+ indices << index
131
+ if is_new
132
+ new_vertices << v
133
+ @vertex_count += 1
134
+ end
135
+ end
136
+ # Return face and new vertex list
137
+ return Face3.new(
138
+ indices[0],
139
+ indices[1],
140
+ indices[2]
141
+ ), new_vertices
142
+ end
143
+
144
+ def vertex_index(vertex)
145
+ key = vertex_key(vertex)
146
+ if i = @vertex_hash[key]
147
+ return i, false
148
+ else
149
+ return (@vertex_hash[key] = @vertex_count), true
150
+ end
151
+ end
152
+
153
+ def vertex_key(vertex)
154
+ vertex.elements.pack("D*")
155
+ end
156
+
157
+ def add_mesh(vertices, faces)
158
+ geometry = Geometry.new
159
+ geometry.vertices = vertices
160
+ geometry.faces = faces
161
+ geometry.compute_bounding_sphere
162
+ @group.add Mesh.new(geometry)
163
+ end
164
+
165
+ def read_binary_vector(stream)
166
+ Vector3.new(
167
+ read_le_float(stream),
168
+ read_le_float(stream),
169
+ read_le_float(stream)
170
+ )
171
+ end
172
+
173
+ def read_le_float(stream)
174
+ stream.read(4).unpack('e').first
175
+ end
176
+
177
+ def read_line(stream)
178
+ @line_num += 1
179
+ stream.gets
180
+ end
181
+
182
+ def raise_error
183
+ raise "Mittsu::STLLoader: Unhandled line #{@line_num}"
184
+ end
185
+ end
186
+ end
@@ -6,3 +6,4 @@ require 'mittsu/loaders/file_loader'
6
6
  require 'mittsu/loaders/obj_loader'
7
7
  require 'mittsu/loaders/mtl_loader'
8
8
  require 'mittsu/loaders/obj_mtl_loader'
9
+ require 'mittsu/loaders/stl_loader'
@@ -0,0 +1,93 @@
1
+ module Mittsu
2
+ class RenderTarget < Texture
3
+ include EventDispatcher
4
+
5
+ attr_accessor :width,
6
+ :height,
7
+ :wrap_s,
8
+ :wrap_t,
9
+ :mag_filter,
10
+ :min_filter,
11
+ :anisotropy,
12
+ :offset,
13
+ :repeat,
14
+ :format,
15
+ :type,
16
+ :depth_buffer,
17
+ :stencil_buffer,
18
+ :generate_mipmaps,
19
+ :share_depth_from
20
+
21
+ attr_reader :framebuffer
22
+
23
+ attr_writer :renderer
24
+
25
+ def initialize(width, height, options = {})
26
+ super(self, nil)
27
+
28
+ @width = width
29
+ @height = height
30
+
31
+ @wrap_s = options.fetch(:wrap_s, ClampToEdgeWrapping)
32
+ @wrap_t = options.fetch(:wrap_t, ClampToEdgeWrapping)
33
+
34
+ @mag_filter = options.fetch(:mag_filter, LinearFilter)
35
+ @min_filter = options.fetch(:min_filter, LinearMipMapLinearFilter)
36
+
37
+ @anisotropy = options.fetch(:anisotropy, 1.0);
38
+
39
+ @offset = Vector2.new(0.0, 0.0)
40
+ @repeat = Vector2.new(1.0, 1.0)
41
+
42
+ @format = options.fetch(:format, RGBAFormat)
43
+ @type = options.fetch(:type, UnsignedByteType)
44
+
45
+ @depth_buffer = options.fetch(:depth_buffer, true)
46
+ @stencil_buffer = options.fetch(:stencil_buffer, true)
47
+
48
+ @generate_mipmaps = true
49
+
50
+ @share_depth_from = options.fetch(:share_depth_from, nil)
51
+ end
52
+
53
+ def set_size(width, height)
54
+ @width = width
55
+ @height = height
56
+ end
57
+
58
+ def needs_update?
59
+ false
60
+ end
61
+
62
+ def clone
63
+ RenderTarget.new(@width, @height).tap do |tmp|
64
+ tmp.renderer = @renderer
65
+
66
+ tmp.wrap_s = @wrap_s
67
+ tmp.wrap_t = @wrap_t
68
+
69
+ tmp.mag_filter = @mag_filter
70
+ tmp.min_filter = @min_filter
71
+
72
+ tmp.anisotropy = @anisotropy
73
+
74
+ tmp.offset.copy(@offset)
75
+ tmp.repeat.copy(@repeat)
76
+
77
+ tmp.format = @format
78
+ tmp.type = @type
79
+
80
+ tmp.depth_buffer = @depth_buffer
81
+ tmp.stencil_buffer = @stencil_buffer
82
+
83
+ tmp.generate_mipmaps = @generate_mipmaps
84
+
85
+ tmp.share_depth_from = @share_depth_from
86
+ end
87
+ end
88
+
89
+ def dispose
90
+ dispatch_event(type: :dispose)
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,8 @@
1
+ module Mittsu
2
+ class RenderTargetCube < RenderTarget
3
+ def initialize(size = 1, options = {})
4
+ super(size, size, options)
5
+ # TODO
6
+ end
7
+ end
8
+ end
@@ -39,7 +39,7 @@ module Mittsu
39
39
  @generate_mipmaps = true
40
40
  @premultiply_alpha = false
41
41
  @filp_y = true
42
- @unpack_alignment = 4 # valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)
42
+ @unpack_alignment = 4 # valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/GL.PixelStorei.xml)
43
43
 
44
44
  @_needs_update = false
45
45
  @on_update = nil
@@ -3,3 +3,5 @@ require 'mittsu/textures/compressed_texture'
3
3
  require 'mittsu/textures/cube_texture'
4
4
  require 'mittsu/textures/data_texture'
5
5
  require 'mittsu/textures/video_texture'
6
+ require 'mittsu/textures/render_target'
7
+ require 'mittsu/textures/render_target_cube'
@@ -1,3 +1,3 @@
1
1
  module Mittsu
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/mittsu.rb CHANGED
@@ -8,7 +8,6 @@ require "mittsu/lights"
8
8
  require "mittsu/loaders"
9
9
  require "mittsu/materials"
10
10
  require "mittsu/objects"
11
- require "mittsu/renderers"
12
11
  require "mittsu/scenes"
13
12
  require "mittsu/textures"
14
13
  require "mittsu/constants"