-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1642 from nikhilghosh75/frustum-culling
Frustum culling
- Loading branch information
Showing
54 changed files
with
1,757 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#version 330 | ||
|
||
in vec2 vert_uv; | ||
|
||
layout(location=0) out vec4 col; | ||
|
||
uniform sampler2D tex; | ||
|
||
// position (top left corner) and size: (x, y, width, height) | ||
uniform vec4 tile_params; | ||
|
||
vec2 uv = vec2( | ||
vert_uv.x * tile_params.z + tile_params.x, | ||
vert_uv.y * tile_params.w + tile_params.y | ||
); | ||
|
||
void main() { | ||
vec4 tex_val = texture(tex, uv); | ||
int alpha = int(round(tex_val.a * 255)); | ||
switch (alpha) { | ||
case 0: | ||
col = tex_val; | ||
discard; | ||
case 254: | ||
col = vec4(1.0f, 0.0f, 0.0f, 1.0f); | ||
break; | ||
case 252: | ||
col = vec4(0.0f, 1.0f, 0.0f, 1.0f); | ||
break; | ||
case 250: | ||
col = vec4(0.0f, 0.0f, 1.0f, 1.0f); | ||
break; | ||
default: | ||
col = tex_val; | ||
break; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
#version 330 | ||
|
||
layout(location=0) in vec2 v_position; | ||
layout(location=1) in vec2 uv; | ||
|
||
out vec2 vert_uv; | ||
|
||
// camera parameters for transforming the object position | ||
// and scaling the subtex to the correct size | ||
layout (std140) uniform camera { | ||
// view matrix (world to view space) | ||
mat4 view; | ||
// projection matrix (view to clip space) | ||
mat4 proj; | ||
// inverse zoom factor (1.0 / zoom) | ||
// high zoom = upscale subtex | ||
// low zoom = downscale subtex | ||
float inv_zoom; | ||
// inverse viewport size (1.0 / viewport size) | ||
vec2 inv_viewport_size; | ||
}; | ||
|
||
// position of the object in world space | ||
uniform vec3 obj_world_position; | ||
|
||
// parameters for scaling and moving the subtex | ||
// to the correct position in clip space | ||
|
||
// animation scalefactor | ||
// scales the vertex positions so that they | ||
// match the subtex dimensions | ||
// | ||
// high animation scale = downscale subtex | ||
// low animation scale = upscale subtex | ||
uniform float scale; | ||
|
||
// size of the subtex (in pixels) | ||
uniform vec2 subtex_size; | ||
|
||
// offset of the subtex anchor point | ||
// from the subtex center (in pixels) | ||
// used to move the subtex so that the anchor point | ||
// is at the object position | ||
uniform vec2 anchor_offset; | ||
|
||
void main() { | ||
// translate the position of the object from world space to clip space | ||
// this is the position where we want to draw the subtex in 2D | ||
vec4 obj_clip_pos = proj * view * vec4(obj_world_position, 1.0); | ||
|
||
// subtex has to be scaled to account for the zoom factor | ||
// and the animation scale factor. essentially this is (animation scale / zoom). | ||
float zoom_scale = scale * inv_zoom; | ||
|
||
// Scale the subtex vertices | ||
// we have to account for the viewport size to get the correct dimensions | ||
// and then scale the subtex to the zoom factor to get the correct size | ||
vec2 vert_scale = zoom_scale * subtex_size * inv_viewport_size; | ||
|
||
// Scale the anchor offset with the same method as above | ||
// to get the correct anchor position in the viewport | ||
vec2 anchor_scale = zoom_scale * anchor_offset * inv_viewport_size; | ||
|
||
// offset the clip position by the offset of the subtex anchor | ||
// imagine this as pinning the subtex to the object position at the subtex anchor point | ||
obj_clip_pos += vec4(anchor_scale.x, anchor_scale.y, 0.0, 0.0); | ||
|
||
// create a move matrix for positioning the vertices | ||
// uses the vert scale and the transformed object position in clip space | ||
mat4 move = mat4(vert_scale.x, 0.0, 0.0, 0.0, | ||
0.0, vert_scale.y, 0.0, 0.0, | ||
0.0, 0.0, 1.0, 0.0, | ||
obj_clip_pos.x, obj_clip_pos.y, obj_clip_pos.z, 1.0); | ||
|
||
// calculate the final vertex position | ||
gl_Position = move * vec4(v_position, 0.0, 1.0); | ||
|
||
// flip y axis because OpenGL uses bottom-left as its origin | ||
float uv_x = uv.x; | ||
float uv_y = 1.0 - uv.y; | ||
|
||
vert_uv = vec2(uv_x, uv_y); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#version 330 | ||
|
||
out vec4 col; | ||
|
||
void main() { | ||
col = vec4(1.0, 0.0, 0.0, 0.8); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#version 330 | ||
|
||
layout(location=0) in vec2 v_position; | ||
|
||
// camera parameters for transforming the object position | ||
// and scaling the subtex to the correct size | ||
layout (std140) uniform camera { | ||
// view matrix (world to view space) | ||
mat4 view; | ||
// projection matrix (view to clip space) | ||
mat4 proj; | ||
// inverse zoom factor (1.0 / zoom) | ||
float inv_zoom; | ||
// inverse viewport size (1.0 / viewport size) | ||
vec2 inv_viewport_size; | ||
}; | ||
|
||
// position of the object in world space | ||
uniform vec3 obj_world_position; | ||
|
||
// parameters for scaling and moving the subtex | ||
// to the correct position in clip space | ||
|
||
// animation scalefactor | ||
// scales the vertex positions so that they | ||
// match the subtex dimensions | ||
// | ||
// high animation scale = downscale subtex | ||
// low animation scale = upscale subtex | ||
uniform float scale; | ||
|
||
// size of the frame (in pixels) | ||
uniform vec2 frame_size; | ||
|
||
void main() { | ||
// translate the position of the object from world space to clip space | ||
// this is the position where we want to draw the subtex in 2D | ||
vec4 obj_clip_pos = proj * view * vec4(obj_world_position, 1.0); | ||
|
||
// subtex has to be scaled to account for the zoom factor | ||
// and the animation scale factor. essentially this is (animation scale / zoom). | ||
float zoom_scale = scale * inv_zoom; | ||
|
||
// Scale the subtex vertices | ||
// we have to account for the viewport size to get the correct dimensions | ||
// and then scale the frame to the zoom factor to get the correct size | ||
vec2 vert_scale = zoom_scale * frame_size * inv_viewport_size; | ||
|
||
// create a move matrix for positioning the vertices | ||
// uses the vert scale and the transformed object position in clip space | ||
mat4 move = mat4(vert_scale.x, 0.0, 0.0, 0.0, | ||
0.0, vert_scale.y, 0.0, 0.0, | ||
0.0, 0.0, 1.0, 0.0, | ||
obj_clip_pos.x, obj_clip_pos.y, obj_clip_pos.z, 1.0); | ||
|
||
// calculate the final vertex position | ||
gl_Position = move * vec4(v_position, 0.0, 1.0); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#version 330 | ||
|
||
in vec2 tex_pos; | ||
|
||
layout(location=0) out vec4 out_col; | ||
|
||
uniform sampler2D tex; | ||
|
||
void main() | ||
{ | ||
vec4 tex_val = texture(tex, tex_pos); | ||
out_col = tex_val; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#version 330 | ||
|
||
layout (location = 0) in vec3 position; | ||
layout (location = 1) in vec2 uv; | ||
|
||
out vec2 tex_pos; | ||
|
||
// camera parameters for transforming the object position | ||
// and scaling the subtex to the correct size | ||
layout (std140) uniform camera { | ||
// view matrix (world to view space) | ||
mat4 view; | ||
// projection matrix (view to clip space) | ||
mat4 proj; | ||
// inverse zoom factor (1.0 / zoom) | ||
float inv_zoom; | ||
// inverse viewport size (1.0 / viewport size) | ||
vec2 inv_viewport_size; | ||
}; | ||
|
||
void main() { | ||
gl_Position = proj * view * vec4(position, 1.0); | ||
tex_pos = vec2(uv.x, 1.0 - uv.y); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#version 330 | ||
|
||
uniform sampler2D color_texture; | ||
|
||
in vec2 v_uv; | ||
out vec4 col; | ||
|
||
void main() { | ||
col = texture(color_texture, v_uv); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#version 330 | ||
|
||
layout(location=0) in vec2 position; | ||
layout(location=1) in vec2 uv; | ||
out vec2 v_uv; | ||
|
||
void main() { | ||
gl_Position = vec4(position, 0.0, 1.0); | ||
v_uv = uv; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
add_sources(libopenage | ||
camera.cpp | ||
definitions.cpp | ||
frustum_2d.cpp | ||
frustum_3d.cpp | ||
) |
Oops, something went wrong.