mittsu 0.4.0 → 0.4.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.
- checksums.yaml +4 -4
- data/.github/workflows/build-workflow.yml +11 -15
- data/lib/mittsu/core/geometry.rb +3 -3
- data/lib/mittsu/core/object_3d.rb +29 -47
- data/lib/mittsu/loaders/obj_loader.rb +11 -5
- data/lib/mittsu/math/box3.rb +4 -4
- data/lib/mittsu/objects/line.rb +1 -3
- data/lib/mittsu/objects/mesh.rb +9 -12
- data/lib/mittsu/objects/point_cloud.rb +3 -3
- data/lib/mittsu/renderers/generic_lib.rb +4 -1
- data/lib/mittsu/renderers/glfw_lib.rb +5 -3
- data/lib/mittsu/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 806e8ad78d34edc7dfa72cbe35414c0fe765628b5dd074d691d5bf0f45dd52cb
|
4
|
+
data.tar.gz: b477a885ca405bd5ad8b71464b06ce794567c00abceb56738f3ace06885fe4d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d65b207aaaf6136a1e6d7fd39237bd5710192748338eb388fd974d4128069cbc41b6df4132bc2597793f507ed7349abdb0f3d28e9df1584ff9d4e1f9a39c8bc2
|
7
|
+
data.tar.gz: b4eb049497dc7f46d4285d8d8d677f3221f08d904dcc21b1efa3e7044edea42a1d49e8979d74bd26c3bc9470598fd9755c460865cc324ce71b6c87fec036d07e
|
@@ -13,17 +13,16 @@ jobs:
|
|
13
13
|
runs-on: ubuntu-latest
|
14
14
|
strategy:
|
15
15
|
matrix:
|
16
|
-
ruby: ['2.6', '2.7', '3.0', '3.1', 'head']
|
16
|
+
ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
|
17
17
|
steps:
|
18
|
-
- uses: actions/checkout@
|
18
|
+
- uses: actions/checkout@v4
|
19
|
+
- uses: awalsh128/cache-apt-pkgs-action@v1
|
20
|
+
with:
|
21
|
+
packages: libglfw3
|
19
22
|
- uses: ruby/setup-ruby@v1
|
20
23
|
with:
|
21
24
|
ruby-version: ${{ matrix.ruby }}
|
22
25
|
bundler-cache: true
|
23
|
-
- run: sudo apt-get update; sudo apt-get install cmake xorg-dev libgl1-mesa-dev
|
24
|
-
- run: bash install-glfw.sh
|
25
|
-
- run: gem install bundler
|
26
|
-
- run: bundle install --path vendor/bundle
|
27
26
|
- name: Test & publish code coverage
|
28
27
|
uses: paambaati/codeclimate-action@v2.2.1
|
29
28
|
if: github.event_name == 'push'
|
@@ -40,15 +39,14 @@ jobs:
|
|
40
39
|
runs-on: macos-latest
|
41
40
|
strategy:
|
42
41
|
matrix:
|
43
|
-
ruby: ['2.6', '2.7', '3.0', '3.1', 'head']
|
42
|
+
ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
|
44
43
|
steps:
|
45
|
-
- uses: actions/checkout@
|
44
|
+
- uses: actions/checkout@v4
|
45
|
+
- run: brew install glfw
|
46
46
|
- uses: ruby/setup-ruby@v1
|
47
47
|
with:
|
48
48
|
ruby-version: ${{ matrix.ruby }}
|
49
49
|
bundler-cache: true
|
50
|
-
- run: brew install glfw
|
51
|
-
- run: bundle install --path vendor/bundle
|
52
50
|
- run: bundle exec rake test
|
53
51
|
|
54
52
|
windows:
|
@@ -58,14 +56,12 @@ jobs:
|
|
58
56
|
MITTSU_LIBGLFW_PATH: c:\projects\mittsu\glfw-3.3.1.bin.WIN32\lib-mingw
|
59
57
|
strategy:
|
60
58
|
matrix:
|
61
|
-
ruby: ['2.6', '2.7', '3.0', '3.1', 'head']
|
59
|
+
ruby: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3', 'head']
|
62
60
|
steps:
|
63
|
-
- uses: actions/checkout@
|
61
|
+
- uses: actions/checkout@v4
|
62
|
+
- run: .\install-glfw.ps1
|
64
63
|
- uses: ruby/setup-ruby@v1
|
65
64
|
with:
|
66
65
|
ruby-version: ${{ matrix.ruby }}
|
67
66
|
bundler-cache: true
|
68
|
-
- run: .\install-glfw.ps1
|
69
|
-
- run: gem install bundler
|
70
|
-
- run: bundle install --path vendor/bundle
|
71
67
|
- run: bundle exec rake test
|
data/lib/mittsu/core/geometry.rb
CHANGED
@@ -397,7 +397,7 @@ module Mittsu
|
|
397
397
|
end
|
398
398
|
|
399
399
|
def merge_mesh(mesh)
|
400
|
-
if mesh
|
400
|
+
if mesh.is_a?(Mittsu::Mesh) == false
|
401
401
|
puts('ERROR: Mittsu::Geometry#merge_mesh: mesh not an instance of Mittsu::Mesh.', mesh.inspect)
|
402
402
|
return
|
403
403
|
end
|
@@ -469,7 +469,7 @@ module Mittsu
|
|
469
469
|
end
|
470
470
|
vertices = []
|
471
471
|
@vertices.each do |vert|
|
472
|
-
vertices <<
|
472
|
+
vertices << vert.x << vert.y << vert.z
|
473
473
|
end
|
474
474
|
faces = []
|
475
475
|
normals = []
|
@@ -507,7 +507,7 @@ module Mittsu
|
|
507
507
|
faces << get_uv_index(face_vertex_uvs[2], uvs_hash, uvs)
|
508
508
|
end
|
509
509
|
if has_face_normal
|
510
|
-
faces << get_normal_index(face.normal)
|
510
|
+
faces << get_normal_index(face.normal, normals_hash, normals)
|
511
511
|
end
|
512
512
|
if has_face_vertex_normal
|
513
513
|
vertex_normals = face.vertex_normals
|
@@ -305,17 +305,13 @@ module Mittsu
|
|
305
305
|
end
|
306
306
|
|
307
307
|
def to_json
|
308
|
-
|
308
|
+
{
|
309
309
|
metadata: {
|
310
310
|
version: 4.3,
|
311
311
|
type: 'Object',
|
312
312
|
generator: 'ObjectExporter'
|
313
|
-
}
|
314
|
-
}
|
315
|
-
@_geometries = {}
|
316
|
-
@_materials = {}
|
317
|
-
@_output[:object] = self.jsonify
|
318
|
-
@_output
|
313
|
+
},
|
314
|
+
}.merge(jsonify)
|
319
315
|
end
|
320
316
|
|
321
317
|
def clone(object = nil, recursive = true)
|
@@ -346,46 +342,32 @@ module Mittsu
|
|
346
342
|
protected
|
347
343
|
|
348
344
|
def jsonify
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
@_output[:geometries] << json
|
376
|
-
end
|
377
|
-
geometry.uuid
|
378
|
-
end
|
379
|
-
|
380
|
-
def jsonify_material(material)
|
381
|
-
@_output[:materials] ||= []
|
382
|
-
if @_materials[material.uuid].nil?
|
383
|
-
json = material.to_json
|
384
|
-
json.delete :metadata
|
385
|
-
@_materials[material.uuid] = json
|
386
|
-
@_output[:materials] << json
|
387
|
-
end
|
388
|
-
material.uuid
|
345
|
+
children = @children.map(&:to_json)
|
346
|
+
{
|
347
|
+
object: {
|
348
|
+
uuid: @uuid,
|
349
|
+
type: @type,
|
350
|
+
matrix: @matrix.to_a,
|
351
|
+
geometry: @geometry&.uuid,
|
352
|
+
material: @material&.uuid,
|
353
|
+
name: @name&.empty? ? nil : @name,
|
354
|
+
user_data: @user_data&.empty? ? nil : @user_data,
|
355
|
+
visible: @visible ? nil : @visible,
|
356
|
+
children: children.map { |x| x[:object] }.flatten
|
357
|
+
}.reject { |k,v| v.nil? || v == [] },
|
358
|
+
geometries: ([jsonify_geometry] + children.map { |x| x[:geometries] }).flatten.compact,
|
359
|
+
materials: ([jsonify_material] + children.map { |x| x[:materials] }).flatten.compact
|
360
|
+
}.reject { |k,v| v.nil? || v == [] }
|
361
|
+
end
|
362
|
+
|
363
|
+
def jsonify_geometry
|
364
|
+
return nil if @geometry.nil?
|
365
|
+
@geometry.to_json.delete_if {|k, v| k == :metadata }
|
366
|
+
end
|
367
|
+
|
368
|
+
def jsonify_material
|
369
|
+
return nil if @material.nil?
|
370
|
+
@material.to_json.delete_if {|k, v| k == :metadata }
|
389
371
|
end
|
390
372
|
end
|
391
373
|
end
|
@@ -53,7 +53,7 @@ module Mittsu
|
|
53
53
|
|
54
54
|
when FACE_PATTERN then parse_face(line)
|
55
55
|
|
56
|
-
when OBJECT_PATTERN then
|
56
|
+
when OBJECT_PATTERN then handle_object($1)
|
57
57
|
when GROUP_PATTERN # ignore
|
58
58
|
when SMOOTH_GROUP_PATTERN # ignore
|
59
59
|
|
@@ -105,9 +105,15 @@ module Mittsu
|
|
105
105
|
raw_lines.split("\n").map(&:strip).reject(&:empty?).reject{|l| l.start_with? '#'}
|
106
106
|
end
|
107
107
|
|
108
|
-
def
|
109
|
-
|
110
|
-
|
108
|
+
def handle_object(object_name = '')
|
109
|
+
# Reset if we're already working on a named object
|
110
|
+
# otherwise, just name the one we have in progress
|
111
|
+
unless @object&.name.nil?
|
112
|
+
end_object
|
113
|
+
reset_vertices
|
114
|
+
@object = nil
|
115
|
+
end
|
116
|
+
@object ||= Object3D.new
|
111
117
|
@object.name = object_name
|
112
118
|
end
|
113
119
|
|
@@ -120,7 +126,7 @@ module Mittsu
|
|
120
126
|
|
121
127
|
def new_mesh
|
122
128
|
end_mesh
|
123
|
-
|
129
|
+
handle_object if @object.nil?
|
124
130
|
@geometry = Geometry.new
|
125
131
|
@mesh = Mesh.new(@geometry, @material || MeshLambertMaterial.new)
|
126
132
|
@mesh.name = @object.name
|
data/lib/mittsu/math/box3.rb
CHANGED
@@ -38,18 +38,18 @@ module Mittsu
|
|
38
38
|
object.traverse do |node|
|
39
39
|
geometry = node.geometry
|
40
40
|
if geometry != nil
|
41
|
-
if geometry
|
41
|
+
if geometry.is_a?(Mittsu::Geometry)
|
42
42
|
vertices = geometry.vertices
|
43
43
|
vertices.each do |vertex|
|
44
44
|
v1.copy(vertex)
|
45
|
-
v1.apply_matrix4(node.
|
45
|
+
v1.apply_matrix4(node.matrix_world)
|
46
46
|
scope.expand_by_point(v1)
|
47
47
|
end
|
48
|
-
elsif geometry
|
48
|
+
elsif geometry.is_a?(Mittsu::BufferGeometry) && geometry.attributes['position'] != nil
|
49
49
|
positions = geometry.attributes['position'].array
|
50
50
|
positions.each_slice(3) do |postition|
|
51
51
|
v1.set(position[0], position[1], position[2])
|
52
|
-
v1.apply_matrix4(node.
|
52
|
+
v1.apply_matrix4(node.matrix_world)
|
53
53
|
scope.expand_by_point(v1)
|
54
54
|
end
|
55
55
|
end
|
data/lib/mittsu/objects/line.rb
CHANGED
@@ -143,9 +143,7 @@ module Mittsu
|
|
143
143
|
|
144
144
|
def jsonify
|
145
145
|
data = super
|
146
|
-
data[:
|
147
|
-
data[:material] = jsonify_material(self.material)
|
148
|
-
data[:mode] = self.mode
|
146
|
+
data[:object][:mode] = self.mode
|
149
147
|
data
|
150
148
|
end
|
151
149
|
end
|
data/lib/mittsu/objects/mesh.rb
CHANGED
@@ -98,7 +98,7 @@ module Mittsu
|
|
98
98
|
@_ray.copy(raycaster.ray).apply_matrix4(@_inverse_matrix)
|
99
99
|
|
100
100
|
if !geometry.bounding_box.nil?
|
101
|
-
return unless
|
101
|
+
return unless @_ray.intersection_box?(geometry.bounding_box)
|
102
102
|
end
|
103
103
|
|
104
104
|
|
@@ -132,16 +132,16 @@ module Mittsu
|
|
132
132
|
v_c.from_array(positions, c * 3)
|
133
133
|
|
134
134
|
if material.side == BackSide
|
135
|
-
intersection_point =
|
135
|
+
intersection_point = @_ray.intersect_triangle(v_c, v_b, v_a, true)
|
136
136
|
else
|
137
|
-
intersection_point =
|
137
|
+
intersection_point = @_ray.intersect_triangle(v_a, v_b, v_c, material.side != DoubleSide)
|
138
138
|
end
|
139
139
|
|
140
140
|
next if intersection_point.nil?
|
141
141
|
|
142
142
|
intersection_point.apply_matrix4(@matrix_world)
|
143
143
|
|
144
|
-
distance =
|
144
|
+
distance = raycaster.ray.origin.distance_to(intersection_point)
|
145
145
|
|
146
146
|
next if distance < precision || distance < raycaster.near || distance > raycaster.far
|
147
147
|
|
@@ -170,17 +170,17 @@ module Mittsu
|
|
170
170
|
v_b.from_array(positions, j + 3)
|
171
171
|
v_c.from_array(positions, j + 6)
|
172
172
|
|
173
|
-
if material.side
|
174
|
-
intersection_point =
|
173
|
+
if material.side == BackSide
|
174
|
+
intersection_point = @_ray.intersect_triangle(v_c, v_b, v_a, true)
|
175
175
|
else
|
176
|
-
intersection_point =
|
176
|
+
intersection_point = @_ray.intersect_triangle(v_a, v_b, v_c, material.side != DoubleSide)
|
177
177
|
end
|
178
178
|
|
179
179
|
next if intersection_point.nil?
|
180
180
|
|
181
181
|
intersection_point.apply_matrix4(@matrix_world)
|
182
182
|
|
183
|
-
distance =
|
183
|
+
distance = raycaster.ray.origin.distance_to(intersection_point)
|
184
184
|
|
185
185
|
next if distance < precision || distance < raycaster.near || distance > raycaster.far
|
186
186
|
|
@@ -269,10 +269,7 @@ module Mittsu
|
|
269
269
|
protected
|
270
270
|
|
271
271
|
def jsonify
|
272
|
-
|
273
|
-
data[:geometry] = jsonify_geometry(@geometry)
|
274
|
-
data[:material] = jsonify_material(@material)
|
275
|
-
data
|
272
|
+
super
|
276
273
|
end
|
277
274
|
end
|
278
275
|
end
|
@@ -16,11 +16,11 @@ module Mittsu
|
|
16
16
|
|
17
17
|
def raycast(raycaster, intersects)
|
18
18
|
threshold = raycaster.params[:point_cloud][:threshold]
|
19
|
-
@_inverse_matrix.inverse(self.
|
19
|
+
@_inverse_matrix.inverse(self.matrix_world)
|
20
20
|
@_ray.copy(raycaster.ray).apply_matrix4(@_inverse_matrix)
|
21
21
|
|
22
22
|
if !geometry.bounding_box.nil?
|
23
|
-
return if
|
23
|
+
return if @_ray.intersection_box?(geometry.bounding_box) == false
|
24
24
|
end
|
25
25
|
|
26
26
|
local_threshold = threshold / ((self.scale.x + self.scale.y + self.scale.z) / 3.0)
|
@@ -82,7 +82,7 @@ module Mittsu
|
|
82
82
|
def test_point(point, index, local_threshold, raycaster, intersects)
|
83
83
|
ray_point_distance = @_ray.distance_to_point(point)
|
84
84
|
if ray_point_distance < local_threshold
|
85
|
-
intersect_point = @_ray.
|
85
|
+
intersect_point = @_ray.closest_point_to_point(point)
|
86
86
|
intersect_point.apply_matrix4(self.matrix_world)
|
87
87
|
|
88
88
|
distance = raycaster.ray.origin.distance_to(intersect_point)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
1
3
|
module Mittsu
|
2
4
|
module GenericLib
|
3
5
|
def discover
|
@@ -32,7 +34,8 @@ module Mittsu
|
|
32
34
|
|
33
35
|
class << self
|
34
36
|
def kernel_module_in_use
|
35
|
-
lspci_line =
|
37
|
+
lspci_line, stderr, _status = Open3.capture3("lspci -nnk | grep -i vga -A3 | grep 'in use'")
|
38
|
+
puts stderr if DEBUG
|
36
39
|
/in use:\s*(\S+)/ =~ lspci_line && $1
|
37
40
|
rescue
|
38
41
|
''
|
@@ -17,7 +17,9 @@ module Mittsu
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def ldconfig
|
20
|
-
|
20
|
+
out, stderr, _status = Open3.capture3("ldconfig -p | grep 'libglfw3\\?\\.so'")
|
21
|
+
puts stderr if DEBUG
|
22
|
+
out.lines
|
21
23
|
rescue
|
22
24
|
[]
|
23
25
|
end
|
@@ -36,11 +38,11 @@ module Mittsu
|
|
36
38
|
'/opt/homebrew/**']
|
37
39
|
|
38
40
|
def path
|
39
|
-
File.dirname(match)
|
41
|
+
File.dirname(match.to_s)
|
40
42
|
end
|
41
43
|
|
42
44
|
def file
|
43
|
-
File.basename(match)
|
45
|
+
File.basename(match.to_s)
|
44
46
|
end
|
45
47
|
|
46
48
|
private
|
data/lib/mittsu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mittsu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danielle Smith
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opengl-bindings
|
@@ -411,7 +411,7 @@ licenses:
|
|
411
411
|
- MIT
|
412
412
|
metadata:
|
413
413
|
bug_tracker: https://github.com/danini-the-panini/mittsu/issues
|
414
|
-
post_install_message:
|
414
|
+
post_install_message:
|
415
415
|
rdoc_options: []
|
416
416
|
require_paths:
|
417
417
|
- lib
|
@@ -427,8 +427,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
427
427
|
version: '0'
|
428
428
|
requirements:
|
429
429
|
- OpenGL 3.3+ capable hardware and drivers
|
430
|
-
rubygems_version: 3.
|
431
|
-
signing_key:
|
430
|
+
rubygems_version: 3.5.23
|
431
|
+
signing_key:
|
432
432
|
specification_version: 4
|
433
433
|
summary: 3D Graphics Library for Ruby
|
434
434
|
test_files: []
|