mittsu 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|