Fix joining sectors
This commit is contained in:
parent
a443869284
commit
da83fa0e0d
8 changed files with 534 additions and 230 deletions
|
@ -56,7 +56,9 @@ void main()
|
|||
|
||||
vec3 res = light.diffuse * lambert(norm, light.position);
|
||||
|
||||
float a = dist(v_position.xz, vec2(0.0, 0.0)) * 2.0f;
|
||||
float a = dist(v_position.xz, vec2(0.0, 0.0)) * 25.0f;
|
||||
|
||||
v_output = vec4(tex.rgb, tex.a - a);
|
||||
tex.rgb *= 1.0 - a;
|
||||
|
||||
v_output = vec4(tex.rgb, tex.a);
|
||||
}
|
||||
|
|
|
@ -13,5 +13,5 @@ uniform float u_time;
|
|||
void main()
|
||||
{
|
||||
vec4 tex = texture(u_texture, v_texcoord) * v_color;
|
||||
v_output = vec4(1.0, 0.0, 0.0, 0.5 + (sin(u_time * 0.3f) + 1.0) * 0.25);
|
||||
v_output = tex;//vec4(1.0, 0.0, 0.0, 0.5 + (sin(u_time * 0.3f) + 1.0) * 0.25);
|
||||
}
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 186 B |
|
@ -1,124 +1,269 @@
|
|||
[04:15:30 PM] Info: Starting...
|
||||
[05:25:18 PM] Info: Starting...
|
||||
|
||||
KP3D version 2
|
||||
===============================
|
||||
Copyright (C) kpworld.xyz 2018-2024
|
||||
Contact me! @kp_cftsz
|
||||
|
||||
[04:15:30 PM] Info: Initializing SDL
|
||||
[04:15:30 PM] Info: Initializing OpenGL
|
||||
[04:15:30 PM] Info: OpenGL version: 4.6.0 NVIDIA 517.70
|
||||
[04:15:30 PM] Info: Initializing GLEW
|
||||
[04:15:30 PM] Info: Initializing SDL_mixer
|
||||
[04:15:30 PM] Info: Reticulating splines...
|
||||
[04:15:30 PM] Info: Ready!
|
||||
[04:15:31 PM] Info: SECTOR HIERARCHY
|
||||
[04:15:31 PM] Info: Sector 3 (area: 1)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - 1
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - [NO CHILDREN]
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:15:31 PM] Info: Sector 4 (area: 1)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - 2
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - [NO CHILDREN]
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:15:31 PM] Info: Sector 6 (area: 6)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - 1
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - [NO CHILDREN]
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:15:31 PM] Info: Sector 2 (area: 19)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - 1
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - 4
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:15:31 PM] Info: Sector 5 (area: 34)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - [NO PARENT]
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - [NO CHILDREN]
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:15:31 PM] Info: Sector 1 (area: 105.5)
|
||||
[04:15:31 PM] Info: Parent:
|
||||
[04:15:31 PM] Info: - [NO PARENT]
|
||||
[04:15:31 PM] Info: Children:
|
||||
[04:15:31 PM] Info: - 3
|
||||
[04:15:31 PM] Info: - 6
|
||||
[04:15:31 PM] Info: - 2
|
||||
[04:15:31 PM] Info: -----
|
||||
[04:16:52 PM] Info: SECTOR HIERARCHY
|
||||
[04:16:52 PM] Info: Sector 3 (area: 1)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - 1
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - [NO CHILDREN]
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 4 (area: 1)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - 2
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - [NO CHILDREN]
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 6 (area: 6)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - 1
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - [NO CHILDREN]
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 7 (area: 16)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - [NO PARENT]
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - [NO CHILDREN]
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 2 (area: 19)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - 1
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - 4
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 5 (area: 34)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - [NO PARENT]
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - [NO CHILDREN]
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:52 PM] Info: Sector 1 (area: 105.5)
|
||||
[04:16:52 PM] Info: Parent:
|
||||
[04:16:52 PM] Info: - [NO PARENT]
|
||||
[04:16:52 PM] Info: Children:
|
||||
[04:16:52 PM] Info: - 3
|
||||
[04:16:52 PM] Info: - 6
|
||||
[04:16:52 PM] Info: - 2
|
||||
[04:16:52 PM] Info: -----
|
||||
[04:16:57 PM] Info: SECTOR HIERARCHY
|
||||
[04:16:57 PM] Info: Sector 3 (area: 1)
|
||||
[04:16:57 PM] Info: Parent:
|
||||
[04:16:57 PM] Info: - 1
|
||||
[04:16:57 PM] Info: Children:
|
||||
[04:16:57 PM] Info: - [NO CHILDREN]
|
||||
[04:16:57 PM] Info: -----
|
||||
[04:16:57 PM] Info: Sector 4 (area: 1)
|
||||
[04:16:57 PM] Info: Parent:
|
||||
[04:16:57 PM] Info: - 2
|
||||
[04:16:57 PM] Info: Children:
|
||||
[04:16:57 PM] Info: - [NO CHILDREN]
|
||||
[04:16:57 PM] Info: -----
|
||||
[04:16:57 PM] Info: Sector 8 (area: 4)
|
||||
[04:16:57 PM] Info: Parent:
|
||||
[04:16:57 PM] Info: - [NO PARENT]
|
||||
[04:16:57 PM] Info: Children:
|
||||
[04:16:57 PM] Info: - [NO CHILDREN]
|
||||
[04:16:57 PM] Info: -----
|
||||
[04:16:57 PM] Info: Sector 6 (area: 6)
|
||||
[04:16:57 PM] Info: Parent:
|
||||
[04:16:57 PM] Info: - 1
|
||||
[04:16:57 PM] Info: Children:
|
||||
[04:16:57 PM] Info: - [NO CHILDREN]
|
||||
[04:16:57 PM] Info: -----
|
||||
[04:16:57 PM] Info: Sector 7
|
||||
[05:25:18 PM] Info: Initializing SDL
|
||||
[05:25:18 PM] Info: Initializing OpenGL
|
||||
[05:25:18 PM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
|
||||
[05:25:18 PM] Info: Initializing GLEW
|
||||
[05:25:18 PM] Info: Initializing SDL_mixer
|
||||
[05:25:18 PM] Info: Reticulating splines...
|
||||
[05:25:18 PM] Info: Ready!
|
||||
[05:25:18 PM] Info: SECTOR HIERARCHY
|
||||
[05:25:18 PM] Info: Sector 3 (area: 1)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - 1
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - [NO CHILDREN]
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:18 PM] Info: Sector 4 (area: 1)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - 2
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - [NO CHILDREN]
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:18 PM] Info: Sector 6 (area: 6)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - 1
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - [NO CHILDREN]
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:18 PM] Info: Sector 2 (area: 19)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - 1
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - 4
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:18 PM] Info: Sector 5 (area: 34)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - [NO PARENT]
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - [NO CHILDREN]
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:18 PM] Info: Sector 1 (area: 105.5)
|
||||
[05:25:18 PM] Info: Parent:
|
||||
[05:25:18 PM] Info: - [NO PARENT]
|
||||
[05:25:18 PM] Info: Children:
|
||||
[05:25:18 PM] Info: - 3
|
||||
[05:25:18 PM] Info: - 6
|
||||
[05:25:18 PM] Info: - 2
|
||||
[05:25:18 PM] Info: -----
|
||||
[05:25:30 PM] Info: SECTOR HIERARCHY
|
||||
[05:25:30 PM] Info: Sector 3 (area: 1)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - 1
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - [NO CHILDREN]
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 4 (area: 1)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - 2
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - [NO CHILDREN]
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 6 (area: 6)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - 1
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - [NO CHILDREN]
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 7 (area: 15)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - [NO PARENT]
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - [NO CHILDREN]
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 2 (area: 19)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - 1
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - 4
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 5 (area: 34)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - [NO PARENT]
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - [NO CHILDREN]
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:30 PM] Info: Sector 1 (area: 105.5)
|
||||
[05:25:30 PM] Info: Parent:
|
||||
[05:25:30 PM] Info: - [NO PARENT]
|
||||
[05:25:30 PM] Info: Children:
|
||||
[05:25:30 PM] Info: - 3
|
||||
[05:25:30 PM] Info: - 6
|
||||
[05:25:30 PM] Info: - 2
|
||||
[05:25:30 PM] Info: -----
|
||||
[05:25:35 PM] Info: SECTOR HIERARCHY
|
||||
[05:25:35 PM] Info: Sector 3 (area: 1)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - 1
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 4 (area: 1)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - 2
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 8 (area: 3)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - [NO PARENT]
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 6 (area: 6)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - 1
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 7 (area: 15)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - [NO PARENT]
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 2 (area: 19)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - 1
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - 4
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 5 (area: 34)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - [NO PARENT]
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - [NO CHILDREN]
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:35 PM] Info: Sector 1 (area: 105.5)
|
||||
[05:25:35 PM] Info: Parent:
|
||||
[05:25:35 PM] Info: - [NO PARENT]
|
||||
[05:25:35 PM] Info: Children:
|
||||
[05:25:35 PM] Info: - 3
|
||||
[05:25:35 PM] Info: - 6
|
||||
[05:25:35 PM] Info: - 2
|
||||
[05:25:35 PM] Info: -----
|
||||
[05:25:47 PM] Info: SECTOR HIERARCHY
|
||||
[05:25:47 PM] Info: Sector 3 (area: 1)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - 1
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 4 (area: 1)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - 2
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 8 (area: 3)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - [NO PARENT]
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 6 (area: 6)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - 1
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 9 (area: 8)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - [NO PARENT]
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 7 (area: 15)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - [NO PARENT]
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 2 (area: 19)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - 1
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - 4
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 5 (area: 34)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - [NO PARENT]
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - [NO CHILDREN]
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:47 PM] Info: Sector 1 (area: 105.5)
|
||||
[05:25:47 PM] Info: Parent:
|
||||
[05:25:47 PM] Info: - [NO PARENT]
|
||||
[05:25:47 PM] Info: Children:
|
||||
[05:25:47 PM] Info: - 3
|
||||
[05:25:47 PM] Info: - 6
|
||||
[05:25:47 PM] Info: - 2
|
||||
[05:25:47 PM] Info: -----
|
||||
[05:25:56 PM] Info: SECTOR HIERARCHY
|
||||
[05:25:56 PM] Info: Sector 3 (area: 1)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - 1
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 4 (area: 1)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - 2
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 8 (area: 3)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 10 (area: 4)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 6 (area: 6)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - 1
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 9 (area: 8)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 7 (area: 15)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 2 (area: 19)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - 1
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - 4
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 5 (area: 34)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - [NO CHILDREN]
|
||||
[05:25:56 PM] Info: -----
|
||||
[05:25:56 PM] Info: Sector 1 (area: 105.5)
|
||||
[05:25:56 PM] Info: Parent:
|
||||
[05:25:56 PM] Info: - [NO PARENT]
|
||||
[05:25:56 PM] Info: Children:
|
||||
[05:25:56 PM] Info: - 3
|
||||
[05:25:56 PM] Info: - 6
|
||||
[05:25:56 PM] Info: - 2
|
||||
[05:25:56 PM] Info: -----
|
||||
|
|
|
@ -301,65 +301,63 @@ void Map::JoinSectors(Sector& sector)
|
|||
PosCmp({l.start.x, 0.0f, l.start.y}, {pos_b.x, 0.0f, pos_b.z}, e);
|
||||
bool end_cmp = PosCmp({l.end.x, 0.0f, l.end.y}, {pos_b.x, 0.0f, pos_b.z}, e) ||
|
||||
PosCmp({l.end.x, 0.0f, l.end.y}, {pos_a.x, 0.0f, pos_a.z}, e);
|
||||
bool same_points = start_cmp || end_cmp;
|
||||
bool same_points = start_cmp && end_cmp;
|
||||
bool start_on_seg = PointInLine(l.start, {pos_a.x, pos_a.z}, {pos_b.x, pos_b.z});
|
||||
bool end_on_seg = PointInLine(l.end, {pos_a.x, pos_a.z}, {pos_b.x, pos_b.z});
|
||||
bool on_segment = start_on_seg && end_on_seg;
|
||||
|
||||
bool left_join = start_on_seg && end_cmp;
|
||||
bool right_join = end_on_seg && start_cmp;
|
||||
bool right_join = start_on_seg && end_cmp;
|
||||
bool left_join = end_on_seg && start_cmp;
|
||||
|
||||
if (on_segment && not_child)
|
||||
good = true;
|
||||
|
||||
if (good && !l.portal && !ld.portal)
|
||||
{
|
||||
// Partial join
|
||||
//if (left_join && !right_join)
|
||||
//{
|
||||
// XYf old_end = ld.end;
|
||||
// ld.end.x = l.start.x;
|
||||
// ld.end.y = l.start.y;
|
||||
// ld.flags = Wall::FLAG_TOUCHED;
|
||||
// ld.textures[TEX_FRONT] = nullptr;
|
||||
// ld.flags = Wall::FLAG_OPENING;
|
||||
// ld.portal = &s;
|
||||
// Wall w1 = ld;
|
||||
// w1.flags = Wall::FLAG_TOUCHED;
|
||||
// w1.start.x = ld.end.x;
|
||||
// w1.start.y = ld.end.y;
|
||||
// w1.end.x = l.end.x;
|
||||
// w1.end.y = l.end.y;
|
||||
//
|
||||
// InsertLine(sector.walls, i + 1, w1);
|
||||
// // InsertLine(sector.walls, i + 2, w2);
|
||||
//}
|
||||
//else
|
||||
// We're looking for 4 cases:
|
||||
// 1. This linedef overlaps the wall but doesn't touch any particular points
|
||||
// In this case, we'll split the wall into 3 separate walls; left, middle, right
|
||||
// 2. This linedef overlaps the wall but touches one point on the left
|
||||
// In this case, we'll split the wall into 2
|
||||
// 3. This linedef overlaps the wall but touches one point on the right
|
||||
// In this case, we'll split the wall into 2
|
||||
// 4. This linedef touches both points of the other wall
|
||||
// In this case, we'll just mark the other side as an opening
|
||||
enum Case {
|
||||
UNKNOWN,
|
||||
OVERLAP_NO_TOUCH,
|
||||
OVERLAP_LEFT_TOUCH,
|
||||
OVERLAP_RIGHT_TOUCH,
|
||||
OVERLAP_BOTH_TOUCH
|
||||
} type = UNKNOWN;
|
||||
|
||||
if (same_points)
|
||||
type = OVERLAP_BOTH_TOUCH;
|
||||
else if (on_segment && !start_cmp && !end_cmp)
|
||||
type = OVERLAP_NO_TOUCH;
|
||||
else if (left_join)
|
||||
type = OVERLAP_LEFT_TOUCH;
|
||||
else if (right_join)
|
||||
type = OVERLAP_RIGHT_TOUCH;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
if (!sector.inverted)
|
||||
case OVERLAP_NO_TOUCH:
|
||||
{
|
||||
ld.textures[TEX_FRONT] = nullptr;
|
||||
ld.flags = Wall::FLAG_OPENING | Wall::FLAG_TOUCHED;
|
||||
ld.portal = &s;
|
||||
}
|
||||
}
|
||||
else if (on_segment)
|
||||
{
|
||||
XYf old_end = ld.end;
|
||||
ld.end.x = l.end.x;
|
||||
ld.end.y = l.end.y;
|
||||
ld.flags = Wall::FLAG_TOUCHED;
|
||||
Wall w1 = ld;
|
||||
w1.start.x = ld.end.x;
|
||||
w1.start.y = ld.end.y;
|
||||
w1.end.x = l.start.x;
|
||||
w1.end.y = l.start.y;
|
||||
w1.textures[TEX_FRONT] = nullptr;
|
||||
w1.flags = Wall::FLAG_OPENING;
|
||||
w1.portal = &s;
|
||||
w1.flags = Wall::FLAG_TOUCHED;
|
||||
InsertLine(sector.walls, i + 1, w1);
|
||||
if (right_join && !left_join) {
|
||||
XYf old_end = ld.end;
|
||||
ld.end.x = l.end.x;
|
||||
ld.end.y = l.end.y;
|
||||
ld.flags = Wall::FLAG_TOUCHED;
|
||||
Wall w1 = ld;
|
||||
w1.start.x = ld.end.x;
|
||||
w1.start.y = ld.end.y;
|
||||
w1.end.x = l.start.x;
|
||||
w1.end.y = l.start.y;
|
||||
w1.textures[TEX_FRONT] = nullptr;
|
||||
w1.flags = Wall::FLAG_OPENING;
|
||||
w1.portal = &s;
|
||||
w1.flags = Wall::FLAG_TOUCHED;
|
||||
InsertLine(sector.walls, i + 1, w1);
|
||||
Wall w2 = ld;
|
||||
w2.start.x = w1.end.x;
|
||||
w2.start.y = w1.end.y;
|
||||
|
@ -368,11 +366,54 @@ void Map::JoinSectors(Sector& sector)
|
|||
w2.flags = Wall::FLAG_TOUCHED;
|
||||
InsertLine(sector.walls, i + 2, w2);
|
||||
}
|
||||
|
||||
break;
|
||||
case OVERLAP_LEFT_TOUCH:
|
||||
{
|
||||
Wall w1 = ld;
|
||||
ld.end.x = l.end.x;
|
||||
ld.end.y = l.end.y;
|
||||
ld.flags = Wall::FLAG_TOUCHED;
|
||||
w1.start.x = ld.end.x;
|
||||
w1.start.y = ld.end.y;
|
||||
w1.end.x = l.start.x;
|
||||
w1.end.y = l.start.y;
|
||||
w1.textures[TEX_FRONT] = nullptr;
|
||||
w1.flags = Wall::FLAG_OPENING | Wall::FLAG_TOUCHED;
|
||||
w1.portal = &s;
|
||||
InsertLine(sector.walls, i + 1, w1);
|
||||
}
|
||||
break;
|
||||
case OVERLAP_RIGHT_TOUCH:
|
||||
{
|
||||
Wall w1 = ld;
|
||||
XYf old_end = ld.end;
|
||||
ld.end.x = l.start.x;
|
||||
ld.end.y = l.start.y;
|
||||
ld.textures[TEX_FRONT] = nullptr;
|
||||
ld.flags = Wall::FLAG_OPENING | Wall::FLAG_TOUCHED;
|
||||
ld.portal = &s;
|
||||
w1.start.x = ld.end.x;
|
||||
w1.start.y = ld.end.y;
|
||||
w1.end.x = old_end.x;
|
||||
w1.end.y = old_end.y;
|
||||
w1.flags = Wall::FLAG_TOUCHED;
|
||||
InsertLine(sector.walls, i + 1, w1);
|
||||
}
|
||||
break;
|
||||
case OVERLAP_BOTH_TOUCH:
|
||||
{
|
||||
if (!sector.inverted) // not sure if we want to discount inverted sectors for just this case or all of
|
||||
// them; revisit me!
|
||||
{
|
||||
ld.textures[TEX_FRONT] = nullptr;
|
||||
ld.flags = Wall::FLAG_OPENING | Wall::FLAG_TOUCHED;
|
||||
ld.portal = &s;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Mark the other one as an opening
|
||||
// This really shouldn't be necessary I think, but whatever
|
||||
l.textures[TEX_FRONT] = nullptr;
|
||||
l.flags = Wall::FLAG_OPENING | Wall::FLAG_TOUCHED;
|
||||
l.portal = §or;
|
||||
|
@ -686,7 +727,7 @@ void Map::RenderSkybox()
|
|||
void Map::BuildGrid()
|
||||
{
|
||||
m_grid_shader.Load(".kp3d/map_grid_v.glsl", ".kp3d/map_grid_f.glsl");
|
||||
m_grid_texture.Load(".kp3d/map_grid.png", true, kp3d::Texture::FILTER_LINEAR);
|
||||
m_grid_texture.Load(".kp3d/map_grid.png", false, kp3d::Texture::FILTER_LINEAR);
|
||||
m_grid_mesh.AddBatch(&m_grid_texture, {
|
||||
Vertex3D(Vec3(-0.5f, 0.0f, 0.5f), Vec2(0.0f, 1.0f)),
|
||||
Vertex3D(Vec3(-0.5f, 0.0f, -0.5f), Vec2(0.0f, 0.0f)),
|
||||
|
@ -705,7 +746,7 @@ void Map::RenderGrid()
|
|||
{
|
||||
Renderer3D::PushShader(m_grid_shader);
|
||||
Vec3 camera_pos = Renderer3D::GetPrimaryCamera()->position;
|
||||
camera_pos.y = 0.0f;
|
||||
camera_pos.y = 0.01f;
|
||||
Transform grid_transform(camera_pos, {0.0, 0.0, 0.0}, {1000.0, 0.0, 1000.0});
|
||||
glDisable(GL_CULL_FACE);
|
||||
Renderer3D::DrawMesh(m_grid_mesh, grid_transform);
|
||||
|
|
|
@ -31,6 +31,7 @@ Editor::Editor()
|
|||
{
|
||||
m_stem.Load("editor/stem.png");
|
||||
m_block.Load("block.png", true);
|
||||
m_mode = MODE_BUILD;
|
||||
}
|
||||
|
||||
Editor::~Editor()
|
||||
|
@ -43,46 +44,97 @@ void Editor::Init()
|
|||
|
||||
void Editor::Update()
|
||||
{
|
||||
if (sandbox->IsKeyDown(kp3d::KEY_O))
|
||||
{
|
||||
sandbox->map.join_disabled ^= 1;
|
||||
sandbox->KeyReset(kp3d::KEY_O);
|
||||
}
|
||||
#define KEY_SHORTCUT(key, action) if (sandbox->IsKeyDown(kp3d::KEY_##key)) { action; sandbox->KeyReset(kp3d::KEY_##key); }
|
||||
|
||||
if (sandbox->IsMouseButtonDown(kp3d::MOUSE_BUTTON_LEFT))
|
||||
{
|
||||
points.push_back(m_stem_pos);
|
||||
KEY_SHORTCUT(SPACE, m_mode = MODE_NORMAL);
|
||||
KEY_SHORTCUT(V, m_mode = MODE_BUILD);
|
||||
KEY_SHORTCUT(C, m_mode = MODE_SECTOR_EDIT);
|
||||
|
||||
if (points.size() >= 3 && kp3d::PosCmp(points.back(), points.front(), 1.0f / 128.0f))// points.back() == points.front())
|
||||
if (m_mode == MODE_BUILD)
|
||||
{
|
||||
if (sandbox->IsMouseButtonDown(kp3d::MOUSE_BUTTON_LEFT))
|
||||
{
|
||||
kp3d::Sector s;
|
||||
s.ceiling.texture = &m_block;
|
||||
s.floor.texture = &m_block;
|
||||
s.floor.floor = true;
|
||||
s.floor.base_height = 0.0f;
|
||||
s.ceiling.base_height = 2.0f;
|
||||
s.id = sandbox->map.sectors.size() + 1;
|
||||
s.parent_id = 0;
|
||||
s.inverted = false;
|
||||
for (int i = 0; i < points.size() - 1; i++)
|
||||
{
|
||||
kp3d::Wall wall;
|
||||
wall.start = {points[i].x, -points[i].z};
|
||||
wall.end = {points[i+1].x, -points[i+1].z};
|
||||
wall.uid = i;
|
||||
for (int j = 0; j < 3; j++)
|
||||
wall.textures[j] = &m_block;
|
||||
points.push_back(m_stem_pos);
|
||||
|
||||
s.walls.push_back(wall);
|
||||
if (points.size() >= 3 && kp3d::PosCmp(points.back(), points.front(), 1.0f / 128.0f))// points.back() == points.front())
|
||||
{
|
||||
kp3d::Sector s;
|
||||
s.ceiling.texture = &m_block;
|
||||
s.floor.texture = &m_block;
|
||||
s.floor.floor = true;
|
||||
s.floor.base_height = 0.0f;
|
||||
s.ceiling.base_height = 2.0f;
|
||||
s.id = sandbox->map.sectors.size() + 1;
|
||||
s.parent_id = 0;
|
||||
s.inverted = false;
|
||||
for (int i = 0; i < points.size() - 1; i++)
|
||||
{
|
||||
kp3d::Wall wall;
|
||||
wall.start = { points[i].x, -points[i].z };
|
||||
wall.end = { points[i + 1].x, -points[i + 1].z };
|
||||
wall.uid = i;
|
||||
for (int j = 0; j < 3; j++)
|
||||
wall.textures[j] = &m_block;
|
||||
|
||||
s.walls.push_back(wall);
|
||||
}
|
||||
|
||||
sandbox->map.original_sectors.push_back(s);
|
||||
sandbox->map.Rebuild(kp3d::GEN_NORMALS);
|
||||
|
||||
points.clear();
|
||||
}
|
||||
|
||||
sandbox->map.original_sectors.push_back(s);
|
||||
sandbox->map.Rebuild(kp3d::GEN_NORMALS);
|
||||
|
||||
points.clear();
|
||||
sandbox->MouseButtonReset(kp3d::MOUSE_BUTTON_LEFT);
|
||||
}
|
||||
static kp3d::Vec3 start_pos;
|
||||
static bool has_start_pos = false;
|
||||
if (sandbox->IsMouseButtonDown(kp3d::MOUSE_BUTTON_RIGHT))
|
||||
{
|
||||
if (!has_start_pos)
|
||||
{
|
||||
start_pos = m_stem_pos;
|
||||
has_start_pos = true;
|
||||
}
|
||||
points.clear();
|
||||
points.emplace_back(m_stem_pos.x, start_pos.y, m_stem_pos.z);
|
||||
points.emplace_back(start_pos.x, start_pos.y, m_stem_pos.z);
|
||||
points.emplace_back(start_pos.x, start_pos.y, start_pos.z);
|
||||
points.emplace_back(m_stem_pos.x, start_pos.y, start_pos.z);
|
||||
points.emplace_back(m_stem_pos.x, start_pos.y, m_stem_pos.z);
|
||||
std::reverse(points.begin(), points.end());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (has_start_pos)
|
||||
{
|
||||
kp3d::Sector s;
|
||||
s.ceiling.texture = &m_block;
|
||||
s.floor.texture = &m_block;
|
||||
s.floor.floor = true;
|
||||
s.floor.base_height = 0.0f;
|
||||
s.ceiling.base_height = 2.0f;
|
||||
s.id = sandbox->map.sectors.size() + 1;
|
||||
s.parent_id = 0;
|
||||
s.inverted = false;
|
||||
for (int i = 0; i < points.size() - 1; i++)
|
||||
{
|
||||
kp3d::Wall wall;
|
||||
wall.start = { points[i].x, -points[i].z };
|
||||
wall.end = { points[i + 1].x, -points[i + 1].z };
|
||||
wall.uid = i;
|
||||
for (int j = 0; j < 3; j++)
|
||||
wall.textures[j] = &m_block;
|
||||
|
||||
sandbox->MouseButtonReset(kp3d::MOUSE_BUTTON_LEFT);
|
||||
s.walls.push_back(wall);
|
||||
}
|
||||
|
||||
sandbox->map.original_sectors.push_back(s);
|
||||
sandbox->map.Rebuild(kp3d::GEN_NORMALS);
|
||||
points.clear();
|
||||
has_start_pos = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -95,27 +147,10 @@ void Editor::RenderMap()
|
|||
if (points.size() > 1)
|
||||
{
|
||||
for (int i = 0; i < points.size() - 1; i++)
|
||||
{
|
||||
kp3d::Vec3 p0 = points[i];
|
||||
kp3d::Vec3 p1 = points[i + 1];
|
||||
|
||||
float target_thickness = 1.0f / 128.0f;
|
||||
float thickness = target_thickness;
|
||||
kp3d::Vec3 player_distance = ((p0 + p1) * 0.5f) - sandbox->camera.position;
|
||||
float d = sqrtf(
|
||||
player_distance.x * player_distance.x + player_distance.y * player_distance.y + player_distance.z * player_distance.z
|
||||
);
|
||||
if (d < 0.01f)
|
||||
d = 0.01f;
|
||||
thickness *= d;
|
||||
if (thickness > target_thickness)
|
||||
thickness = target_thickness;
|
||||
p0.y += 0.01f;
|
||||
p1.y += 0.01f;
|
||||
|
||||
kp3d::Renderer3D::DrawLine(p0, p1, thickness * d, 0xFF0000FF);
|
||||
}
|
||||
RenderLine(points[i], points[i + 1], 0xFF00FFFF);
|
||||
}
|
||||
if (points.size() > 0)
|
||||
RenderLine(points.back(), m_stem_pos, 0xFFFF00FF);
|
||||
|
||||
// Render the "stem"
|
||||
auto ray = kp3d::GetRayFromCamera(sandbox->camera);
|
||||
|
@ -155,6 +190,7 @@ void Editor::RenderStem(kp3d::Vec3 position)
|
|||
|
||||
void Editor::RenderUI()
|
||||
{
|
||||
// Menu bar
|
||||
ImGui::BeginMainMenuBar();
|
||||
if (ImGui::BeginMenu("File"))
|
||||
{
|
||||
|
@ -165,5 +201,65 @@ void Editor::RenderUI()
|
|||
{
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (ImGui::BeginMenu("View"))
|
||||
{
|
||||
ImGui::Checkbox("Info overlay", &show_info_overlay);
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
ImGui::EndMainMenuBar();
|
||||
|
||||
// Overlay
|
||||
RenderUIInfo();
|
||||
}
|
||||
|
||||
void Editor::RenderUIInfo()
|
||||
{
|
||||
if (!show_info_overlay)
|
||||
return;
|
||||
|
||||
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize |
|
||||
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing |
|
||||
ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoMove;
|
||||
ImGui::SetNextWindowBgAlpha(0.35f);
|
||||
if (ImGui::Begin("Editor Info", &show_info_overlay, window_flags))
|
||||
{
|
||||
std::string mode_str = "Unknown";
|
||||
switch (m_mode)
|
||||
{
|
||||
case MODE_NORMAL: mode_str = "Normal"; break;
|
||||
case MODE_BUILD: mode_str = "Build"; break;
|
||||
case MODE_SECTOR_EDIT: mode_str = "Sector Edit"; break;
|
||||
}
|
||||
ImGui::Text("Mode: %s\n", mode_str.c_str());
|
||||
ImGui::Separator();
|
||||
ImGui::Text("Caret Position: (%.1f, %.1f, %.1f)", m_stem_pos.x, m_stem_pos.y, m_stem_pos.z);
|
||||
if (ImGui::BeginPopupContextWindow())
|
||||
{
|
||||
if (ImGui::MenuItem("Hide", NULL, show_info_overlay == false))
|
||||
show_info_overlay = false;
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void Editor::RenderLine(kp3d::Vec3 p0, kp3d::Vec3 p1, kp3d::uint color)
|
||||
{
|
||||
float target_thickness = 1.0f / 128.0f;
|
||||
float thickness = target_thickness;
|
||||
kp3d::Vec3 player_distance = ((p0 + p1) * 0.5f) - sandbox->camera.position;
|
||||
float d = sqrtf(
|
||||
player_distance.x * player_distance.x + player_distance.y * player_distance.y + player_distance.z * player_distance.z
|
||||
);
|
||||
if (d < 0.01f)
|
||||
d = 0.01f;
|
||||
thickness *= d;
|
||||
if (thickness > target_thickness)
|
||||
thickness = target_thickness;
|
||||
p0.y += 0.01f;
|
||||
p1.y += 0.01f;
|
||||
|
||||
kp3d::Renderer3D::DrawLine(p0, p1, thickness * d, color);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
#include "KP3D_Texture.h"
|
||||
#include "KP3D_Math.h"
|
||||
|
||||
enum EditMode
|
||||
{
|
||||
MODE_NORMAL,
|
||||
MODE_BUILD,
|
||||
MODE_SECTOR_EDIT
|
||||
};
|
||||
|
||||
class Editor
|
||||
{
|
||||
public:
|
||||
|
@ -13,11 +20,24 @@ public:
|
|||
void Update();
|
||||
void RenderMap();
|
||||
void RenderStem(kp3d::Vec3 position);
|
||||
|
||||
void RenderModeBuild();
|
||||
void RenderModeSectorEdit();
|
||||
|
||||
void RenderUI();
|
||||
void RenderUIInfo();
|
||||
|
||||
private:
|
||||
void RenderLine(kp3d::Vec3 start, kp3d::Vec3 end, kp3d::uint color);
|
||||
|
||||
private:
|
||||
kp3d::Texture m_stem;
|
||||
kp3d::Texture m_block;
|
||||
kp3d::Vec3 m_stem_pos;
|
||||
EditMode m_mode;
|
||||
|
||||
// TODO: Refactor me!
|
||||
bool show_info_overlay = true;
|
||||
|
||||
|
||||
};
|
||||
|
|
|
@ -105,12 +105,12 @@ void Sandbox::Update()
|
|||
if (IsKeyDown(kp3d::KEY_S)) camera.Move(camera.forward, -move_speed);
|
||||
if (IsKeyDown(kp3d::KEY_A)) camera.Move(camera.right, move_speed);
|
||||
if (IsKeyDown(kp3d::KEY_D)) camera.Move(camera.right, -move_speed);
|
||||
if (IsKeyDown(kp3d::KEY_SPACE)) camera.position.y += move_speed;
|
||||
if (IsKeyDown(kp3d::KEY_LSHIFT)) camera.position.y -= move_speed;
|
||||
if (IsKeyDown(kp3d::KEY_Q)) camera.Rotate(kp3d::Camera::AXIS_X, qerf_speed);
|
||||
if (IsKeyDown(kp3d::KEY_E)) camera.Rotate(kp3d::Camera::AXIS_X, -qerf_speed);
|
||||
if (IsKeyDown(kp3d::KEY_R)) camera.Rotate(kp3d::Camera::AXIS_Y, qerf_speed);
|
||||
if (IsKeyDown(kp3d::KEY_F)) camera.Rotate(kp3d::Camera::AXIS_Y, -qerf_speed);
|
||||
//if (IsKeyDown(kp3d::KEY_SPACE)) camera.position.y += move_speed;
|
||||
//if (IsKeyDown(kp3d::KEY_LSHIFT)) camera.position.y -= move_speed;
|
||||
//if (IsKeyDown(kp3d::KEY_Q)) camera.Rotate(kp3d::Camera::AXIS_X, qerf_speed);
|
||||
//if (IsKeyDown(kp3d::KEY_E)) camera.Rotate(kp3d::Camera::AXIS_X, -qerf_speed);
|
||||
//if (IsKeyDown(kp3d::KEY_R)) camera.Rotate(kp3d::Camera::AXIS_Y, qerf_speed);
|
||||
//if (IsKeyDown(kp3d::KEY_F)) camera.Rotate(kp3d::Camera::AXIS_Y, -qerf_speed);
|
||||
ResetMouseCursor([&](float x, float y) { camera.UpdateMouseLook({x, y}); });
|
||||
camera.UpdateMatrix();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue