three-rb 0.1.0
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 +7 -0
- data/CHANGELOG.md +19 -0
- data/LICENSE +21 -0
- data/README.md +153 -0
- data/docs/browser-runtime.md +153 -0
- data/docs/implementation-plan.md +874 -0
- data/docs/loaded-assets-design.md +400 -0
- data/docs/next-work.md +107 -0
- data/docs/publishing.md +64 -0
- data/docs/release-readiness.md +83 -0
- data/examples/browser/README.md +54 -0
- data/examples/browser/assets/animated_triangle.gltf +123 -0
- data/examples/browser/assets/checker.svg +11 -0
- data/examples/browser/assets/compressed_triangle.gltf +74 -0
- data/examples/browser/assets/studio.hdr +5 -0
- data/examples/browser/assets/triangle.gltf +67 -0
- data/examples/browser/composition/README.md +35 -0
- data/examples/browser/composition/boot.mjs +6 -0
- data/examples/browser/composition/index.html +136 -0
- data/examples/browser/composition/main.rb +216 -0
- data/examples/browser/composition/smoke_test.mjs +266 -0
- data/examples/browser/cube/README.md +41 -0
- data/examples/browser/cube/boot.mjs +6 -0
- data/examples/browser/cube/index.html +142 -0
- data/examples/browser/cube/main.rb +62 -0
- data/examples/browser/cube/smoke_test.mjs +99 -0
- data/examples/browser/cubemap/README.md +23 -0
- data/examples/browser/cubemap/boot.mjs +6 -0
- data/examples/browser/cubemap/index.html +142 -0
- data/examples/browser/cubemap/main.rb +84 -0
- data/examples/browser/cubemap/smoke_test.mjs +91 -0
- data/examples/browser/gltf/README.md +23 -0
- data/examples/browser/gltf/boot.mjs +6 -0
- data/examples/browser/gltf/index.html +142 -0
- data/examples/browser/gltf/main.rb +105 -0
- data/examples/browser/gltf/smoke_test.mjs +162 -0
- data/examples/browser/picking/README.md +33 -0
- data/examples/browser/picking/boot.mjs +6 -0
- data/examples/browser/picking/index.html +142 -0
- data/examples/browser/picking/main.rb +113 -0
- data/examples/browser/picking/smoke_test.mjs +78 -0
- data/examples/browser/postprocessing/README.md +26 -0
- data/examples/browser/postprocessing/boot.mjs +6 -0
- data/examples/browser/postprocessing/index.html +142 -0
- data/examples/browser/postprocessing/main.rb +117 -0
- data/examples/browser/postprocessing/smoke_test.mjs +121 -0
- data/examples/browser/primitives/README.md +33 -0
- data/examples/browser/primitives/boot.mjs +6 -0
- data/examples/browser/primitives/index.html +142 -0
- data/examples/browser/primitives/main.rb +116 -0
- data/examples/browser/primitives/smoke_test.mjs +113 -0
- data/examples/browser/serialization/README.md +33 -0
- data/examples/browser/serialization/boot.mjs +6 -0
- data/examples/browser/serialization/index.html +142 -0
- data/examples/browser/serialization/main.rb +97 -0
- data/examples/browser/serialization/smoke_test.mjs +67 -0
- data/examples/browser/shared/boot.mjs +79 -0
- data/examples/browser/shared/smoke_test_helpers.mjs +151 -0
- data/examples/browser/textures/README.md +35 -0
- data/examples/browser/textures/boot.mjs +6 -0
- data/examples/browser/textures/index.html +142 -0
- data/examples/browser/textures/main.rb +142 -0
- data/examples/browser/textures/smoke_test.mjs +189 -0
- data/lib/three/animation/animation_action.rb +57 -0
- data/lib/three/animation/animation_clip.rb +22 -0
- data/lib/three/animation/animation_mixer.rb +43 -0
- data/lib/three/backends/base.rb +87 -0
- data/lib/three/backends/threejs/materialization.rb +143 -0
- data/lib/three/backends/threejs/parameters.rb +97 -0
- data/lib/three/backends/threejs/resource_management.rb +69 -0
- data/lib/three/backends/threejs/ruby_wasm_adapter.rb +873 -0
- data/lib/three/backends/threejs/synchronization.rb +224 -0
- data/lib/three/backends/threejs.rb +365 -0
- data/lib/three/cameras/camera.rb +39 -0
- data/lib/three/cameras/orthographic_camera.rb +107 -0
- data/lib/three/cameras/perspective_camera.rb +137 -0
- data/lib/three/constants.rb +40 -0
- data/lib/three/controls/orbit_controls.rb +118 -0
- data/lib/three/core/buffer_attribute.rb +151 -0
- data/lib/three/core/buffer_geometry.rb +181 -0
- data/lib/three/core/clock.rb +58 -0
- data/lib/three/core/event_dispatcher.rb +57 -0
- data/lib/three/core/layers.rb +75 -0
- data/lib/three/core/object3d.rb +331 -0
- data/lib/three/core/raycaster.rb +73 -0
- data/lib/three/dirty.rb +58 -0
- data/lib/three/exporters/three_json_exporter.rb +187 -0
- data/lib/three/geometries/box_geometry.rb +97 -0
- data/lib/three/geometries/plane_geometry.rb +70 -0
- data/lib/three/geometries/sphere_geometry.rb +107 -0
- data/lib/three/lights/ambient_light.rb +12 -0
- data/lib/three/lights/directional_light.rb +38 -0
- data/lib/three/lights/hemisphere_light.rb +34 -0
- data/lib/three/lights/light.rb +85 -0
- data/lib/three/lights/point_light.rb +33 -0
- data/lib/three/loaders/cube_texture_loader.rb +13 -0
- data/lib/three/loaders/gltf_loader.rb +48 -0
- data/lib/three/loaders/rgbe_loader.rb +15 -0
- data/lib/three/loaders/texture_loader.rb +13 -0
- data/lib/three/loaders/three_json_loader.rb +409 -0
- data/lib/three/materials/line_basic_material.rb +65 -0
- data/lib/three/materials/material.rb +158 -0
- data/lib/three/materials/mesh_basic_material.rb +64 -0
- data/lib/three/materials/mesh_lambert_material.rb +71 -0
- data/lib/three/materials/mesh_matcap_material.rb +86 -0
- data/lib/three/materials/mesh_normal_material.rb +42 -0
- data/lib/three/materials/mesh_phong_material.rb +119 -0
- data/lib/three/materials/mesh_physical_material.rb +155 -0
- data/lib/three/materials/mesh_standard_material.rb +149 -0
- data/lib/three/materials/mesh_toon_material.rb +98 -0
- data/lib/three/materials/points_material.rb +74 -0
- data/lib/three/materials/shadow_material.rb +45 -0
- data/lib/three/materials/sprite_material.rb +75 -0
- data/lib/three/math/color.rb +133 -0
- data/lib/three/math/euler.rb +197 -0
- data/lib/three/math/math_utils.rb +36 -0
- data/lib/three/math/matrix3.rb +255 -0
- data/lib/three/math/matrix4.rb +448 -0
- data/lib/three/math/quaternion.rb +277 -0
- data/lib/three/math/vector2.rb +95 -0
- data/lib/three/math/vector3.rb +396 -0
- data/lib/three/objects/external_object3d.rb +28 -0
- data/lib/three/objects/group.rb +12 -0
- data/lib/three/objects/instanced_mesh.rb +110 -0
- data/lib/three/objects/line.rb +41 -0
- data/lib/three/objects/mesh.rb +45 -0
- data/lib/three/objects/points.rb +41 -0
- data/lib/three/objects/sprite.rb +57 -0
- data/lib/three/postprocessing/dot_screen_pass.rb +83 -0
- data/lib/three/postprocessing/effect_composer.rb +56 -0
- data/lib/three/postprocessing/output_pass.rb +40 -0
- data/lib/three/postprocessing/render_pass.rb +42 -0
- data/lib/three/postprocessing/unreal_bloom_pass.rb +56 -0
- data/lib/three/renderers/renderer.rb +11 -0
- data/lib/three/renderers/threejs_renderer.rb +85 -0
- data/lib/three/scenes/scene.rb +29 -0
- data/lib/three/textures/cube_texture.rb +72 -0
- data/lib/three/textures/rgbe_texture.rb +45 -0
- data/lib/three/textures/texture.rb +200 -0
- data/lib/three/version.rb +5 -0
- data/lib/three-rb.rb +3 -0
- data/lib/three.rb +77 -0
- data/package.json +30 -0
- data/pnpm-lock.yaml +86 -0
- metadata +216 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../core/event_dispatcher"
|
|
4
|
+
require_relative "../constants"
|
|
5
|
+
require_relative "../dirty"
|
|
6
|
+
require_relative "../math/math_utils"
|
|
7
|
+
require_relative "../math/matrix3"
|
|
8
|
+
require_relative "../math/vector2"
|
|
9
|
+
|
|
10
|
+
module Three
|
|
11
|
+
class Texture < EventDispatcher
|
|
12
|
+
include Dirty
|
|
13
|
+
|
|
14
|
+
@next_id = 0
|
|
15
|
+
|
|
16
|
+
class << self
|
|
17
|
+
attr_accessor :next_id
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
attr_reader :id, :uuid, :source, :mapping, :color_space, :flip_y, :wrap_s, :wrap_t, :mag_filter, :min_filter
|
|
21
|
+
attr_reader :offset, :repeat, :center, :rotation, :matrix_auto_update, :matrix
|
|
22
|
+
attr_accessor :user_data
|
|
23
|
+
|
|
24
|
+
def initialize(
|
|
25
|
+
source = nil,
|
|
26
|
+
mapping: Three::UVMapping,
|
|
27
|
+
color_space: Three::NoColorSpace,
|
|
28
|
+
flip_y: true,
|
|
29
|
+
wrap_s: Three::ClampToEdgeWrapping,
|
|
30
|
+
wrap_t: Three::ClampToEdgeWrapping,
|
|
31
|
+
mag_filter: Three::LinearFilter,
|
|
32
|
+
min_filter: Three::LinearMipmapLinearFilter,
|
|
33
|
+
offset: nil,
|
|
34
|
+
repeat: nil,
|
|
35
|
+
center: nil,
|
|
36
|
+
rotation: 0,
|
|
37
|
+
matrix_auto_update: true,
|
|
38
|
+
matrix: nil
|
|
39
|
+
)
|
|
40
|
+
super()
|
|
41
|
+
@id = self.class.allocate_id
|
|
42
|
+
@uuid = MathUtils.generate_uuid
|
|
43
|
+
@source = source
|
|
44
|
+
@mapping = mapping
|
|
45
|
+
@color_space = color_space
|
|
46
|
+
@flip_y = flip_y
|
|
47
|
+
@wrap_s = wrap_s
|
|
48
|
+
@wrap_t = wrap_t
|
|
49
|
+
@mag_filter = mag_filter
|
|
50
|
+
@min_filter = min_filter
|
|
51
|
+
@offset = coerce_vector2(offset || [0, 0], field: :offset)
|
|
52
|
+
@repeat = coerce_vector2(repeat || [1, 1], field: :repeat)
|
|
53
|
+
@center = coerce_vector2(center || [0, 0], field: :center)
|
|
54
|
+
@rotation = rotation
|
|
55
|
+
@matrix_auto_update = matrix_auto_update
|
|
56
|
+
@matrix = coerce_matrix3(matrix || Matrix3.new)
|
|
57
|
+
@user_data = {}
|
|
58
|
+
bind_vector_changes
|
|
59
|
+
mark_dirty!
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def source=(value)
|
|
63
|
+
@source = value
|
|
64
|
+
mark_dirty!(:parameters)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def mapping=(value)
|
|
68
|
+
@mapping = value
|
|
69
|
+
mark_dirty!(:parameters)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def color_space=(value)
|
|
73
|
+
@color_space = value
|
|
74
|
+
mark_dirty!(:parameters)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def flip_y=(value)
|
|
78
|
+
@flip_y = value
|
|
79
|
+
mark_dirty!(:parameters)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def wrap_s=(value)
|
|
83
|
+
@wrap_s = value
|
|
84
|
+
mark_dirty!(:parameters)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def wrap_t=(value)
|
|
88
|
+
@wrap_t = value
|
|
89
|
+
mark_dirty!(:parameters)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def mag_filter=(value)
|
|
93
|
+
@mag_filter = value
|
|
94
|
+
mark_dirty!(:parameters)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def min_filter=(value)
|
|
98
|
+
@min_filter = value
|
|
99
|
+
mark_dirty!(:parameters)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def repeat=(value)
|
|
103
|
+
@repeat = coerce_vector2(value, field: :repeat)
|
|
104
|
+
bind_vector_changes
|
|
105
|
+
mark_dirty!(:parameters)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def offset=(value)
|
|
109
|
+
@offset = coerce_vector2(value, field: :offset)
|
|
110
|
+
bind_vector_changes
|
|
111
|
+
mark_dirty!(:parameters)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def center=(value)
|
|
115
|
+
@center = coerce_vector2(value, field: :center)
|
|
116
|
+
bind_vector_changes
|
|
117
|
+
mark_dirty!(:parameters)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def rotation=(value)
|
|
121
|
+
@rotation = value
|
|
122
|
+
mark_dirty!(:parameters)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def matrix_auto_update=(value)
|
|
126
|
+
@matrix_auto_update = value
|
|
127
|
+
mark_dirty!(:parameters)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def matrix=(value)
|
|
131
|
+
@matrix = coerce_matrix3(value)
|
|
132
|
+
mark_dirty!(:parameters)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def update_matrix
|
|
136
|
+
@matrix.set_uv_transform(@offset.x, @offset.y, @repeat.x, @repeat.y, @rotation, @center.x, @center.y)
|
|
137
|
+
mark_dirty!(:parameters)
|
|
138
|
+
self
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def dispose
|
|
142
|
+
dispatch_event(:dispose)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def to_h
|
|
146
|
+
{
|
|
147
|
+
uuid: @uuid,
|
|
148
|
+
type: "Texture",
|
|
149
|
+
source: @source,
|
|
150
|
+
mapping: @mapping,
|
|
151
|
+
color_space: @color_space,
|
|
152
|
+
flip_y: @flip_y,
|
|
153
|
+
wrap_s: @wrap_s,
|
|
154
|
+
wrap_t: @wrap_t,
|
|
155
|
+
mag_filter: @mag_filter,
|
|
156
|
+
min_filter: @min_filter,
|
|
157
|
+
offset: @offset.to_a,
|
|
158
|
+
repeat: @repeat.to_a,
|
|
159
|
+
center: @center.to_a,
|
|
160
|
+
rotation: @rotation,
|
|
161
|
+
matrix_auto_update: @matrix_auto_update,
|
|
162
|
+
matrix: @matrix.to_a
|
|
163
|
+
}
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def self.allocate_id
|
|
167
|
+
id = Texture.next_id
|
|
168
|
+
Texture.next_id += 1
|
|
169
|
+
id
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
private
|
|
173
|
+
|
|
174
|
+
def coerce_vector2(value, field:)
|
|
175
|
+
return value if value.is_a?(Vector2)
|
|
176
|
+
|
|
177
|
+
array = value.to_ary if value.respond_to?(:to_ary)
|
|
178
|
+
array ||= value.to_a if value.respond_to?(:to_a)
|
|
179
|
+
return Vector2.new(array[0], array[1]) if array && array.length >= 2
|
|
180
|
+
|
|
181
|
+
raise TypeError, "#{field} must be a Three::Vector2 or an array-like [x, y]"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def coerce_matrix3(value)
|
|
185
|
+
return value if value.is_a?(Matrix3)
|
|
186
|
+
|
|
187
|
+
array = value.to_ary if value.respond_to?(:to_ary)
|
|
188
|
+
array ||= value.to_a if value.respond_to?(:to_a)
|
|
189
|
+
return Matrix3.new.from_array(array) if array && array.length >= 9
|
|
190
|
+
|
|
191
|
+
raise TypeError, "matrix must be a Three::Matrix3 or an array-like with 9 elements"
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def bind_vector_changes
|
|
195
|
+
@offset.on_change { mark_dirty!(:parameters) }
|
|
196
|
+
@repeat.on_change { mark_dirty!(:parameters) }
|
|
197
|
+
@center.on_change { mark_dirty!(:parameters) }
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
data/lib/three-rb.rb
ADDED
data/lib/three.rb
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "three/version"
|
|
4
|
+
require_relative "three/constants"
|
|
5
|
+
require_relative "three/dirty"
|
|
6
|
+
require_relative "three/math/math_utils"
|
|
7
|
+
require_relative "three/math/color"
|
|
8
|
+
require_relative "three/math/vector2"
|
|
9
|
+
require_relative "three/math/vector3"
|
|
10
|
+
require_relative "three/math/quaternion"
|
|
11
|
+
require_relative "three/math/matrix3"
|
|
12
|
+
require_relative "three/math/matrix4"
|
|
13
|
+
require_relative "three/math/euler"
|
|
14
|
+
require_relative "three/core/event_dispatcher"
|
|
15
|
+
require_relative "three/core/clock"
|
|
16
|
+
require_relative "three/core/layers"
|
|
17
|
+
require_relative "three/core/object3d"
|
|
18
|
+
require_relative "three/core/buffer_attribute"
|
|
19
|
+
require_relative "three/core/buffer_geometry"
|
|
20
|
+
require_relative "three/textures/texture"
|
|
21
|
+
require_relative "three/textures/cube_texture"
|
|
22
|
+
require_relative "three/textures/rgbe_texture"
|
|
23
|
+
require_relative "three/objects/external_object3d"
|
|
24
|
+
require_relative "three/objects/group"
|
|
25
|
+
require_relative "three/objects/mesh"
|
|
26
|
+
require_relative "three/objects/instanced_mesh"
|
|
27
|
+
require_relative "three/objects/line"
|
|
28
|
+
require_relative "three/objects/points"
|
|
29
|
+
require_relative "three/objects/sprite"
|
|
30
|
+
require_relative "three/scenes/scene"
|
|
31
|
+
require_relative "three/cameras/camera"
|
|
32
|
+
require_relative "three/cameras/perspective_camera"
|
|
33
|
+
require_relative "three/cameras/orthographic_camera"
|
|
34
|
+
require_relative "three/lights/light"
|
|
35
|
+
require_relative "three/lights/ambient_light"
|
|
36
|
+
require_relative "three/lights/directional_light"
|
|
37
|
+
require_relative "three/lights/point_light"
|
|
38
|
+
require_relative "three/lights/hemisphere_light"
|
|
39
|
+
require_relative "three/materials/material"
|
|
40
|
+
require_relative "three/materials/line_basic_material"
|
|
41
|
+
require_relative "three/materials/mesh_basic_material"
|
|
42
|
+
require_relative "three/materials/mesh_lambert_material"
|
|
43
|
+
require_relative "three/materials/mesh_matcap_material"
|
|
44
|
+
require_relative "three/materials/mesh_normal_material"
|
|
45
|
+
require_relative "three/materials/mesh_phong_material"
|
|
46
|
+
require_relative "three/materials/mesh_standard_material"
|
|
47
|
+
require_relative "three/materials/mesh_physical_material"
|
|
48
|
+
require_relative "three/materials/mesh_toon_material"
|
|
49
|
+
require_relative "three/materials/points_material"
|
|
50
|
+
require_relative "three/materials/shadow_material"
|
|
51
|
+
require_relative "three/materials/sprite_material"
|
|
52
|
+
require_relative "three/loaders/texture_loader"
|
|
53
|
+
require_relative "three/loaders/cube_texture_loader"
|
|
54
|
+
require_relative "three/loaders/rgbe_loader"
|
|
55
|
+
require_relative "three/loaders/gltf_loader"
|
|
56
|
+
require_relative "three/loaders/three_json_loader"
|
|
57
|
+
require_relative "three/geometries/box_geometry"
|
|
58
|
+
require_relative "three/geometries/plane_geometry"
|
|
59
|
+
require_relative "three/geometries/sphere_geometry"
|
|
60
|
+
require_relative "three/backends/base"
|
|
61
|
+
require_relative "three/backends/threejs"
|
|
62
|
+
require_relative "three/core/raycaster"
|
|
63
|
+
require_relative "three/animation/animation_clip"
|
|
64
|
+
require_relative "three/animation/animation_action"
|
|
65
|
+
require_relative "three/animation/animation_mixer"
|
|
66
|
+
require_relative "three/renderers/renderer"
|
|
67
|
+
require_relative "three/renderers/threejs_renderer"
|
|
68
|
+
require_relative "three/controls/orbit_controls"
|
|
69
|
+
require_relative "three/postprocessing/effect_composer"
|
|
70
|
+
require_relative "three/postprocessing/render_pass"
|
|
71
|
+
require_relative "three/postprocessing/unreal_bloom_pass"
|
|
72
|
+
require_relative "three/postprocessing/dot_screen_pass"
|
|
73
|
+
require_relative "three/postprocessing/output_pass"
|
|
74
|
+
require_relative "three/exporters/three_json_exporter"
|
|
75
|
+
|
|
76
|
+
module Three
|
|
77
|
+
end
|
data/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "three-rb",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@11.1.1",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test:browser": "pnpm test:browser:cube && pnpm test:browser:composition && pnpm test:browser:textures && pnpm test:browser:cubemap && pnpm test:browser:gltf && pnpm test:browser:serialization && pnpm test:browser:picking && pnpm test:browser:primitives && pnpm test:browser:postprocessing",
|
|
8
|
+
"test:browser:cube": "node examples/browser/cube/smoke_test.mjs",
|
|
9
|
+
"test:browser:composition": "node examples/browser/composition/smoke_test.mjs",
|
|
10
|
+
"test:browser:textures": "node examples/browser/textures/smoke_test.mjs",
|
|
11
|
+
"test:browser:cubemap": "node examples/browser/cubemap/smoke_test.mjs",
|
|
12
|
+
"test:browser:gltf": "node examples/browser/gltf/smoke_test.mjs",
|
|
13
|
+
"test:browser:serialization": "node examples/browser/serialization/smoke_test.mjs",
|
|
14
|
+
"test:browser:picking": "node examples/browser/picking/smoke_test.mjs",
|
|
15
|
+
"test:browser:primitives": "node examples/browser/primitives/smoke_test.mjs",
|
|
16
|
+
"test:browser:postprocessing": "node examples/browser/postprocessing/smoke_test.mjs",
|
|
17
|
+
"benchmark:browser": "pnpm benchmark:browser:mesh-sync && pnpm benchmark:browser:instanced-mesh-sync",
|
|
18
|
+
"benchmark:browser:mesh-sync": "node benchmarks/browser/mesh_sync/run.mjs",
|
|
19
|
+
"benchmark:browser:instanced-mesh-sync": "node benchmarks/browser/instanced_mesh_sync/run.mjs"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@bjorn3/browser_wasi_shim": "0.4.2",
|
|
23
|
+
"@ruby/3.4-wasm-wasi": "2.9.4-2026-05-11-a",
|
|
24
|
+
"@ruby/wasm-wasi": "2.9.4-2026-05-11-a",
|
|
25
|
+
"three": "0.184.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"playwright": "^1.60.0"
|
|
29
|
+
}
|
|
30
|
+
}
|
data/pnpm-lock.yaml
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
lockfileVersion: '9.0'
|
|
2
|
+
|
|
3
|
+
settings:
|
|
4
|
+
autoInstallPeers: true
|
|
5
|
+
excludeLinksFromLockfile: false
|
|
6
|
+
|
|
7
|
+
importers:
|
|
8
|
+
|
|
9
|
+
.:
|
|
10
|
+
dependencies:
|
|
11
|
+
'@bjorn3/browser_wasi_shim':
|
|
12
|
+
specifier: 0.4.2
|
|
13
|
+
version: 0.4.2
|
|
14
|
+
'@ruby/3.4-wasm-wasi':
|
|
15
|
+
specifier: 2.9.4-2026-05-11-a
|
|
16
|
+
version: 2.9.4-2026-05-11-a
|
|
17
|
+
'@ruby/wasm-wasi':
|
|
18
|
+
specifier: 2.9.4-2026-05-11-a
|
|
19
|
+
version: 2.9.4-2026-05-11-a
|
|
20
|
+
three:
|
|
21
|
+
specifier: 0.184.0
|
|
22
|
+
version: 0.184.0
|
|
23
|
+
devDependencies:
|
|
24
|
+
playwright:
|
|
25
|
+
specifier: ^1.60.0
|
|
26
|
+
version: 1.60.0
|
|
27
|
+
|
|
28
|
+
packages:
|
|
29
|
+
|
|
30
|
+
'@bjorn3/browser_wasi_shim@0.4.2':
|
|
31
|
+
resolution: {integrity: sha512-/iHkCVUG3VbcbmEHn5iIUpIrh7a7WPiwZ3sHy4HZKZzBdSadwdddYDZAII2zBvQYV0Lfi8naZngPCN7WPHI/hA==}
|
|
32
|
+
|
|
33
|
+
'@ruby/3.4-wasm-wasi@2.9.4-2026-05-11-a':
|
|
34
|
+
resolution: {integrity: sha512-qI32iuHxb1onVbbbfnZHOI109P13ZpvQf4KEMk4XyzVIDKYNHzJzwvRcZm6uPjtv9ekLeJBSSeqqImRP/sDNqQ==}
|
|
35
|
+
|
|
36
|
+
'@ruby/wasm-wasi@2.9.4-2026-05-11-a':
|
|
37
|
+
resolution: {integrity: sha512-DpS1BJFYldhSmy1gGa0GwD4cYw8qTu6FblQq6JVF0VVh+3ONPcvMGPHpVvwPeMve4tEsMkM6hOyTO8HshTcQ8Q==}
|
|
38
|
+
|
|
39
|
+
fsevents@2.3.2:
|
|
40
|
+
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
|
41
|
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
42
|
+
os: [darwin]
|
|
43
|
+
|
|
44
|
+
playwright-core@1.60.0:
|
|
45
|
+
resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==}
|
|
46
|
+
engines: {node: '>=18'}
|
|
47
|
+
hasBin: true
|
|
48
|
+
|
|
49
|
+
playwright@1.60.0:
|
|
50
|
+
resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==}
|
|
51
|
+
engines: {node: '>=18'}
|
|
52
|
+
hasBin: true
|
|
53
|
+
|
|
54
|
+
three@0.184.0:
|
|
55
|
+
resolution: {integrity: sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg==}
|
|
56
|
+
|
|
57
|
+
tslib@2.8.1:
|
|
58
|
+
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
|
59
|
+
|
|
60
|
+
snapshots:
|
|
61
|
+
|
|
62
|
+
'@bjorn3/browser_wasi_shim@0.4.2': {}
|
|
63
|
+
|
|
64
|
+
'@ruby/3.4-wasm-wasi@2.9.4-2026-05-11-a':
|
|
65
|
+
dependencies:
|
|
66
|
+
'@ruby/wasm-wasi': 2.9.4-2026-05-11-a
|
|
67
|
+
|
|
68
|
+
'@ruby/wasm-wasi@2.9.4-2026-05-11-a':
|
|
69
|
+
dependencies:
|
|
70
|
+
'@bjorn3/browser_wasi_shim': 0.4.2
|
|
71
|
+
tslib: 2.8.1
|
|
72
|
+
|
|
73
|
+
fsevents@2.3.2:
|
|
74
|
+
optional: true
|
|
75
|
+
|
|
76
|
+
playwright-core@1.60.0: {}
|
|
77
|
+
|
|
78
|
+
playwright@1.60.0:
|
|
79
|
+
dependencies:
|
|
80
|
+
playwright-core: 1.60.0
|
|
81
|
+
optionalDependencies:
|
|
82
|
+
fsevents: 2.3.2
|
|
83
|
+
|
|
84
|
+
three@0.184.0: {}
|
|
85
|
+
|
|
86
|
+
tslib@2.8.1: {}
|
metadata
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: three-rb
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- LEF
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: minitest
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '6.0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '6.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rake
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '13.0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '13.0'
|
|
40
|
+
description: three-rb provides Ruby APIs for building 3D scenes, with browser rendering
|
|
41
|
+
through ruby.wasm and three.js.
|
|
42
|
+
email: []
|
|
43
|
+
executables: []
|
|
44
|
+
extensions: []
|
|
45
|
+
extra_rdoc_files: []
|
|
46
|
+
files:
|
|
47
|
+
- CHANGELOG.md
|
|
48
|
+
- LICENSE
|
|
49
|
+
- README.md
|
|
50
|
+
- docs/browser-runtime.md
|
|
51
|
+
- docs/implementation-plan.md
|
|
52
|
+
- docs/loaded-assets-design.md
|
|
53
|
+
- docs/next-work.md
|
|
54
|
+
- docs/publishing.md
|
|
55
|
+
- docs/release-readiness.md
|
|
56
|
+
- examples/browser/README.md
|
|
57
|
+
- examples/browser/assets/animated_triangle.gltf
|
|
58
|
+
- examples/browser/assets/checker.svg
|
|
59
|
+
- examples/browser/assets/compressed_triangle.gltf
|
|
60
|
+
- examples/browser/assets/studio.hdr
|
|
61
|
+
- examples/browser/assets/triangle.gltf
|
|
62
|
+
- examples/browser/composition/README.md
|
|
63
|
+
- examples/browser/composition/boot.mjs
|
|
64
|
+
- examples/browser/composition/index.html
|
|
65
|
+
- examples/browser/composition/main.rb
|
|
66
|
+
- examples/browser/composition/smoke_test.mjs
|
|
67
|
+
- examples/browser/cube/README.md
|
|
68
|
+
- examples/browser/cube/boot.mjs
|
|
69
|
+
- examples/browser/cube/index.html
|
|
70
|
+
- examples/browser/cube/main.rb
|
|
71
|
+
- examples/browser/cube/smoke_test.mjs
|
|
72
|
+
- examples/browser/cubemap/README.md
|
|
73
|
+
- examples/browser/cubemap/boot.mjs
|
|
74
|
+
- examples/browser/cubemap/index.html
|
|
75
|
+
- examples/browser/cubemap/main.rb
|
|
76
|
+
- examples/browser/cubemap/smoke_test.mjs
|
|
77
|
+
- examples/browser/gltf/README.md
|
|
78
|
+
- examples/browser/gltf/boot.mjs
|
|
79
|
+
- examples/browser/gltf/index.html
|
|
80
|
+
- examples/browser/gltf/main.rb
|
|
81
|
+
- examples/browser/gltf/smoke_test.mjs
|
|
82
|
+
- examples/browser/picking/README.md
|
|
83
|
+
- examples/browser/picking/boot.mjs
|
|
84
|
+
- examples/browser/picking/index.html
|
|
85
|
+
- examples/browser/picking/main.rb
|
|
86
|
+
- examples/browser/picking/smoke_test.mjs
|
|
87
|
+
- examples/browser/postprocessing/README.md
|
|
88
|
+
- examples/browser/postprocessing/boot.mjs
|
|
89
|
+
- examples/browser/postprocessing/index.html
|
|
90
|
+
- examples/browser/postprocessing/main.rb
|
|
91
|
+
- examples/browser/postprocessing/smoke_test.mjs
|
|
92
|
+
- examples/browser/primitives/README.md
|
|
93
|
+
- examples/browser/primitives/boot.mjs
|
|
94
|
+
- examples/browser/primitives/index.html
|
|
95
|
+
- examples/browser/primitives/main.rb
|
|
96
|
+
- examples/browser/primitives/smoke_test.mjs
|
|
97
|
+
- examples/browser/serialization/README.md
|
|
98
|
+
- examples/browser/serialization/boot.mjs
|
|
99
|
+
- examples/browser/serialization/index.html
|
|
100
|
+
- examples/browser/serialization/main.rb
|
|
101
|
+
- examples/browser/serialization/smoke_test.mjs
|
|
102
|
+
- examples/browser/shared/boot.mjs
|
|
103
|
+
- examples/browser/shared/smoke_test_helpers.mjs
|
|
104
|
+
- examples/browser/textures/README.md
|
|
105
|
+
- examples/browser/textures/boot.mjs
|
|
106
|
+
- examples/browser/textures/index.html
|
|
107
|
+
- examples/browser/textures/main.rb
|
|
108
|
+
- examples/browser/textures/smoke_test.mjs
|
|
109
|
+
- lib/three-rb.rb
|
|
110
|
+
- lib/three.rb
|
|
111
|
+
- lib/three/animation/animation_action.rb
|
|
112
|
+
- lib/three/animation/animation_clip.rb
|
|
113
|
+
- lib/three/animation/animation_mixer.rb
|
|
114
|
+
- lib/three/backends/base.rb
|
|
115
|
+
- lib/three/backends/threejs.rb
|
|
116
|
+
- lib/three/backends/threejs/materialization.rb
|
|
117
|
+
- lib/three/backends/threejs/parameters.rb
|
|
118
|
+
- lib/three/backends/threejs/resource_management.rb
|
|
119
|
+
- lib/three/backends/threejs/ruby_wasm_adapter.rb
|
|
120
|
+
- lib/three/backends/threejs/synchronization.rb
|
|
121
|
+
- lib/three/cameras/camera.rb
|
|
122
|
+
- lib/three/cameras/orthographic_camera.rb
|
|
123
|
+
- lib/three/cameras/perspective_camera.rb
|
|
124
|
+
- lib/three/constants.rb
|
|
125
|
+
- lib/three/controls/orbit_controls.rb
|
|
126
|
+
- lib/three/core/buffer_attribute.rb
|
|
127
|
+
- lib/three/core/buffer_geometry.rb
|
|
128
|
+
- lib/three/core/clock.rb
|
|
129
|
+
- lib/three/core/event_dispatcher.rb
|
|
130
|
+
- lib/three/core/layers.rb
|
|
131
|
+
- lib/three/core/object3d.rb
|
|
132
|
+
- lib/three/core/raycaster.rb
|
|
133
|
+
- lib/three/dirty.rb
|
|
134
|
+
- lib/three/exporters/three_json_exporter.rb
|
|
135
|
+
- lib/three/geometries/box_geometry.rb
|
|
136
|
+
- lib/three/geometries/plane_geometry.rb
|
|
137
|
+
- lib/three/geometries/sphere_geometry.rb
|
|
138
|
+
- lib/three/lights/ambient_light.rb
|
|
139
|
+
- lib/three/lights/directional_light.rb
|
|
140
|
+
- lib/three/lights/hemisphere_light.rb
|
|
141
|
+
- lib/three/lights/light.rb
|
|
142
|
+
- lib/three/lights/point_light.rb
|
|
143
|
+
- lib/three/loaders/cube_texture_loader.rb
|
|
144
|
+
- lib/three/loaders/gltf_loader.rb
|
|
145
|
+
- lib/three/loaders/rgbe_loader.rb
|
|
146
|
+
- lib/three/loaders/texture_loader.rb
|
|
147
|
+
- lib/three/loaders/three_json_loader.rb
|
|
148
|
+
- lib/three/materials/line_basic_material.rb
|
|
149
|
+
- lib/three/materials/material.rb
|
|
150
|
+
- lib/three/materials/mesh_basic_material.rb
|
|
151
|
+
- lib/three/materials/mesh_lambert_material.rb
|
|
152
|
+
- lib/three/materials/mesh_matcap_material.rb
|
|
153
|
+
- lib/three/materials/mesh_normal_material.rb
|
|
154
|
+
- lib/three/materials/mesh_phong_material.rb
|
|
155
|
+
- lib/three/materials/mesh_physical_material.rb
|
|
156
|
+
- lib/three/materials/mesh_standard_material.rb
|
|
157
|
+
- lib/three/materials/mesh_toon_material.rb
|
|
158
|
+
- lib/three/materials/points_material.rb
|
|
159
|
+
- lib/three/materials/shadow_material.rb
|
|
160
|
+
- lib/three/materials/sprite_material.rb
|
|
161
|
+
- lib/three/math/color.rb
|
|
162
|
+
- lib/three/math/euler.rb
|
|
163
|
+
- lib/three/math/math_utils.rb
|
|
164
|
+
- lib/three/math/matrix3.rb
|
|
165
|
+
- lib/three/math/matrix4.rb
|
|
166
|
+
- lib/three/math/quaternion.rb
|
|
167
|
+
- lib/three/math/vector2.rb
|
|
168
|
+
- lib/three/math/vector3.rb
|
|
169
|
+
- lib/three/objects/external_object3d.rb
|
|
170
|
+
- lib/three/objects/group.rb
|
|
171
|
+
- lib/three/objects/instanced_mesh.rb
|
|
172
|
+
- lib/three/objects/line.rb
|
|
173
|
+
- lib/three/objects/mesh.rb
|
|
174
|
+
- lib/three/objects/points.rb
|
|
175
|
+
- lib/three/objects/sprite.rb
|
|
176
|
+
- lib/three/postprocessing/dot_screen_pass.rb
|
|
177
|
+
- lib/three/postprocessing/effect_composer.rb
|
|
178
|
+
- lib/three/postprocessing/output_pass.rb
|
|
179
|
+
- lib/three/postprocessing/render_pass.rb
|
|
180
|
+
- lib/three/postprocessing/unreal_bloom_pass.rb
|
|
181
|
+
- lib/three/renderers/renderer.rb
|
|
182
|
+
- lib/three/renderers/threejs_renderer.rb
|
|
183
|
+
- lib/three/scenes/scene.rb
|
|
184
|
+
- lib/three/textures/cube_texture.rb
|
|
185
|
+
- lib/three/textures/rgbe_texture.rb
|
|
186
|
+
- lib/three/textures/texture.rb
|
|
187
|
+
- lib/three/version.rb
|
|
188
|
+
- package.json
|
|
189
|
+
- pnpm-lock.yaml
|
|
190
|
+
homepage: https://github.com/lef237/three-rb
|
|
191
|
+
licenses:
|
|
192
|
+
- MIT
|
|
193
|
+
metadata:
|
|
194
|
+
homepage_uri: https://github.com/lef237/three-rb
|
|
195
|
+
source_code_uri: https://github.com/lef237/three-rb/tree/main
|
|
196
|
+
changelog_uri: https://github.com/lef237/three-rb/blob/main/CHANGELOG.md
|
|
197
|
+
bug_tracker_uri: https://github.com/lef237/three-rb/issues
|
|
198
|
+
rubygems_mfa_required: 'true'
|
|
199
|
+
rdoc_options: []
|
|
200
|
+
require_paths:
|
|
201
|
+
- lib
|
|
202
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
203
|
+
requirements:
|
|
204
|
+
- - ">="
|
|
205
|
+
- !ruby/object:Gem::Version
|
|
206
|
+
version: '3.2'
|
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
|
+
requirements:
|
|
209
|
+
- - ">="
|
|
210
|
+
- !ruby/object:Gem::Version
|
|
211
|
+
version: '0'
|
|
212
|
+
requirements: []
|
|
213
|
+
rubygems_version: 3.6.9
|
|
214
|
+
specification_version: 4
|
|
215
|
+
summary: Ruby 3D library inspired by three.js.
|
|
216
|
+
test_files: []
|