Pixel-Composer/scripts/d3d_light_directional/d3d_light_directional.gml

71 lines
2.1 KiB
Plaintext
Raw Normal View History

2023-08-14 19:22:04 +02:00
function __3dLightDirectional() : __3dLight() constructor {
vertex = [ V3(1, 0, 0, c_yellow, 0.8), V3(3, 0, 0, c_yellow, 0.8) ];
2023-08-16 20:16:31 +02:00
VF = global.VF_POS_COL;
2023-08-14 19:22:04 +02:00
render_type = pr_linelist;
2023-08-16 20:16:31 +02:00
VB = build();
2023-08-14 19:22:04 +02:00
2023-08-16 20:16:31 +02:00
color = c_white;
2023-08-14 19:22:04 +02:00
intensity = 1;
2023-08-16 20:16:31 +02:00
position.set(4, 0, 0);
2023-08-14 19:22:04 +02:00
shadow_mapper = sh_d3d_shadow_depth;
static submitSel = function(params = {}) { #region
2023-08-14 19:22:04 +02:00
shader_set(sh_d3d_wireframe);
2023-08-16 20:16:31 +02:00
preSubmitVertex(params);
2023-08-14 19:22:04 +02:00
shader_reset();
} #endregion
2023-08-14 19:22:04 +02:00
2023-08-16 20:16:31 +02:00
static submitShader = function(params = {}) { params.addLightDirectional(self); }
static preSubmitVertex = function(params = {}) { #region
2023-08-16 20:16:31 +02:00
var _rot = new __rot3(0, 0, 0).lookAt(position, params.camera.position);
2023-08-14 19:22:04 +02:00
2023-08-16 20:16:31 +02:00
var rot = matrix_build(0, 0, 0,
_rot.x, _rot.y, _rot.z,
1, 1, 1);
var sca = matrix_build(0, 0, 0,
0, 0, 0,
0.6, 0.6, 0.6);
var pos = matrix_build(position.x, position.y, position.z,
0, 0, 0,
1, 1, 1);
2023-08-14 19:22:04 +02:00
2023-08-16 20:16:31 +02:00
matrix_stack_clear();
matrix_stack_push(pos);
matrix_stack_push(rot);
matrix_set(matrix_world, matrix_stack_top());
vertex_submit(VB_UI, pr_linestrip, -1);
matrix_stack_push(sca);
matrix_set(matrix_world, matrix_stack_top());
vertex_submit(VB_UI, pr_linestrip, -1);
matrix_stack_clear();
matrix_set(matrix_world, matrix_build_identity());
} #endregion
static shadowProjectBegin = function() { #region
shadow_map = surface_verify(shadow_map, shadow_map_size, shadow_map_size, surface_r32float);
shadow_map_view = matrix_build_lookat(position.x, position.y, position.z, 0, 0, 0, 0, 0, -1);
shadow_map_proj = matrix_build_projection_ortho(shadow_map_size / shadow_map_scale, shadow_map_size / shadow_map_scale, .01, 100);
surface_set_target(shadow_map);
draw_clear(c_black);
shader_set(shadow_mapper);
gpu_set_ztestenable(true);
camera_set_view_mat(shadow_map_camera, shadow_map_view);
camera_set_proj_mat(shadow_map_camera, shadow_map_proj);
camera_apply(shadow_map_camera);
} #endregion
static shadowProjectEnd = function() { #region
shader_reset();
surface_reset_target();
camera_apply(0);
gpu_set_ztestenable(false);
} #endregion
2023-08-14 19:22:04 +02:00
}