ruby_rpg 0.0.4 → 0.0.5

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.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -21
  3. data/bin/build.bash +13 -13
  4. data/bin/import +44 -44
  5. data/glfw-3.3.9.bin.MACOS/LICENSE.md +23 -23
  6. data/glfw-3.3.9.bin.MACOS/README.md +5 -5
  7. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +81 -81
  8. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +199 -199
  9. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +81 -81
  10. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +153 -153
  11. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +81 -81
  12. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +223 -223
  13. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +81 -81
  14. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +259 -259
  15. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +88 -88
  16. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +85 -85
  17. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +93 -93
  18. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +95 -95
  19. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +91 -91
  20. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +12 -12
  21. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +12 -12
  22. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +1685 -1685
  23. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +28 -28
  24. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +192 -192
  25. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +1 -1
  26. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +91 -91
  27. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +11 -11
  28. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +11 -11
  29. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +17 -17
  30. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +12 -12
  31. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +1661 -1661
  32. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +1175 -1175
  33. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +167 -167
  34. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +303 -303
  35. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +282 -282
  36. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +304 -304
  37. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +304 -304
  38. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +202 -202
  39. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +410 -410
  40. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +234 -234
  41. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +570 -570
  42. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +2255 -2255
  43. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +362 -362
  44. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +2034 -2034
  45. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +198 -198
  46. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +848 -848
  47. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +812 -812
  48. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +198 -198
  49. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +359 -359
  50. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +3434 -3434
  51. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +100 -100
  52. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +81 -81
  53. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +570 -570
  54. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +81 -81
  55. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +132 -132
  56. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +81 -81
  57. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +351 -351
  58. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +33 -33
  59. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +81 -81
  60. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +136 -136
  61. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +29 -29
  62. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +8 -8
  63. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +8 -8
  64. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +81 -81
  65. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +229 -229
  66. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +81 -81
  67. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +374 -374
  68. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +634 -634
  69. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +81 -81
  70. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +99 -99
  71. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +9 -9
  72. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +9 -9
  73. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +81 -81
  74. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +397 -397
  75. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +5 -5
  76. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +4 -4
  77. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +65 -65
  78. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +26 -26
  79. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +44 -44
  80. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +34 -34
  81. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +12 -12
  82. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +52 -52
  83. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +69 -69
  84. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +51 -51
  85. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +14 -14
  86. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +36 -36
  87. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +98 -98
  88. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +12 -12
  89. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +6 -6
  90. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +9 -9
  91. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +57 -57
  92. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +22 -22
  93. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +103 -103
  94. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +23 -23
  95. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +35 -35
  96. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +63 -63
  97. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +505 -505
  98. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +24 -24
  99. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +50 -50
  100. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +17 -17
  101. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +12 -12
  102. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +35 -35
  103. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +7 -7
  104. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +18 -18
  105. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +34 -34
  106. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +4 -4
  107. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +6 -6
  108. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +5 -5
  109. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +6 -6
  110. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +6 -6
  111. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +4 -4
  112. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +4 -4
  113. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +4 -4
  114. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +4 -4
  115. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +146 -146
  116. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +6 -6
  117. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +4 -4
  118. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +4 -4
  119. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +6 -6
  120. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +5 -5
  121. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +4 -4
  122. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +5 -5
  123. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +4 -4
  124. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +5 -5
  125. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +5 -5
  126. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +6 -6
  127. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +6 -6
  128. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +4 -4
  129. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +4 -4
  130. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +7 -7
  131. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +4 -4
  132. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +5 -5
  133. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +24 -24
  134. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +24 -24
  135. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +31 -31
  136. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +31 -31
  137. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +4 -4
  138. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +4 -4
  139. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +4 -4
  140. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +5 -5
  141. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +4 -4
  142. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +6 -6
  143. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +4 -4
  144. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +4 -4
  145. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +7 -7
  146. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +6 -6
  147. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +4 -4
  148. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +5 -5
  149. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +5 -5
  150. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +4 -4
  151. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +6 -6
  152. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +6 -6
  153. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +4 -4
  154. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +291 -291
  155. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +840 -840
  156. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +39 -39
  157. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +32 -32
  158. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +4 -4
  159. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +6 -6
  160. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +5 -5
  161. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +4 -4
  162. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +4 -4
  163. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +6 -6
  164. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +4 -4
  165. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +4 -4
  166. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +877 -877
  167. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +134 -134
  168. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +170 -170
  169. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +151 -151
  170. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +204 -204
  171. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +81 -81
  172. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +196 -196
  173. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +81 -81
  174. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +763 -763
  175. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +5932 -5932
  176. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +634 -634
  177. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw.3.dylib +0 -0
  178. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  179. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  180. data/lib/engine/autoloader.rb +11 -11
  181. data/lib/engine/camera.rb +12 -12
  182. data/lib/engine/component.rb +63 -63
  183. data/lib/engine/components/audio_source.rb +41 -41
  184. data/lib/engine/components/direction_light.rb +22 -22
  185. data/lib/engine/components/font_renderer.rb +134 -134
  186. data/lib/engine/components/mesh_renderer.rb +31 -31
  187. data/lib/engine/components/orthographic_camera.rb +54 -54
  188. data/lib/engine/components/perspective_camera.rb +53 -53
  189. data/lib/engine/components/point_light.rb +23 -23
  190. data/lib/engine/components/sprite_renderer.rb +141 -141
  191. data/lib/engine/components/ui_font_renderer.rb +140 -140
  192. data/lib/engine/components/ui_sprite_clickbox.rb +62 -0
  193. data/lib/engine/components/ui_sprite_renderer.rb +101 -101
  194. data/lib/engine/compute_shader.rb +93 -0
  195. data/lib/engine/cursor.rb +43 -43
  196. data/lib/engine/debugging.rb +41 -41
  197. data/lib/engine/engine.rb +131 -131
  198. data/lib/engine/font.rb +74 -74
  199. data/lib/engine/game_object.rb +234 -234
  200. data/lib/engine/importers/font_importer.rb +69 -69
  201. data/lib/engine/importers/obj_file.rb +244 -244
  202. data/lib/engine/importers/obj_importer.rb +33 -33
  203. data/lib/engine/input.rb +105 -104
  204. data/lib/engine/material.rb +79 -79
  205. data/lib/engine/mesh.rb +43 -43
  206. data/lib/engine/path.rb +92 -92
  207. data/lib/engine/physics/collision.rb +12 -12
  208. data/lib/engine/physics/components/cube_collider.rb +6 -6
  209. data/lib/engine/physics/components/rigidbody.rb +103 -103
  210. data/lib/engine/physics/components/sphere_collider.rb +93 -93
  211. data/lib/engine/physics/physics_resolver.rb +37 -37
  212. data/lib/engine/polygon_mesh.rb +45 -45
  213. data/lib/engine/quaternion.rb +234 -234
  214. data/lib/engine/rendering/instance_renderer.rb +153 -153
  215. data/lib/engine/rendering/render_pipeline.rb +35 -35
  216. data/lib/engine/screenshoter.rb +34 -34
  217. data/lib/engine/shader.rb +119 -91
  218. data/lib/engine/shaders/colour_frag.glsl +8 -8
  219. data/lib/engine/shaders/colour_vertex.glsl +13 -13
  220. data/lib/engine/shaders/mesh_frag.glsl +102 -102
  221. data/lib/engine/shaders/mesh_vertex.glsl +25 -25
  222. data/lib/engine/shaders/skybox_frag.glsl +12 -12
  223. data/lib/engine/shaders/skybox_vert.glsl +14 -14
  224. data/lib/engine/shaders/sprite_frag.glsl +17 -17
  225. data/lib/engine/shaders/sprite_vertex.glsl +15 -15
  226. data/lib/engine/shaders/text_frag.glsl +15 -15
  227. data/lib/engine/shaders/text_vertex.glsl +31 -31
  228. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
  229. data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
  230. data/lib/engine/shaders/vertex_lit_frag.glsl +89 -89
  231. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
  232. data/lib/engine/tangent_calculator.rb +42 -42
  233. data/lib/engine/texture.rb +53 -53
  234. data/lib/engine/video_mode.rb +37 -37
  235. data/lib/engine/window.rb +126 -126
  236. data/lib/ruby_rpg.rb +58 -56
  237. metadata +5 -6
@@ -1,89 +1,89 @@
1
- #version 330 core
2
-
3
- in vec3 Normal;
4
- in vec3 FragPos;
5
-
6
- in vec3 Diffuse;
7
- in vec3 Specular;
8
- in vec3 Albedo;
9
-
10
- out vec4 color;
11
-
12
- uniform vec3 cameraPos;
13
- uniform float diffuseStrength;
14
- uniform float specularStrength;
15
- uniform float specularPower;
16
- uniform vec3 ambientLight;
17
-
18
- struct DirectionalLight {
19
- vec3 direction;
20
- vec3 colour;
21
- };
22
- #define NR_DIRECTIONAL_LIGHTS 4
23
- uniform DirectionalLight directionalLights[NR_DIRECTIONAL_LIGHTS];
24
-
25
- struct PointLight {
26
- vec3 position;
27
- float sqrRange;
28
- vec3 colour;
29
- };
30
- #define NR_POINT_LIGHTS 16
31
- uniform PointLight pointLights[NR_POINT_LIGHTS];
32
-
33
- vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
34
- {
35
- vec3 lightOffset = light.position - fragPos;
36
- float sqrDistance = dot(lightOffset, lightOffset);
37
- vec3 lightDir = normalize(lightOffset);
38
- float diff = max(dot(normal, lightDir), 0.0);
39
-
40
- vec3 reflectDir = reflect(lightDir, normal);
41
- float spec = pow(max(dot(-viewDir, reflectDir), 0.0), specularPower);
42
-
43
- float attenuation = light.sqrRange / sqrDistance;
44
-
45
- float diffuse = diff * diffuseStrength;
46
- float specular = spec * specularStrength;
47
-
48
- return light.colour * (diffuse + specular) * attenuation;
49
- }
50
-
51
- vec3 CalcDirectionalLight(DirectionalLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
52
- {
53
- float diff = max(dot(normal, -light.direction), 0.0);
54
-
55
- vec3 reflectDir = reflect(-light.direction, normal);
56
- float spec = pow(max(dot(-viewDir, reflectDir), 0.0), specularPower);
57
-
58
- float diffuse = diff * diffuseStrength;
59
- float specular = spec * specularStrength;
60
-
61
- return light.colour * (diffuse + specular);
62
- }
63
-
64
- void main()
65
- {
66
- vec3 norm = normalize(Normal);
67
- vec3 viewDir = normalize(cameraPos - FragPos);
68
-
69
- vec3 result = ambientLight;
70
-
71
- for (int i = 0; i < NR_POINT_LIGHTS; i++) {
72
- if (pointLights[i].sqrRange == 0.0)
73
- {
74
- break;
75
- }
76
- result += CalcPointLight(pointLights[i], norm, FragPos, viewDir);
77
- }
78
-
79
- for (int i = 0; i < NR_DIRECTIONAL_LIGHTS; i++) {
80
- if (directionalLights[i].colour == vec3(0.0))
81
- {
82
- break;
83
- }
84
- result += CalcDirectionalLight(directionalLights[i], norm, FragPos, viewDir);
85
- }
86
-
87
- vec4 c = vec4(Diffuse, 1.0);
88
- color = c * vec4(result, 1.0);
89
- }
1
+ #version 330 core
2
+
3
+ in vec3 Normal;
4
+ in vec3 FragPos;
5
+
6
+ in vec3 Diffuse;
7
+ in vec3 Specular;
8
+ in vec3 Albedo;
9
+
10
+ out vec4 color;
11
+
12
+ uniform vec3 cameraPos;
13
+ uniform float diffuseStrength;
14
+ uniform float specularStrength;
15
+ uniform float specularPower;
16
+ uniform vec3 ambientLight;
17
+
18
+ struct DirectionalLight {
19
+ vec3 direction;
20
+ vec3 colour;
21
+ };
22
+ #define NR_DIRECTIONAL_LIGHTS 4
23
+ uniform DirectionalLight directionalLights[NR_DIRECTIONAL_LIGHTS];
24
+
25
+ struct PointLight {
26
+ vec3 position;
27
+ float sqrRange;
28
+ vec3 colour;
29
+ };
30
+ #define NR_POINT_LIGHTS 16
31
+ uniform PointLight pointLights[NR_POINT_LIGHTS];
32
+
33
+ vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
34
+ {
35
+ vec3 lightOffset = light.position - fragPos;
36
+ float sqrDistance = dot(lightOffset, lightOffset);
37
+ vec3 lightDir = normalize(lightOffset);
38
+ float diff = max(dot(normal, lightDir), 0.0);
39
+
40
+ vec3 reflectDir = reflect(lightDir, normal);
41
+ float spec = pow(max(dot(-viewDir, reflectDir), 0.0), specularPower);
42
+
43
+ float attenuation = light.sqrRange / sqrDistance;
44
+
45
+ float diffuse = diff * diffuseStrength;
46
+ float specular = spec * specularStrength;
47
+
48
+ return light.colour * (diffuse + specular) * attenuation;
49
+ }
50
+
51
+ vec3 CalcDirectionalLight(DirectionalLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
52
+ {
53
+ float diff = max(dot(normal, -light.direction), 0.0);
54
+
55
+ vec3 reflectDir = reflect(-light.direction, normal);
56
+ float spec = pow(max(dot(-viewDir, reflectDir), 0.0), specularPower);
57
+
58
+ float diffuse = diff * diffuseStrength;
59
+ float specular = spec * specularStrength;
60
+
61
+ return light.colour * (diffuse + specular);
62
+ }
63
+
64
+ void main()
65
+ {
66
+ vec3 norm = normalize(Normal);
67
+ vec3 viewDir = normalize(cameraPos - FragPos);
68
+
69
+ vec3 result = ambientLight;
70
+
71
+ for (int i = 0; i < NR_POINT_LIGHTS; i++) {
72
+ if (pointLights[i].sqrRange == 0.0)
73
+ {
74
+ break;
75
+ }
76
+ result += CalcPointLight(pointLights[i], norm, FragPos, viewDir);
77
+ }
78
+
79
+ for (int i = 0; i < NR_DIRECTIONAL_LIGHTS; i++) {
80
+ if (directionalLights[i].colour == vec3(0.0))
81
+ {
82
+ break;
83
+ }
84
+ result += CalcDirectionalLight(directionalLights[i], norm, FragPos, viewDir);
85
+ }
86
+
87
+ vec4 c = vec4(Diffuse, 1.0);
88
+ color = c * vec4(result, 1.0);
89
+ }
@@ -1,28 +1,28 @@
1
- #version 330 core
2
-
3
- // <vec2 position, vec2 texCoords, vec3 normal, vec3 tangent>
4
- layout (location = 0) in vec3 vertex;
5
- layout (location = 2) in vec3 normal;
6
- layout (location = 4) in vec3 diffuse;
7
- layout (location = 5) in vec3 specular;
8
- layout (location = 6) in vec3 albedo;
9
- layout (location = 7) in mat4 model;
10
-
11
- out vec3 Normal;
12
- out vec3 FragPos;
13
- out vec3 Diffuse;
14
- out vec3 Specular;
15
- out vec3 Albedo;
16
-
17
- uniform mat4 camera;
18
-
19
- void main()
20
- {
21
- mat3 normalMatrix = mat3(transpose(inverse(model)));
22
- Normal = normalMatrix * normal;
23
- FragPos = vec3(model * vec4(vertex, 1.0));
24
- gl_Position = camera * model * vec4(vertex, 1.0);
25
- Diffuse = diffuse;
26
- Specular = specular;
27
- Albedo = albedo;
28
- }
1
+ #version 330 core
2
+
3
+ // <vec2 position, vec2 texCoords, vec3 normal, vec3 tangent>
4
+ layout (location = 0) in vec3 vertex;
5
+ layout (location = 2) in vec3 normal;
6
+ layout (location = 4) in vec3 diffuse;
7
+ layout (location = 5) in vec3 specular;
8
+ layout (location = 6) in vec3 albedo;
9
+ layout (location = 7) in mat4 model;
10
+
11
+ out vec3 Normal;
12
+ out vec3 FragPos;
13
+ out vec3 Diffuse;
14
+ out vec3 Specular;
15
+ out vec3 Albedo;
16
+
17
+ uniform mat4 camera;
18
+
19
+ void main()
20
+ {
21
+ mat3 normalMatrix = mat3(transpose(inverse(model)));
22
+ Normal = normalMatrix * normal;
23
+ FragPos = vec3(model * vec4(vertex, 1.0));
24
+ gl_Position = camera * model * vec4(vertex, 1.0);
25
+ Diffuse = diffuse;
26
+ Specular = specular;
27
+ Albedo = albedo;
28
+ }
@@ -1,42 +1,42 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class TangentCalculator
5
- attr_reader :vertices, :normals, :texture_coords
6
-
7
- def initialize(vertices, normals, texture_coords)
8
- @vertices = vertices
9
- @normals = normals
10
- @texture_coords = texture_coords
11
- end
12
-
13
- def calculate_tangents
14
- delta_pos1 = @vertices[1] - @vertices[0]
15
- delta_pos2 = @vertices[2] - @vertices[0]
16
-
17
- delta_uv1 = @texture_coords[1] - @texture_coords[0]
18
- delta_uv2 = @texture_coords[2] - @texture_coords[0]
19
-
20
- if delta_uv1[0] * delta_uv2[1] - delta_uv1[1] * delta_uv2[0] == 0
21
- return normals.map { |normal| Vector[0, 0, 0] }
22
- end
23
-
24
- uv_matrix = Matrix[
25
- [delta_uv1[0], delta_uv1[1]],
26
- [delta_uv2[0], delta_uv2[1]]
27
- ]
28
-
29
- world_matrix = Matrix[
30
- [delta_pos1[0], delta_pos1[1], delta_pos1[2]],
31
- [delta_pos2[0], delta_pos2[1], delta_pos2[2]]
32
- ]
33
-
34
- tangent_matrix = uv_matrix.inv * world_matrix
35
-
36
- flat_tangent = Vector[tangent_matrix[0, 0], tangent_matrix[0, 1], tangent_matrix[0, 2]]
37
- bitangents = normals.map { |normal| normal.cross(flat_tangent).normalize }
38
-
39
- normals.map { |normal| bitangents[0].cross(normal).normalize }
40
- end
41
- end
42
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class TangentCalculator
5
+ attr_reader :vertices, :normals, :texture_coords
6
+
7
+ def initialize(vertices, normals, texture_coords)
8
+ @vertices = vertices
9
+ @normals = normals
10
+ @texture_coords = texture_coords
11
+ end
12
+
13
+ def calculate_tangents
14
+ delta_pos1 = @vertices[1] - @vertices[0]
15
+ delta_pos2 = @vertices[2] - @vertices[0]
16
+
17
+ delta_uv1 = @texture_coords[1] - @texture_coords[0]
18
+ delta_uv2 = @texture_coords[2] - @texture_coords[0]
19
+
20
+ if delta_uv1[0] * delta_uv2[1] - delta_uv1[1] * delta_uv2[0] == 0
21
+ return normals.map { |normal| Vector[0, 0, 0] }
22
+ end
23
+
24
+ uv_matrix = Matrix[
25
+ [delta_uv1[0], delta_uv1[1]],
26
+ [delta_uv2[0], delta_uv2[1]]
27
+ ]
28
+
29
+ world_matrix = Matrix[
30
+ [delta_pos1[0], delta_pos1[1], delta_pos1[2]],
31
+ [delta_pos2[0], delta_pos2[1], delta_pos2[2]]
32
+ ]
33
+
34
+ tangent_matrix = uv_matrix.inv * world_matrix
35
+
36
+ flat_tangent = Vector[tangent_matrix[0, 0], tangent_matrix[0, 1], tangent_matrix[0, 2]]
37
+ bitangents = normals.map { |normal| normal.cross(flat_tangent).normalize }
38
+
39
+ normals.map { |normal| bitangents[0].cross(normal).normalize }
40
+ end
41
+ end
42
+ end
@@ -1,53 +1,53 @@
1
- require 'chunky_png'
2
-
3
- module Engine
4
- class Texture
5
- attr_reader :texture
6
- private_class_method :new
7
-
8
- def initialize(file_path, flip)
9
- @file_path = file_path
10
- @flip = flip
11
- @texture = ' ' * 4
12
- load_texture
13
- end
14
-
15
- def self.for(path, flip: false)
16
- full_path = File.expand_path(File.join(GAME_DIR, path))
17
- texture_cache[[full_path, flip]]
18
- end
19
-
20
- def self.texture_cache
21
- @texture_cache ||= Hash.new do |hash, key|
22
- hash[key] = new(key[0], key[1])
23
- end
24
- end
25
-
26
- def load_texture
27
- tex = ' ' * 4
28
- GL.GenTextures(1, tex)
29
- @texture = tex.unpack('L')[0]
30
- GL.BindTexture(GL::TEXTURE_2D, @texture)
31
- GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_WRAP_S, GL::REPEAT)
32
- GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_WRAP_T, GL::REPEAT)
33
- GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_MIN_FILTER, GL::LINEAR)
34
- GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_MAG_FILTER, GL::LINEAR)
35
-
36
- image = read_image
37
- image_data = image.to_rgba_stream
38
- image_width = image.width
39
- image_height = image.height
40
-
41
- GL.TexImage2D(GL::TEXTURE_2D, 0, GL::RGBA, image_width, image_height, 0, GL::RGBA, GL::UNSIGNED_BYTE, image_data)
42
- GL.GenerateMipmap(GL::TEXTURE_2D)
43
- end
44
-
45
- def read_image
46
- if @flip
47
- ChunkyPNG::Image.from_file(@file_path).flip_horizontally
48
- else
49
- ChunkyPNG::Image.from_file(@file_path)
50
- end
51
- end
52
- end
53
- end
1
+ require 'chunky_png'
2
+
3
+ module Engine
4
+ class Texture
5
+ attr_reader :texture
6
+ private_class_method :new
7
+
8
+ def initialize(file_path, flip)
9
+ @file_path = file_path
10
+ @flip = flip
11
+ @texture = ' ' * 4
12
+ load_texture
13
+ end
14
+
15
+ def self.for(path, flip: false)
16
+ full_path = File.expand_path(File.join(GAME_DIR, path))
17
+ texture_cache[[full_path, flip]]
18
+ end
19
+
20
+ def self.texture_cache
21
+ @texture_cache ||= Hash.new do |hash, key|
22
+ hash[key] = new(key[0], key[1])
23
+ end
24
+ end
25
+
26
+ def load_texture
27
+ tex = ' ' * 4
28
+ GL.GenTextures(1, tex)
29
+ @texture = tex.unpack('L')[0]
30
+ GL.BindTexture(GL::TEXTURE_2D, @texture)
31
+ GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_WRAP_S, GL::REPEAT)
32
+ GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_WRAP_T, GL::REPEAT)
33
+ GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_MIN_FILTER, GL::LINEAR)
34
+ GL.TexParameteri(GL::TEXTURE_2D, GL::TEXTURE_MAG_FILTER, GL::LINEAR)
35
+
36
+ image = read_image
37
+ image_data = image.to_rgba_stream
38
+ image_width = image.width
39
+ image_height = image.height
40
+
41
+ GL.TexImage2D(GL::TEXTURE_2D, 0, GL::RGBA32F, image_width, image_height, 0, GL::RGBA, GL::UNSIGNED_BYTE, image_data)
42
+ GL.GenerateMipmap(GL::TEXTURE_2D)
43
+ end
44
+
45
+ def read_image
46
+ if @flip
47
+ ChunkyPNG::Image.from_file(@file_path).flip_horizontally
48
+ else
49
+ ChunkyPNG::Image.from_file(@file_path)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,37 +1,37 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- # https://www.glfw.org/docs/latest/struct_g_l_f_wvidmode.html
5
- # https://www.glfw.org/docs/latest/monitor_guide.html#monitor_modes
6
- class VideoMode
7
- class << self
8
- def current_video_mode(monitor: Window.primary_monitor)
9
- video_mode_helper(GLFW.GetVideoMode(monitor), 0)
10
- end
11
-
12
- # Returns an array of video modes
13
- def get_video_modes(monitor: Window.primary_monitor)
14
- count_pointer = ' ' * Fiddle::SIZEOF_INT
15
- modes_pointer = GLFW.GetVideoModes(monitor, count_pointer)
16
- count = count_pointer.unpack1('L')
17
-
18
- supported_video_modes = []
19
- count.times do |i|
20
- supported_video_modes << video_mode_helper(modes_pointer, i)
21
- end
22
- supported_video_modes
23
- end
24
-
25
- def print_video_mode(mode)
26
- GLFW::GLFWvidmode.members.map(&:to_sym).map do |attr|
27
- puts "#{attr}: #{mode.send(attr)}"
28
- end
29
- puts
30
- end
31
-
32
- def video_mode_helper(mode_pointer, index)
33
- GLFW::GLFWvidmode.new(mode_pointer + index * GLFW::GLFWvidmode.size)
34
- end
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ # https://www.glfw.org/docs/latest/struct_g_l_f_wvidmode.html
5
+ # https://www.glfw.org/docs/latest/monitor_guide.html#monitor_modes
6
+ class VideoMode
7
+ class << self
8
+ def current_video_mode(monitor: Window.primary_monitor)
9
+ video_mode_helper(GLFW.GetVideoMode(monitor), 0)
10
+ end
11
+
12
+ # Returns an array of video modes
13
+ def get_video_modes(monitor: Window.primary_monitor)
14
+ count_pointer = ' ' * Fiddle::SIZEOF_INT
15
+ modes_pointer = GLFW.GetVideoModes(monitor, count_pointer)
16
+ count = count_pointer.unpack1('L')
17
+
18
+ supported_video_modes = []
19
+ count.times do |i|
20
+ supported_video_modes << video_mode_helper(modes_pointer, i)
21
+ end
22
+ supported_video_modes
23
+ end
24
+
25
+ def print_video_mode(mode)
26
+ GLFW::GLFWvidmode.members.map(&:to_sym).map do |attr|
27
+ puts "#{attr}: #{mode.send(attr)}"
28
+ end
29
+ puts
30
+ end
31
+
32
+ def video_mode_helper(mode_pointer, index)
33
+ GLFW::GLFWvidmode.new(mode_pointer + index * GLFW::GLFWvidmode.size)
34
+ end
35
+ end
36
+ end
37
+ end