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.
- checksums.yaml +4 -4
- data/README.md +21 -21
- data/bin/build.bash +13 -13
- data/bin/import +44 -44
- data/glfw-3.3.9.bin.MACOS/LICENSE.md +23 -23
- data/glfw-3.3.9.bin.MACOS/README.md +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +199 -199
- data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +153 -153
- data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +223 -223
- data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +259 -259
- data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +88 -88
- data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +85 -85
- data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +93 -93
- data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +95 -95
- data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +91 -91
- data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +1685 -1685
- data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +28 -28
- data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +192 -192
- data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +1 -1
- data/glfw-3.3.9.bin.MACOS/docs/html/files.html +91 -91
- data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +11 -11
- data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +11 -11
- data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +17 -17
- data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +1661 -1661
- data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +1175 -1175
- data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +167 -167
- data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +303 -303
- data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +282 -282
- data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +304 -304
- data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +304 -304
- data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +202 -202
- data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +410 -410
- data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +234 -234
- data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +570 -570
- data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +2255 -2255
- data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +362 -362
- data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +2034 -2034
- data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +198 -198
- data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +848 -848
- data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +812 -812
- data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +198 -198
- data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +359 -359
- data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +3434 -3434
- data/glfw-3.3.9.bin.MACOS/docs/html/index.html +100 -100
- data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +570 -570
- data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +132 -132
- data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +351 -351
- data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +33 -33
- data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +136 -136
- data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +29 -29
- data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +8 -8
- data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +8 -8
- data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +229 -229
- data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +374 -374
- data/glfw-3.3.9.bin.MACOS/docs/html/news.html +634 -634
- data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +99 -99
- data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +9 -9
- data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +9 -9
- data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +397 -397
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +65 -65
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +26 -26
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +44 -44
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +34 -34
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +52 -52
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +69 -69
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +51 -51
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +14 -14
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +36 -36
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +98 -98
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +9 -9
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +57 -57
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +22 -22
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +103 -103
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +23 -23
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +35 -35
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +63 -63
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +505 -505
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +24 -24
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +50 -50
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +17 -17
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +12 -12
- data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +35 -35
- data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +7 -7
- data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +18 -18
- data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +34 -34
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +146 -146
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +7 -7
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +24 -24
- data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +24 -24
- data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +31 -31
- data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +31 -31
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +7 -7
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +291 -291
- data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +840 -840
- data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +39 -39
- data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +32 -32
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +5 -5
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +6 -6
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +4 -4
- data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +877 -877
- data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +134 -134
- data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +170 -170
- data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +151 -151
- data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +204 -204
- data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +196 -196
- data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +81 -81
- data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +763 -763
- data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +5932 -5932
- data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +634 -634
- data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw.3.dylib +0 -0
- data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
- data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
- data/lib/engine/autoloader.rb +11 -11
- data/lib/engine/camera.rb +12 -12
- data/lib/engine/component.rb +63 -63
- data/lib/engine/components/audio_source.rb +41 -41
- data/lib/engine/components/direction_light.rb +22 -22
- data/lib/engine/components/font_renderer.rb +134 -134
- data/lib/engine/components/mesh_renderer.rb +31 -31
- data/lib/engine/components/orthographic_camera.rb +54 -54
- data/lib/engine/components/perspective_camera.rb +53 -53
- data/lib/engine/components/point_light.rb +23 -23
- data/lib/engine/components/sprite_renderer.rb +141 -141
- data/lib/engine/components/ui_font_renderer.rb +140 -140
- data/lib/engine/components/ui_sprite_clickbox.rb +62 -0
- data/lib/engine/components/ui_sprite_renderer.rb +101 -101
- data/lib/engine/compute_shader.rb +93 -0
- data/lib/engine/cursor.rb +43 -43
- data/lib/engine/debugging.rb +41 -41
- data/lib/engine/engine.rb +131 -131
- data/lib/engine/font.rb +74 -74
- data/lib/engine/game_object.rb +234 -234
- data/lib/engine/importers/font_importer.rb +69 -69
- data/lib/engine/importers/obj_file.rb +244 -244
- data/lib/engine/importers/obj_importer.rb +33 -33
- data/lib/engine/input.rb +105 -104
- data/lib/engine/material.rb +79 -79
- data/lib/engine/mesh.rb +43 -43
- data/lib/engine/path.rb +92 -92
- data/lib/engine/physics/collision.rb +12 -12
- data/lib/engine/physics/components/cube_collider.rb +6 -6
- data/lib/engine/physics/components/rigidbody.rb +103 -103
- data/lib/engine/physics/components/sphere_collider.rb +93 -93
- data/lib/engine/physics/physics_resolver.rb +37 -37
- data/lib/engine/polygon_mesh.rb +45 -45
- data/lib/engine/quaternion.rb +234 -234
- data/lib/engine/rendering/instance_renderer.rb +153 -153
- data/lib/engine/rendering/render_pipeline.rb +35 -35
- data/lib/engine/screenshoter.rb +34 -34
- data/lib/engine/shader.rb +119 -91
- data/lib/engine/shaders/colour_frag.glsl +8 -8
- data/lib/engine/shaders/colour_vertex.glsl +13 -13
- data/lib/engine/shaders/mesh_frag.glsl +102 -102
- data/lib/engine/shaders/mesh_vertex.glsl +25 -25
- data/lib/engine/shaders/skybox_frag.glsl +12 -12
- data/lib/engine/shaders/skybox_vert.glsl +14 -14
- data/lib/engine/shaders/sprite_frag.glsl +17 -17
- data/lib/engine/shaders/sprite_vertex.glsl +15 -15
- data/lib/engine/shaders/text_frag.glsl +15 -15
- data/lib/engine/shaders/text_vertex.glsl +31 -31
- data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
- data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
- data/lib/engine/shaders/vertex_lit_frag.glsl +89 -89
- data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
- data/lib/engine/tangent_calculator.rb +42 -42
- data/lib/engine/texture.rb +53 -53
- data/lib/engine/video_mode.rb +37 -37
- data/lib/engine/window.rb +126 -126
- data/lib/ruby_rpg.rb +58 -56
- 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
|
data/lib/engine/texture.rb
CHANGED
@@ -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::
|
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
|
data/lib/engine/video_mode.rb
CHANGED
@@ -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
|