ruby_rpg 0.1.3 → 0.1.4
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/lib/engine/debug.rb +10 -0
- data/lib/engine/rendering/debug_draw.rb +44 -4
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c328c05de08632fbcec77f982d1bd6e150c200526efa127372f074af4b1637b9
|
|
4
|
+
data.tar.gz: bd7677b6daae32a963efd6147afee0862a06c86dd462914fff7d91f4942e5112
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8faa38680401e6e5b50cee67bf99c40eef7b01dcfa4d9b2e69469e3845b894e247a2d61af58a2c1ea26904821ea0370372ad4a80ff2ce4f40163c6c2f27d1d82
|
|
7
|
+
data.tar.gz: 7eb6191a3068720aa8a47b9b1f44b521a2100e4eff571a7f7456fc289c3c469a64ed474745d152426a4b7df7a672d6740803bbddad8ff2df9468c8c46b9c03a0
|
data/lib/engine/debug.rb
CHANGED
|
@@ -3,18 +3,28 @@
|
|
|
3
3
|
module Engine
|
|
4
4
|
module Debug
|
|
5
5
|
@lines = []
|
|
6
|
+
@spheres = []
|
|
6
7
|
|
|
7
8
|
class << self
|
|
8
9
|
def line(from, to, color: [1, 1, 1])
|
|
9
10
|
@lines << { from: from, to: to, color: color }
|
|
10
11
|
end
|
|
11
12
|
|
|
13
|
+
def sphere(center, radius, color: [1, 1, 1], segments: 16)
|
|
14
|
+
@spheres << { center: center, radius: radius, color: color, segments: segments }
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
def lines
|
|
13
18
|
@lines
|
|
14
19
|
end
|
|
15
20
|
|
|
21
|
+
def spheres
|
|
22
|
+
@spheres
|
|
23
|
+
end
|
|
24
|
+
|
|
16
25
|
def clear
|
|
17
26
|
@lines.clear
|
|
27
|
+
@spheres.clear
|
|
18
28
|
end
|
|
19
29
|
end
|
|
20
30
|
end
|
|
@@ -7,7 +7,8 @@ module Rendering
|
|
|
7
7
|
class << self
|
|
8
8
|
def draw(target_framebuffer)
|
|
9
9
|
lines = Engine::Debug.lines
|
|
10
|
-
|
|
10
|
+
spheres = Engine::Debug.spheres
|
|
11
|
+
return if lines.empty? && spheres.empty?
|
|
11
12
|
|
|
12
13
|
update_render_texture_size
|
|
13
14
|
|
|
@@ -20,8 +21,9 @@ module Rendering
|
|
|
20
21
|
line_shader.use
|
|
21
22
|
line_shader.set_mat4('camera', camera_matrix)
|
|
22
23
|
|
|
23
|
-
update_vertex_data(lines)
|
|
24
|
-
|
|
24
|
+
update_vertex_data(lines, spheres)
|
|
25
|
+
vertex_count = lines.size * 2 + spheres.sum { |s| s[:segments] * 3 * 2 }
|
|
26
|
+
draw_lines(vertex_count)
|
|
25
27
|
|
|
26
28
|
# Composite onto main framebuffer
|
|
27
29
|
Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, target_framebuffer)
|
|
@@ -54,7 +56,7 @@ module Rendering
|
|
|
54
56
|
@render_texture
|
|
55
57
|
end
|
|
56
58
|
|
|
57
|
-
def update_vertex_data(lines)
|
|
59
|
+
def update_vertex_data(lines, spheres)
|
|
58
60
|
vertex_data = []
|
|
59
61
|
|
|
60
62
|
lines.each do |line|
|
|
@@ -65,6 +67,10 @@ module Rendering
|
|
|
65
67
|
vertex_data << line[:color][0] << line[:color][1] << line[:color][2]
|
|
66
68
|
end
|
|
67
69
|
|
|
70
|
+
spheres.each do |sphere|
|
|
71
|
+
add_sphere_vertices(vertex_data, sphere)
|
|
72
|
+
end
|
|
73
|
+
|
|
68
74
|
Engine::GL.BindVertexArray(vao)
|
|
69
75
|
Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, vbo)
|
|
70
76
|
|
|
@@ -72,6 +78,40 @@ module Rendering
|
|
|
72
78
|
Engine::GL.BufferData(Engine::GL::ARRAY_BUFFER, data.bytesize, data, Engine::GL::DYNAMIC_DRAW)
|
|
73
79
|
end
|
|
74
80
|
|
|
81
|
+
def add_sphere_vertices(vertex_data, sphere)
|
|
82
|
+
center = sphere[:center]
|
|
83
|
+
radius = sphere[:radius]
|
|
84
|
+
color = sphere[:color]
|
|
85
|
+
segments = sphere[:segments]
|
|
86
|
+
|
|
87
|
+
# Generate 3 circles (XY, XZ, YZ planes)
|
|
88
|
+
[
|
|
89
|
+
->(angle) { [Math.cos(angle), Math.sin(angle), 0] }, # XY plane
|
|
90
|
+
->(angle) { [Math.cos(angle), 0, Math.sin(angle)] }, # XZ plane
|
|
91
|
+
->(angle) { [0, Math.cos(angle), Math.sin(angle)] } # YZ plane
|
|
92
|
+
].each do |plane_fn|
|
|
93
|
+
segments.times do |i|
|
|
94
|
+
angle1 = (i.to_f / segments) * 2 * Math::PI
|
|
95
|
+
angle2 = ((i + 1).to_f / segments) * 2 * Math::PI
|
|
96
|
+
|
|
97
|
+
offset1 = plane_fn.call(angle1)
|
|
98
|
+
offset2 = plane_fn.call(angle2)
|
|
99
|
+
|
|
100
|
+
# Line start vertex
|
|
101
|
+
vertex_data << (center[0] + offset1[0] * radius)
|
|
102
|
+
vertex_data << (center[1] + offset1[1] * radius)
|
|
103
|
+
vertex_data << (center[2] + offset1[2] * radius)
|
|
104
|
+
vertex_data << color[0] << color[1] << color[2]
|
|
105
|
+
|
|
106
|
+
# Line end vertex
|
|
107
|
+
vertex_data << (center[0] + offset2[0] * radius)
|
|
108
|
+
vertex_data << (center[1] + offset2[1] * radius)
|
|
109
|
+
vertex_data << (center[2] + offset2[2] * radius)
|
|
110
|
+
vertex_data << color[0] << color[1] << color[2]
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
75
115
|
def draw_lines(vertex_count)
|
|
76
116
|
Engine::GL.BindVertexArray(vao)
|
|
77
117
|
Engine::GL.DrawArrays(Engine::GL::LINES, 0, vertex_count)
|