mittsu 0.2.3 → 0.3.3

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-workflow.yml +95 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +3 -2
  5. data/README.md +3 -7
  6. data/Rakefile +1 -0
  7. data/install-glfw.ps1 +13 -0
  8. data/lib/mittsu.rb +1 -16
  9. data/lib/mittsu/cameras/camera.rb +0 -2
  10. data/lib/mittsu/cameras/cube_camera.rb +0 -2
  11. data/lib/mittsu/cameras/orthographic_camera.rb +2 -4
  12. data/lib/mittsu/cameras/perspective_camera.rb +4 -5
  13. data/lib/mittsu/core/buffer_geometry.rb +3 -3
  14. data/lib/mittsu/core/geometry.rb +10 -9
  15. data/lib/mittsu/core/object_3d.rb +9 -7
  16. data/lib/mittsu/core/raycaster.rb +0 -2
  17. data/lib/mittsu/extras/geometries.rb +13 -0
  18. data/lib/mittsu/extras/geometries/circle_geometry.rb +48 -0
  19. data/lib/mittsu/extras/geometries/cylinder_geometry.rb +145 -0
  20. data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +56 -0
  21. data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +33 -0
  22. data/lib/mittsu/extras/geometries/lathe_geometry.rb +78 -0
  23. data/lib/mittsu/extras/geometries/octahedron_geometry.rb +26 -0
  24. data/lib/mittsu/extras/geometries/parametric_buffer_geometry.rb +92 -0
  25. data/lib/mittsu/extras/geometries/parametric_geometry.rb +93 -0
  26. data/lib/mittsu/extras/geometries/plane_buffer_geometry.rb +81 -0
  27. data/lib/mittsu/extras/geometries/plane_geometry.rb +22 -0
  28. data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +168 -0
  29. data/lib/mittsu/extras/geometries/ring_geometry.rb +80 -0
  30. data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
  31. data/lib/mittsu/extras/geometries/tetrahedron_geometry.rb +26 -0
  32. data/lib/mittsu/extras/geometries/torus_geometry.rb +63 -0
  33. data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +120 -0
  34. data/lib/mittsu/extras/geometries/torus_knot_geometry.rb +25 -0
  35. data/lib/mittsu/extras/helpers/camera_helper.rb +38 -38
  36. data/lib/mittsu/extras/image_utils.rb +1 -1
  37. data/lib/mittsu/lights/directional_light.rb +9 -5
  38. data/lib/mittsu/lights/spot_light.rb +1 -1
  39. data/lib/mittsu/loaders/loader.rb +2 -2
  40. data/lib/mittsu/loaders/obj_loader.rb +4 -0
  41. data/lib/mittsu/materials/material.rb +6 -3
  42. data/lib/mittsu/math.rb +0 -5
  43. data/lib/mittsu/math/box2.rb +0 -2
  44. data/lib/mittsu/math/box3.rb +0 -2
  45. data/lib/mittsu/math/color.rb +3 -4
  46. data/lib/mittsu/math/euler.rb +25 -26
  47. data/lib/mittsu/math/frustum.rb +0 -2
  48. data/lib/mittsu/math/line3.rb +0 -2
  49. data/lib/mittsu/math/matrix3.rb +0 -2
  50. data/lib/mittsu/math/matrix4.rb +10 -12
  51. data/lib/mittsu/math/plane.rb +0 -2
  52. data/lib/mittsu/math/quaternion.rb +18 -20
  53. data/lib/mittsu/math/ray.rb +1 -3
  54. data/lib/mittsu/math/sphere.rb +1 -3
  55. data/lib/mittsu/math/spline.rb +0 -2
  56. data/lib/mittsu/math/triangle.rb +1 -3
  57. data/lib/mittsu/math/vector.rb +4 -4
  58. data/lib/mittsu/math/vector2.rb +0 -1
  59. data/lib/mittsu/math/vector3.rb +0 -1
  60. data/lib/mittsu/math/vector4.rb +8 -9
  61. data/lib/mittsu/objects/line.rb +0 -1
  62. data/lib/mittsu/renderers/glfw_lib.rb +1 -1
  63. data/lib/mittsu/renderers/glfw_window.rb +1 -1
  64. data/lib/mittsu/renderers/opengl/core/object_3d.rb +1 -1
  65. data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
  66. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +1 -0
  67. data/lib/mittsu/renderers/opengl/opengl_program.rb +1 -2
  68. data/lib/mittsu/renderers/opengl/textures/texture.rb +1 -1
  69. data/lib/mittsu/renderers/opengl_renderer.rb +5 -10
  70. data/lib/mittsu/scenes/scene.rb +0 -2
  71. data/lib/mittsu/textures/texture.rb +4 -2
  72. data/lib/mittsu/utils.rb +15 -0
  73. data/lib/mittsu/version.rb +1 -1
  74. data/mittsu.gemspec +10 -9
  75. metadata +75 -47
  76. data/.circleci/config.yml +0 -44
  77. data/.travis.yml +0 -20
  78. data/appveyor.yml +0 -23
  79. data/install_glfw.ps1 +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48e91f3f5d995fce4f48d1ecc53ca8f1d6049e0e4553f95cf59d75840b8f3e2f
4
- data.tar.gz: 7458897098e4b97dd6a84510c2d17ae38e993f9acf6ab0093a23c6632dc86d3c
3
+ metadata.gz: bce7b85c4911927e9f33bb5212d9011122a33356cc8811b33482af05577b9977
4
+ data.tar.gz: 23620dc7e242612382df2647df7b45f2a21364543deb0d64e389844d65a069c1
5
5
  SHA512:
6
- metadata.gz: 7d5b7457d633e2cf32ff516f003509ff29b671c3b029ddf7e731f1fd3ee9e5120fbd7871ba3c26d047deb4cdd29c496d91c1b88ef2c5c771c8303292312d4351
7
- data.tar.gz: 7efc8ac6edc4ad531609114a43a6d6e7986f1e451395840a4b5fcf019c8351b71bf60ba9af39a7cf4828afeadc393f7df495834ce377ded07480a66d631656d5
6
+ metadata.gz: 192b53dca3a2f7ecc79c22cdeae9410d7ce5dcf4af30803d9f0242bdc9caa10cef93cc8a1948932da102cbfe049e6d67951ce983e27ed40f20809fa18b044897
7
+ data.tar.gz: d08903f9f798c488b35f52f991e311bdbd2f95427094c10b55c5c6d67570d4956c8616d52ad025b9507945e57a5e3ecbff876c50472317493e778d6819286d8e
@@ -0,0 +1,95 @@
1
+ name: Build
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ pull_request:
7
+ branches:
8
+ - main
9
+
10
+ jobs:
11
+ linux:
12
+ name: Linux
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
17
+ steps:
18
+ - uses: actions/checkout@v1
19
+ - name: Cache gems
20
+ uses: actions/cache@v1
21
+ with:
22
+ path: vendor/bundle
23
+ key: gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
24
+ restore-keys: |
25
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
26
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-
27
+ gems-v1-${{ runner.os }}-
28
+ - uses: actions/setup-ruby@v1
29
+ with:
30
+ ruby-version: ${{ matrix.ruby }}
31
+ - run: sudo apt-get update; sudo apt-get install cmake xorg-dev libgl1-mesa-dev
32
+ - run: bash install-glfw.sh
33
+ - run: gem install bundler
34
+ - run: bundle install --path vendor/bundle
35
+ - name: Test & publish code coverage
36
+ uses: paambaati/codeclimate-action@v2.2.1
37
+ if: github.event_name == 'push'
38
+ env:
39
+ CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
40
+ with:
41
+ coverageCommand: bundle exec rake test
42
+ - name: Test
43
+ if: github.event_name != 'push'
44
+ run: bundle exec rake test
45
+
46
+ macos:
47
+ name: macOS
48
+ runs-on: macos-latest
49
+ strategy:
50
+ matrix:
51
+ ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
52
+ steps:
53
+ - uses: actions/checkout@v1
54
+ - name: Cache gems
55
+ uses: actions/cache@v1
56
+ with:
57
+ path: vendor/bundle
58
+ key: gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
59
+ restore-keys: |
60
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
61
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-
62
+ gems-v1-${{ runner.os }}-
63
+ - uses: actions/setup-ruby@v1
64
+ with:
65
+ ruby-version: ${{ matrix.ruby }}
66
+ - run: brew install glfw
67
+ - run: bundle install --path vendor/bundle
68
+ - run: bundle exec rake test
69
+
70
+ windows:
71
+ name: Windows
72
+ runs-on: windows-latest
73
+ env:
74
+ MITTSU_LIBGLFW_FILE: c:\projects\mittsu\glfw-3.3.1.bin.WIN32\lib-mingw\glfw3.dll
75
+ strategy:
76
+ matrix:
77
+ ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
78
+ steps:
79
+ - uses: actions/checkout@v1
80
+ - name: Cache gems
81
+ uses: actions/cache@v1
82
+ with:
83
+ path: vendor/bundle
84
+ key: gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
85
+ restore-keys: |
86
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-${{ hashFiles('**/*.gemspec') }}-
87
+ gems-v1-${{ runner.os }}-${{ hashFiles('**/Gemfile') }}-
88
+ gems-v1-${{ runner.os }}-
89
+ - uses: actions/setup-ruby@v1
90
+ with:
91
+ ruby-version: ${{ matrix.ruby }}
92
+ - run: .\install-glfw.ps1
93
+ - run: gem install bundler
94
+ - run: bundle install --path vendor/bundle
95
+ - run: bundle exec rake test
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
  /tmp/
10
10
  /test/reports
11
11
  *.gem
12
+ .tool-versions
data/Gemfile CHANGED
@@ -2,5 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem "codeclimate-test-reporter", group: :test, require: false
6
- gem 'coveralls', group: :test, require: false
5
+ if /darwin/ === RUBY_PLATFORM
6
+ gem 'ffi', '~> 1.9', '!= 1.11.1'
7
+ end
data/README.md CHANGED
@@ -1,13 +1,9 @@
1
1
  # Mittsu
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/mittsu.svg)](https://badge.fury.io/rb/mittsu)
4
- [![Dependency Status](https://gemnasium.com/jellymann/mittsu.svg)](https://gemnasium.com/jellymann/mittsu)
5
- [![Coverage Status](https://coveralls.io/repos/github/jellymann/mittsu/badge.svg?branch=master)](https://coveralls.io/github/jellymann/mittsu?branch=master)
6
- [![Code Climate](https://codeclimate.com/github/jellymann/mittsu/badges/gpa.svg)](https://codeclimate.com/github/jellymann/mittsu)
7
-
8
- 🍎 [![Circle CI Build Status (macOS)](https://circleci.com/gh/jellymann/mittsu/tree/master.svg?style=shield)](https://circleci.com/gh/jellymann/mittsu/tree/master)
9
-   🐧 [![Travis Build Status (Ubuntu)](https://travis-ci.org/jellymann/mittsu.svg?branch=master)](https://travis-ci.org/jellymann/mittsu)
10
-   🖼 [![AppVeyor Build status (Windows)](https://ci.appveyor.com/api/projects/status/x7k8r95m5f5fg9cu/branch/master?svg=true)](https://ci.appveyor.com/project/jellymann/mittsu/branch/master)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/22be300984d81fa10af8/test_coverage)](https://codeclimate.com/github/jellymann/mittsu/test_coverage)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/22be300984d81fa10af8/maintainability)](https://codeclimate.com/github/jellymann/mittsu/maintainability)
6
+ [![Build Status](https://github.com/jellymann/mittsu/workflows/Build/badge.svg)](https://github.com/jellymann/mittsu/actions?query=workflow%3A%22Build%22)
11
7
 
12
8
  3D Graphics Library for Ruby
13
9
 
data/Rakefile CHANGED
@@ -4,4 +4,5 @@ require 'rake/testtask'
4
4
  Rake::TestTask.new do |t|
5
5
  t.libs << "test"
6
6
  t.pattern = "test/**/test_*.rb"
7
+ t.warning = false
7
8
  end
data/install-glfw.ps1 ADDED
@@ -0,0 +1,13 @@
1
+ $glfwversion="3.3.1"
2
+
3
+ Invoke-WebRequest "https://github.com/glfw/glfw/releases/download/$glfwversion/glfw-$glfwversion.bin.WIN32.zip" -OutFile "$pwd\glfw-$glfwversion.bin.WIN32.zip"
4
+
5
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
6
+ function Unzip
7
+ {
8
+ param([string]$zipfile, [string]$outpath)
9
+
10
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
11
+ }
12
+
13
+ Unzip "$pwd\glfw-$glfwversion.bin.WIN32.zip" "$pwd"
data/lib/mittsu.rb CHANGED
@@ -1,19 +1,4 @@
1
- module Mittsu
2
- DEBUG = ENV["DEBUG"] == "true"
3
-
4
- def self.debug?
5
- DEBUG
6
- end
7
-
8
- def self.env
9
- ENV["MITTSU_ENV"]
10
- end
11
-
12
- def self.test?
13
- env == 'test'
14
- end
15
- end
16
-
1
+ require "mittsu/utils"
17
2
  require "mittsu/version"
18
3
  require "mittsu/math"
19
4
  require "mittsu/core"
@@ -1,5 +1,3 @@
1
- require 'mittsu'
2
-
3
1
  module Mittsu
4
2
  class Camera < Object3D
5
3
  attr_accessor :projection_matrix, :matrix_world_inverse
@@ -1,5 +1,3 @@
1
- require 'mittsu'
2
-
3
1
  module Mittsu
4
2
  class CubeCamera < Object3D
5
3
  attr_accessor :render_target
@@ -1,5 +1,3 @@
1
- require 'mittsu'
2
-
3
1
  module Mittsu
4
2
  class OrthographicCamera < Camera
5
3
  attr_accessor :zoom, :left, :right, :top, :bottom, :near, :far
@@ -25,8 +23,8 @@ module Mittsu
25
23
  def update_projection_matrix
26
24
  dx = (right - left) / (2.0 * zoom)
27
25
  dy = (top - bottom) / (2.0 * zoom)
28
- cx = (right - left) / 2.0
29
- cy = (top - bottom) / 2.0
26
+ cx = (right + left) / 2.0
27
+ cy = (top + bottom) / 2.0
30
28
 
31
29
  projection_matrix.make_orthographic(cx - dx, cx + dx, cy + dy, cy - dy, near, far)
32
30
  end
@@ -1,5 +1,3 @@
1
- require 'mittsu'
2
-
3
1
  module Mittsu
4
2
  class PerspectiveCamera < Camera
5
3
  attr_accessor :zoom, :fov, :aspect, :near, :far
@@ -15,6 +13,7 @@ module Mittsu
15
13
  @aspect = aspect.to_f
16
14
  @near = near.to_f
17
15
  @far = far.to_f
16
+ @full_width = nil
18
17
 
19
18
  update_projection_matrix
20
19
  end
@@ -23,7 +22,7 @@ module Mittsu
23
22
  # 35mm (fullframe) camera is used if frame size is not specified;
24
23
  # Formula based on http://www.bobatkins.com/photography/technical/field_of_view.html
25
24
  def set_lens(focal_length, frame_height = 24.0)
26
- @fov = 2.0 * Math.rad_to_deg(Math.atan(frame_height / (focal_length * 2.0)))
25
+ @fov = 2.0 * Math.rad_to_deg(::Math.atan(frame_height / (focal_length * 2.0)))
27
26
  update_projection_matrix
28
27
  end
29
28
 
@@ -73,11 +72,11 @@ module Mittsu
73
72
  end
74
73
 
75
74
  def update_projection_matrix
76
- new_fov = Math.rad_to_deg(2.0 * Math.atan(Math.tan(Math.deg_to_rad(@fov) * 0.5) / @zoom))
75
+ new_fov = Math.rad_to_deg(2.0 * ::Math.atan(::Math.tan(Math.deg_to_rad(@fov) * 0.5) / @zoom))
77
76
 
78
77
  if @full_width
79
78
  aspect = @full_width / @full_height
80
- top = Math.tan(Math.deg_to_rad(new_fov * 0.5)) * @near
79
+ top = ::Math.tan(Math.deg_to_rad(new_fov * 0.5)) * @near
81
80
  bottom = -top
82
81
  left = aspect * bottom
83
82
  right = aspect * top
@@ -1,5 +1,4 @@
1
1
  require 'securerandom'
2
- require 'mittsu'
3
2
  require 'mittsu/core/event_dispatcher'
4
3
 
5
4
  module Mittsu
@@ -21,6 +20,7 @@ module Mittsu
21
20
  @attributes = {}
22
21
 
23
22
  @draw_calls = []
23
+ @_listeners = {}
24
24
  end
25
25
 
26
26
  def keys
@@ -179,7 +179,7 @@ module Mittsu
179
179
  max_radius_sq = [max_radius_sq, center.distance_to_squared(vector)].max
180
180
  end
181
181
 
182
- @bounding_sphere.radius = Math.sqrt(max_radius_sq)
182
+ @bounding_sphere.radius = ::Math.sqrt(max_radius_sq)
183
183
 
184
184
  if @bounding_radius.nan?
185
185
  puts 'ERROR: Mittsu::BufferGeometry#computeBoundingSphere: Computed radius is NaN. The "position" attribute is likely to have NaN values.'
@@ -558,7 +558,7 @@ module Mittsu
558
558
  normals.each_slice(3).with_index do |normal, i|
559
559
  x, y, z = *normal
560
560
 
561
- n = 1.0 / Math.sqrt(x * x + y * y + z * z)
561
+ n = 1.0 / ::Math.sqrt(x * x + y * y + z * z)
562
562
 
563
563
  i *= 3
564
564
  normals[i] *= n
@@ -1,5 +1,4 @@
1
1
  require 'securerandom'
2
- require 'mittsu'
3
2
 
4
3
  module Mittsu
5
4
  class Geometry
@@ -19,6 +18,8 @@ module Mittsu
19
18
 
20
19
  @id = (@@id ||= 1).tap { @@id += 1 }
21
20
 
21
+ @uuid = SecureRandom.uuid
22
+
22
23
  @name = ''
23
24
  @type = 'Geometry'
24
25
 
@@ -49,6 +50,8 @@ module Mittsu
49
50
  @colors_need_update = false
50
51
  @line_distances_need_update = false
51
52
  @groups_need_update = false
53
+
54
+ @_listeners = {}
52
55
  end
53
56
 
54
57
  def apply_matrix(matrix)
@@ -105,7 +108,7 @@ module Mittsu
105
108
  }
106
109
  if indices
107
110
  draw_calls = geometry.draw_calls
108
- if !draw_calls.length.empty?
111
+ if !draw_calls.empty?
109
112
  draw_calls.each do |draw_call|
110
113
  start = draw_call.start
111
114
  count = draw_call.count
@@ -119,7 +122,7 @@ module Mittsu
119
122
  end
120
123
  else
121
124
  indices.each_slice(3).with_index do |index|
122
- add_face(*index)
125
+ add_face[*index]
123
126
  end
124
127
  end
125
128
  else
@@ -130,10 +133,10 @@ module Mittsu
130
133
  end
131
134
  end
132
135
  self.compute_face_normals
133
- if geometry.boundingBox
136
+ if geometry.bounding_box
134
137
  @bounding_box = geometry.bounding_box.clone
135
138
  end
136
- if geometry.boundingSphere
139
+ if geometry.bounding_sphere
137
140
  @bounding_sphere = geometry.bounding_sphere.clone
138
141
  end
139
142
  self
@@ -160,12 +163,12 @@ module Mittsu
160
163
  end
161
164
  end
162
165
 
163
- def compute_vertex_normals(area_weigted)
166
+ def compute_vertex_normals(area_weighted = false)
164
167
  vertices = Array.new(@vertices.length)
165
168
  @vertices.length.times do |v|
166
169
  vertices[v] = Mittsu::Vector3.new
167
170
  end
168
- if area_weigted
171
+ if area_weighted
169
172
  # vertex normals weighted by triangle areas
170
173
  # http:#www.iquilezles.org/www/articles/normals/normals.htm
171
174
  cb = Mittsu::Vector3.new, ab = Mittsu::Vector3.new
@@ -426,12 +429,10 @@ module Mittsu
426
429
  face.b = changes[face.b]
427
430
  face.c = changes[face.c]
428
431
  indices = [face.a, face.b, face.c]
429
- dup_index = -1
430
432
  # if any duplicate vertices are found in a Face3
431
433
  # we have to remove the face as nothing can be saved
432
434
  3.times do |n|
433
435
  if indices[n] == indices[(n + 1) % 3]
434
- dup_index = n
435
436
  face_indices_to_remove << i
436
437
  break
437
438
  end
@@ -1,5 +1,4 @@
1
1
  require 'securerandom'
2
- require 'mittsu'
3
2
 
4
3
  module Mittsu
5
4
  class Object3D
@@ -22,6 +21,8 @@ module Mittsu
22
21
  @type = 'Object3D'
23
22
 
24
23
  @children = []
24
+ @parent = nil
25
+ @name = nil
25
26
 
26
27
  @up = DefaultUp.clone
27
28
 
@@ -55,6 +56,7 @@ module Mittsu
55
56
  @render_order = 0
56
57
 
57
58
  @user_data = {}
59
+ @_listeners = {}
58
60
  end
59
61
 
60
62
  def name
@@ -95,18 +97,18 @@ module Mittsu
95
97
  end
96
98
 
97
99
  def rotate_x(angle)
98
- @_v1 ||= Vector3.new(1, 0, 0)
99
- self.rotate_on_axis(@_v1, angle)
100
+ @_x_axis ||= Vector3.new(1, 0, 0)
101
+ self.rotate_on_axis(@_x_axis, angle)
100
102
  end
101
103
 
102
104
  def rotate_y(angle)
103
- @_v1 ||= Vector3.new(0, 1, 0)
104
- self.rotate_on_axis(@_v1, angle)
105
+ @_y_axis ||= Vector3.new(0, 1, 0)
106
+ self.rotate_on_axis(@_y_axis, angle)
105
107
  end
106
108
 
107
109
  def rotate_z(angle)
108
- @_v1 ||= Vector3.new(0, 0, 1)
109
- self.rotate_on_axis(@_v1, angle)
110
+ @_z_axis ||= Vector3.new(0, 0, 1)
111
+ self.rotate_on_axis(@_z_axis, angle)
110
112
  end
111
113
 
112
114
  def translate_on_axis(axis, distance)
@@ -1,5 +1,3 @@
1
- require 'mittsu'
2
-
3
1
  module Mittsu
4
2
  class Raycaster
5
3
  attr_accessor :near, :far, :ray, :params, :precision
@@ -1,2 +1,15 @@
1
1
  require 'mittsu/extras/geometries/box_geometry'
2
2
  require 'mittsu/extras/geometries/sphere_geometry'
3
+ require 'mittsu/extras/geometries/ring_geometry'
4
+ require 'mittsu/extras/geometries/circle_geometry'
5
+ require 'mittsu/extras/geometries/cylinder_geometry'
6
+ require 'mittsu/extras/geometries/dodecahedron_geometry'
7
+ require 'mittsu/extras/geometries/icosahedron_geometry'
8
+ require 'mittsu/extras/geometries/octahedron_geometry'
9
+ require 'mittsu/extras/geometries/tetrahedron_geometry'
10
+ require 'mittsu/extras/geometries/plane_buffer_geometry'
11
+ require 'mittsu/extras/geometries/plane_geometry'
12
+ require 'mittsu/extras/geometries/torus_geometry'
13
+ require 'mittsu/extras/geometries/torus_knot_geometry'
14
+ require 'mittsu/extras/geometries/parametric_geometry'
15
+ require 'mittsu/extras/geometries/lathe_geometry'
@@ -0,0 +1,48 @@
1
+ require 'mittsu/core'
2
+ require 'mittsu/math'
3
+
4
+ module Mittsu
5
+ class CircleGeometry < Geometry
6
+ def initialize(radius = 50.0, segments = 8, theta_start = 0.0, theta_length = (::Math::PI * 2.0))
7
+ super()
8
+
9
+ @type = 'CircleGeometry'
10
+
11
+ @parameters = {
12
+ radius: radius,
13
+ segments: segments,
14
+ theta_start: theta_start,
15
+ theta_length: theta_length
16
+ }
17
+
18
+ segments = [3, segments].max
19
+
20
+ center = Vector3.new
21
+ center_uv = Vector2.new(0.5, 0.5)
22
+
23
+ @vertices << center
24
+ uvs = [center_uv]
25
+
26
+ for i in 0..segments do
27
+ vertex = Vector3.new
28
+ segment = theta_start + i.to_f / segments.to_f * theta_length
29
+
30
+ vertex.x = radius * ::Math.cos(segment)
31
+ vertex.y = radius * ::Math.sin(segment)
32
+
33
+ @vertices << vertex
34
+ uvs << Vector2.new((vertex.x / radius + 1.0) / 2.0, (vertex.y / radius + 1.0) / 2.0)
35
+ end
36
+
37
+ n = Vector3.new
38
+
39
+ for i in 1..segments do
40
+ @faces << Face3.new(i, i + 1, 0, [n.clone, n.clone, n.clone])
41
+ @face_vertex_uvs[0] << [uvs[i].clone, uvs[i + 1].clone, center_uv.clone]
42
+ end
43
+
44
+ compute_face_normals
45
+ @bounding_sphere = Sphere.new(Vector3.new, radius)
46
+ end
47
+ end
48
+ end