mittsu 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/mittsu.rb +8 -0
- data/lib/mittsu/core/face3.rb +1 -1
- data/lib/mittsu/core/geometry.rb +0 -4
- data/lib/mittsu/core/object_3d.rb +7 -6
- data/lib/mittsu/extras/helpers/camera_helper.rb +2 -2
- data/lib/mittsu/materials/material.rb +0 -4
- data/lib/mittsu/renderers/opengl/core/{opengl_geometry.rb → geometry.rb} +23 -32
- data/lib/mittsu/renderers/opengl/core/{opengl_object_3d.rb → object_3d.rb} +20 -24
- data/lib/mittsu/renderers/opengl/lights/{opengl_ambient_light.rb → ambient_light.rb} +4 -4
- data/lib/mittsu/renderers/opengl/lights/{opengl_directional_light.rb → directional_light.rb} +4 -4
- data/lib/mittsu/renderers/opengl/lights/{opengl_hemisphere_light.rb → hemisphere_light.rb} +4 -7
- data/lib/mittsu/renderers/opengl/lights/light.rb +55 -0
- data/lib/mittsu/renderers/opengl/lights/{opengl_point_light.rb → point_light.rb} +5 -5
- data/lib/mittsu/renderers/opengl/lights/{opengl_spot_light.rb → spot_light.rb} +8 -8
- data/lib/mittsu/renderers/opengl/materials/{opengl_line_basic_material.rb → line_basic_material.rb} +3 -3
- data/lib/mittsu/renderers/opengl/materials/{opengl_material.rb → material.rb} +55 -56
- data/lib/mittsu/renderers/opengl/materials/mesh_basic_material.rb +21 -0
- data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_lambert_material.rb → mesh_lambert_material.rb} +9 -5
- data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_phong_material.rb → mesh_phong_material.rb} +11 -7
- data/lib/mittsu/renderers/opengl/materials/opengl_material_basics.rb +57 -0
- data/lib/mittsu/renderers/opengl/materials/{opengl_shader_material.rb → shader_material.rb} +1 -1
- data/lib/mittsu/renderers/opengl/objects/group.rb +9 -0
- data/lib/mittsu/renderers/opengl/objects/line.rb +45 -0
- data/lib/mittsu/renderers/opengl/objects/{opengl_mesh.rb → mesh.rb} +15 -22
- data/lib/mittsu/renderers/opengl/opengl_buffer.rb +4 -0
- data/lib/mittsu/renderers/opengl/opengl_debug.rb +5 -4
- data/lib/mittsu/renderers/opengl/opengl_default_target.rb +0 -4
- data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +2 -8
- data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +2 -1
- data/lib/mittsu/renderers/opengl/opengl_implementations.rb +24 -53
- data/lib/mittsu/renderers/opengl/opengl_lib.rb +62 -0
- data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +6 -6
- data/lib/mittsu/renderers/opengl/opengl_program.rb +3 -5
- data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +11 -12
- data/lib/mittsu/renderers/opengl/scenes/scene.rb +9 -0
- data/lib/mittsu/renderers/opengl/textures/{opengl_compressed_texture.rb → compressed_texture.rb} +5 -6
- data/lib/mittsu/renderers/opengl/textures/{opengl_cube_texture.rb → cube_texture.rb} +23 -21
- data/lib/mittsu/renderers/opengl/textures/{opengl_data_texture.rb → data_texture.rb} +3 -5
- data/lib/mittsu/renderers/opengl/textures/{opengl_texture.rb → texture.rb} +29 -33
- data/lib/mittsu/renderers/opengl_render_target.rb +5 -6
- data/lib/mittsu/renderers/opengl_renderer.rb +35 -44
- data/lib/mittsu/textures/texture.rb +0 -4
- data/lib/mittsu/version.rb +1 -1
- metadata +26 -24
- data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +0 -52
- data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +0 -69
- data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +0 -8
- data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +0 -54
- data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +0 -8
@@ -0,0 +1,45 @@
|
|
1
|
+
module Mittsu
|
2
|
+
class Line
|
3
|
+
def render_buffer(camera, lights, fog, material, geometry_group, update_buffers)
|
4
|
+
opengl_mode = mode == LineStrip ? GL_LINE_STRIP : GL_LINES
|
5
|
+
|
6
|
+
@renderer.state.set_line_width(material.line_width * @renderer.pixel_ratio)
|
7
|
+
|
8
|
+
glDrawArrays(opengl_mode, 0, geometry_group.line_count)
|
9
|
+
|
10
|
+
@renderer.info[:render][:calls] += 1
|
11
|
+
end
|
12
|
+
|
13
|
+
def update
|
14
|
+
# TODO: glBindVertexArray ???
|
15
|
+
material = buffer_material(geometry)
|
16
|
+
custom_attributes_dirty = material.attributes && material.custom_attributes_dirty?
|
17
|
+
|
18
|
+
if geometry.vertices_need_update || geometry.colors_need_update || geometry.line_distances_need_update || custom_attributes_dirty
|
19
|
+
geometry.set_line_buffers(GL_DYNAMIC_DRAW)
|
20
|
+
end
|
21
|
+
|
22
|
+
geometry.vertices_need_update = false
|
23
|
+
geometry.colors_need_update = false
|
24
|
+
geometry.line_distances_need_update = false
|
25
|
+
|
26
|
+
material.attributes && material.clear_custom_attributes
|
27
|
+
end
|
28
|
+
|
29
|
+
def init_geometry
|
30
|
+
geometry.renderer = @renderer
|
31
|
+
if geometry.vertex_buffer.nil?
|
32
|
+
geometry.create_line_buffers
|
33
|
+
geometry.init_line_buffers(self)
|
34
|
+
|
35
|
+
geometry.vertices_need_update = true
|
36
|
+
geometry.colors_need_update = true
|
37
|
+
geometry.line_distances_need_update
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_opengl_object
|
42
|
+
@renderer.add_opengl_object(geometry, self)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
3
|
-
|
4
|
-
super
|
5
|
-
@mesh = mesh
|
6
|
-
end
|
2
|
+
class Mesh
|
3
|
+
attr_accessor :renderer
|
7
4
|
|
8
5
|
def render_buffer(camera, lights, fog, material, geometry_group, update_buffers)
|
9
6
|
type = GL_UNSIGNED_INT # geometry_group.type_array == Uint32Array ? GL_UNSIGNED_INT : GL_UNSIGNED_SHORT
|
@@ -28,21 +25,16 @@ module Mittsu
|
|
28
25
|
|
29
26
|
def update
|
30
27
|
# check all geometry groubs
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
material = nil
|
35
|
-
material_impl = nil
|
36
|
-
geometry_impl.groups.each do |geometry_group|
|
28
|
+
mat = nil
|
29
|
+
geometry.groups.each do |geometry_group|
|
37
30
|
# TODO: place to put this???
|
38
31
|
# glBindVertexArray(geometry_group.vertex_array_object)
|
39
|
-
|
40
|
-
material_impl = material.implementation(@renderer)
|
32
|
+
mat = buffer_material(geometry_group)
|
41
33
|
|
42
|
-
custom_attributes_dirty =
|
34
|
+
custom_attributes_dirty = mat.attributes && mat.custom_attributes_dirty?
|
43
35
|
|
44
36
|
if geometry.vertices_need_update || geometry.morph_targets_need_update || geometry.elements_need_update || geometry.uvs_need_update || geometry.normals_need_update || geometry.colors_need_update || geometry.tangents_need_update || custom_attributes_dirty
|
45
|
-
geometry_group.set_mesh_buffers(
|
37
|
+
geometry_group.set_mesh_buffers(self, GL_DYNAMIC_DRAW, !geometry.dynamic, mat)
|
46
38
|
end
|
47
39
|
end
|
48
40
|
|
@@ -54,23 +46,24 @@ module Mittsu
|
|
54
46
|
geometry.colors_need_update = false
|
55
47
|
geometry.tangents_need_update = false
|
56
48
|
|
57
|
-
|
49
|
+
mat.attributes && mat.clear_custom_attributes
|
58
50
|
end
|
59
51
|
|
60
52
|
def init_geometry
|
61
|
-
|
53
|
+
geometry.renderer = @renderer
|
54
|
+
geometry.init_geometry_groups(self)
|
62
55
|
end
|
63
56
|
|
64
57
|
def add_opengl_object
|
65
|
-
geometry = @object.geometry
|
66
58
|
case geometry
|
67
59
|
when BufferGeometry
|
68
|
-
@renderer.add_opengl_object(geometry,
|
60
|
+
@renderer.add_opengl_object(geometry, self)
|
69
61
|
when Geometry
|
70
|
-
|
71
|
-
|
72
|
-
@renderer.add_opengl_object(group, @object)
|
62
|
+
geometry.groups.each do |group|
|
63
|
+
@renderer.add_opengl_object(group, self)
|
73
64
|
end
|
65
|
+
else
|
66
|
+
raise "GEOMETRY IS NULL"
|
74
67
|
end
|
75
68
|
end
|
76
69
|
end
|
@@ -31,8 +31,8 @@ module OpenGLDebug
|
|
31
31
|
extend OpenGL
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.load_lib
|
35
|
-
OpenGL.load_lib
|
34
|
+
def self.load_lib(*args)
|
35
|
+
OpenGL.load_lib(*args)
|
36
36
|
end
|
37
37
|
|
38
38
|
OpenGL.constants.each do |c|
|
@@ -40,15 +40,16 @@ module OpenGLDebug
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def call_debug_method m, *args
|
43
|
-
r = OpenGLProxy.send(m, *args)
|
44
43
|
if m.to_s.start_with?('glUniform')
|
45
44
|
uniform_name = @@current_shader.get_uniform_name(args.first)
|
46
45
|
call = "#{m}('#{uniform_name}',#{args[1..-1].map { |s| s.to_s[0..20] }.join(', ')})"
|
47
46
|
else
|
48
47
|
call = "#{m}(#{args.map { |s| s.to_s[0..20] }.join(', ')})"
|
49
48
|
end
|
49
|
+
print call
|
50
|
+
r = OpenGLProxy.send(m, *args)
|
50
51
|
ret = r.nil? ? '' : " => #{r}"
|
51
|
-
puts "#{
|
52
|
+
puts "#{ret} (#{caller[0]})"
|
52
53
|
e = OpenGLProxy.glGetError
|
53
54
|
raise "ERROR: #{m} => #{ERROR_STRINGS[e]}" unless e == OpenGL::GL_NO_ERROR
|
54
55
|
r
|
@@ -57,7 +57,6 @@ module Mittsu
|
|
57
57
|
|
58
58
|
def init_mesh_buffers(object)
|
59
59
|
geometry = object.geometry
|
60
|
-
object_impl = object.implementation(@renderer)
|
61
60
|
|
62
61
|
nvertices = @faces3.length * 3
|
63
62
|
nvertices2 = nvertices * 2
|
@@ -66,7 +65,7 @@ module Mittsu
|
|
66
65
|
ntris = @faces3.length * 1
|
67
66
|
nlines = @faces3.length * 3
|
68
67
|
|
69
|
-
material =
|
68
|
+
material = object.buffer_material(self)
|
70
69
|
|
71
70
|
@vertex_array = Array.new(nvertices3) # Float32Array
|
72
71
|
@normal_array = Array.new(nvertices3) # Float32Array
|
@@ -159,9 +158,8 @@ module Mittsu
|
|
159
158
|
return unless @initted_arrays
|
160
159
|
|
161
160
|
geometry = object.geometry
|
162
|
-
material_impl = material.implementation(@renderer)
|
163
161
|
|
164
|
-
needs_face_normals =
|
162
|
+
needs_face_normals = material.needs_face_normals?
|
165
163
|
|
166
164
|
vertex_index = 0
|
167
165
|
|
@@ -755,9 +753,5 @@ module Mittsu
|
|
755
753
|
@skin_index_array = nil
|
756
754
|
@skin_weight_array = nil
|
757
755
|
end
|
758
|
-
|
759
|
-
def implementation(_)
|
760
|
-
self
|
761
|
-
end
|
762
756
|
end
|
763
757
|
end
|
@@ -5,57 +5,28 @@ require 'mittsu/materials'
|
|
5
5
|
require 'mittsu/textures'
|
6
6
|
require 'mittsu/scenes'
|
7
7
|
|
8
|
-
require 'mittsu/renderers/opengl/core/
|
9
|
-
require 'mittsu/renderers/opengl/core/
|
10
|
-
require 'mittsu/renderers/opengl/objects/
|
11
|
-
require 'mittsu/renderers/opengl/objects/
|
12
|
-
require 'mittsu/renderers/opengl/objects/
|
13
|
-
require 'mittsu/renderers/opengl/scenes/
|
14
|
-
require 'mittsu/renderers/opengl/materials/opengl_material'
|
15
|
-
require 'mittsu/renderers/opengl/materials/opengl_mesh_basic_material'
|
16
|
-
require 'mittsu/renderers/opengl/materials/opengl_mesh_lambert_material'
|
17
|
-
require 'mittsu/renderers/opengl/materials/opengl_mesh_phong_material'
|
18
|
-
require 'mittsu/renderers/opengl/materials/opengl_line_basic_material'
|
19
|
-
require 'mittsu/renderers/opengl/materials/opengl_shader_material'
|
20
|
-
require 'mittsu/renderers/opengl/textures/opengl_texture'
|
21
|
-
require 'mittsu/renderers/opengl/textures/opengl_cube_texture'
|
22
|
-
require 'mittsu/renderers/opengl/textures/opengl_data_texture'
|
23
|
-
require 'mittsu/renderers/opengl/textures/opengl_compressed_texture'
|
24
|
-
require 'mittsu/renderers/opengl/lights/opengl_light'
|
25
|
-
require 'mittsu/renderers/opengl/lights/opengl_light'
|
26
|
-
require 'mittsu/renderers/opengl/lights/opengl_spot_light'
|
27
|
-
require 'mittsu/renderers/opengl/lights/opengl_point_light'
|
28
|
-
require 'mittsu/renderers/opengl/lights/opengl_hemisphere_light'
|
29
|
-
require 'mittsu/renderers/opengl/lights/opengl_ambient_light'
|
30
|
-
require 'mittsu/renderers/opengl/lights/opengl_directional_light'
|
8
|
+
require 'mittsu/renderers/opengl/core/geometry'
|
9
|
+
require 'mittsu/renderers/opengl/core/object_3d'
|
10
|
+
require 'mittsu/renderers/opengl/objects/mesh'
|
11
|
+
require 'mittsu/renderers/opengl/objects/line'
|
12
|
+
require 'mittsu/renderers/opengl/objects/group'
|
13
|
+
require 'mittsu/renderers/opengl/scenes/scene'
|
31
14
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
Group => OpenGLGroup,
|
51
|
-
MeshBasicMaterial => OpenGLMeshBasicMaterial,
|
52
|
-
MeshLambertMaterial => OpenGLMeshLambertMaterial,
|
53
|
-
MeshPhongMaterial => OpenGLMeshPhongMaterial,
|
54
|
-
LineBasicMaterial => OpenGLLineBasicMaterial,
|
55
|
-
ShaderMaterial => OpenGLShaderMaterial
|
56
|
-
}
|
57
|
-
OPENGL_IMPLEMENTATIONS.default_proc = -> (hash, key) {
|
58
|
-
super_klass = key.ancestors.find { |a| hash.has_key?(a) }
|
59
|
-
super_klass ? (hash[key] = hash[super_klass]) : nil
|
60
|
-
}
|
61
|
-
end
|
15
|
+
require 'mittsu/renderers/opengl/lights/light'
|
16
|
+
require 'mittsu/renderers/opengl/lights/spot_light'
|
17
|
+
require 'mittsu/renderers/opengl/lights/point_light'
|
18
|
+
require 'mittsu/renderers/opengl/lights/hemisphere_light'
|
19
|
+
require 'mittsu/renderers/opengl/lights/ambient_light'
|
20
|
+
require 'mittsu/renderers/opengl/lights/directional_light'
|
21
|
+
|
22
|
+
require 'mittsu/renderers/opengl/materials/material'
|
23
|
+
require 'mittsu/renderers/opengl/materials/mesh_basic_material'
|
24
|
+
require 'mittsu/renderers/opengl/materials/mesh_lambert_material'
|
25
|
+
require 'mittsu/renderers/opengl/materials/mesh_phong_material'
|
26
|
+
require 'mittsu/renderers/opengl/materials/line_basic_material'
|
27
|
+
require 'mittsu/renderers/opengl/materials/shader_material'
|
28
|
+
|
29
|
+
require 'mittsu/renderers/opengl/textures/texture'
|
30
|
+
require 'mittsu/renderers/opengl/textures/cube_texture'
|
31
|
+
require 'mittsu/renderers/opengl/textures/data_texture'
|
32
|
+
require 'mittsu/renderers/opengl/textures/compressed_texture'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module OpenGLLib
|
2
|
+
def self.discover
|
3
|
+
case OpenGL.get_platform
|
4
|
+
when :OPENGL_PLATFORM_WINDOWS
|
5
|
+
Windows.new
|
6
|
+
when :OPENGL_PLATFORM_MACOSX
|
7
|
+
MacOS.new
|
8
|
+
when :OPENGL_PLATFORM_LINUX
|
9
|
+
Linux.new
|
10
|
+
else
|
11
|
+
fail "Unsupported platform."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Linux
|
16
|
+
def path
|
17
|
+
# http://www.pilotlogic.com/sitejoom/index.php/wiki?id=398<F37>
|
18
|
+
# 32 64
|
19
|
+
# /usr/lib /usr/lib64 redhat, mandriva
|
20
|
+
# /usr/lib32 /usr/lib64 arch, gento
|
21
|
+
# /usr/lib /usr/lib64 slackware
|
22
|
+
# /usr/lib/i386.. /usr/libx86_64/ debian
|
23
|
+
libs = Dir.glob("/usr/lib*/**/libGL.so")
|
24
|
+
if libs.size == 0
|
25
|
+
puts "no libGL.so"
|
26
|
+
exit 1
|
27
|
+
end
|
28
|
+
case kernel_module_in_use
|
29
|
+
when /nvidia/
|
30
|
+
return File.dirname(libs.grep(/nvidia/)[0])
|
31
|
+
end
|
32
|
+
# Get the same architecture that the runnning ruby
|
33
|
+
if 1.size == 8 # 64 bits
|
34
|
+
File.dirname(libs.grep(/64/)[0])
|
35
|
+
else # 32 bits
|
36
|
+
File.dirname(libs[0])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def file
|
41
|
+
'libGL.so'
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def kernel_module_in_use
|
46
|
+
lspci_line = `lspci -nnk | grep -i vga -A3 | grep 'in use'`
|
47
|
+
return /in use:\s*(\S+)/ =~ lspci_line && $1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# TODO
|
52
|
+
class Windows
|
53
|
+
def path; nil; end
|
54
|
+
def file; nil; end
|
55
|
+
end
|
56
|
+
|
57
|
+
# TODO
|
58
|
+
class MacOS
|
59
|
+
def path; nil; end
|
60
|
+
def file; nil; end
|
61
|
+
end
|
62
|
+
end
|
@@ -3,11 +3,11 @@ module Mittsu
|
|
3
3
|
attr_accessor :lights_need_update, :cache
|
4
4
|
|
5
5
|
LIGHT_CLASSES = [
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
AmbientLight,
|
7
|
+
DirectionalLight,
|
8
|
+
PointLight,
|
9
|
+
SpotLight,
|
10
|
+
HemisphereLight
|
11
11
|
]
|
12
12
|
LIGHT_TYPES = LIGHT_CLASSES.map { |klass| klass::TYPE }
|
13
13
|
|
@@ -25,7 +25,7 @@ module Mittsu
|
|
25
25
|
|
26
26
|
lights.each do |light|
|
27
27
|
next if light.only_shadow
|
28
|
-
light.
|
28
|
+
light.setup(self)
|
29
29
|
end
|
30
30
|
|
31
31
|
LIGHT_CLASSES.each do |klass|
|
@@ -13,8 +13,7 @@ module Mittsu
|
|
13
13
|
|
14
14
|
compile_and_link_program(material, parameters)
|
15
15
|
|
16
|
-
|
17
|
-
cache_uniform_locations(material_impl.shader[:uniforms] || {}, parameters)
|
16
|
+
cache_uniform_locations(material.shader[:uniforms] || {}, parameters)
|
18
17
|
cache_attribute_locations(material.attributes || {}, parameters)
|
19
18
|
|
20
19
|
@code = code
|
@@ -149,7 +148,6 @@ module Mittsu
|
|
149
148
|
end
|
150
149
|
|
151
150
|
def compile_shaders(material, parameters)
|
152
|
-
material_impl = material.implementation(@renderer)
|
153
151
|
shadow_map_type_define = get_shadow_map_define(parameters[:shadow_map_type])
|
154
152
|
|
155
153
|
env_map_type_define = get_env_map_type_define(parameters[:env_map], material)
|
@@ -168,8 +166,8 @@ module Mittsu
|
|
168
166
|
prefix_fragment = File.read(File.expand_path('../../shaders/shader_templates/fragment.glsl.erb', __FILE__))
|
169
167
|
end
|
170
168
|
|
171
|
-
@vertex_shader = OpenGLShader.new(GL_VERTEX_SHADER, compile_shader_template(prefix_vertex +
|
172
|
-
@fragment_shader = OpenGLShader.new(GL_FRAGMENT_SHADER, compile_shader_template(prefix_fragment +
|
169
|
+
@vertex_shader = OpenGLShader.new(GL_VERTEX_SHADER, compile_shader_template(prefix_vertex + material.shader[:vertex_shader], binding))
|
170
|
+
@fragment_shader = OpenGLShader.new(GL_FRAGMENT_SHADER, compile_shader_template(prefix_fragment + material.shader[:fragment_shader], binding))
|
173
171
|
|
174
172
|
glAttachShader(@program, @vertex_shader.shader)
|
175
173
|
glAttachShader(@program, @fragment_shader.shader)
|
@@ -49,10 +49,10 @@ module Mittsu
|
|
49
49
|
skinning: true
|
50
50
|
)
|
51
51
|
|
52
|
-
@depth_material.
|
53
|
-
@depth_material_morph.
|
54
|
-
@depth_material_skin.
|
55
|
-
@depth_material_morph_skin.
|
52
|
+
@depth_material.shadow_pass = true
|
53
|
+
@depth_material_morph.shadow_pass = true
|
54
|
+
@depth_material_skin.shadow_pass = true
|
55
|
+
@depth_material_morph_skin.shadow_pass = true
|
56
56
|
end
|
57
57
|
|
58
58
|
def render(scene, camera)
|
@@ -122,6 +122,7 @@ module Mittsu
|
|
122
122
|
pars = { min_filter: shadow_filter, mag_filter: shadow_filter, format: RGBAFormat }
|
123
123
|
|
124
124
|
light.shadow_map = OpenGLRenderTarget.new(light.shadow_map_width, light.shadow_map_height, pars)
|
125
|
+
light.shadow_map.renderer = @renderer
|
125
126
|
light.shadow_map_size = Vector2.new(light.shadow_map_width, light.shadow_map_height)
|
126
127
|
|
127
128
|
light.shadow_matrix = Matrix4.new
|
@@ -142,10 +143,9 @@ module Mittsu
|
|
142
143
|
scene.update_matrix_world if scene.auto_update
|
143
144
|
end
|
144
145
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
scene.add(light_impl.camera_helper)
|
146
|
+
if light.shadow_camera_visible && !light.camera_helper
|
147
|
+
light.camera_helper = CameraHelper.new(light.shadow_camera)
|
148
|
+
scene.add(light.camera_helper)
|
149
149
|
end
|
150
150
|
|
151
151
|
if light.virtual? && virtual_light.original_camera == camera
|
@@ -168,8 +168,8 @@ module Mittsu
|
|
168
168
|
#
|
169
169
|
|
170
170
|
|
171
|
-
|
172
|
-
|
171
|
+
light.camera_helper.visible = light.shadow_camera_visible if light.camera_helper
|
172
|
+
light.camera_helper.update_points if light.shadow_camera_visible
|
173
173
|
|
174
174
|
# compute shadow matrix
|
175
175
|
|
@@ -274,8 +274,7 @@ module Mittsu
|
|
274
274
|
|
275
275
|
if opengl_objects && object.cast_shadow && (object.frustum_culled == false || @frustum.intersects_object?(object) == true)
|
276
276
|
opengl_objects.each do |opengl_object|
|
277
|
-
|
278
|
-
object_impl.model_view_matrix.multiply_matrices(shadow_camera.matrix_world_inverse, object.matrix_world)
|
277
|
+
object.model_view_matrix.multiply_matrices(shadow_camera.matrix_world_inverse, object.matrix_world)
|
279
278
|
@render_list << opengl_object
|
280
279
|
end
|
281
280
|
end
|