1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#include "game.h"
/*We upload all the light vectors*/
static const Light diffuseLight[4] =
{
/* Sun Light */
{ {5.0f, 50.0f, 2.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, 0.0f, 0.0f} },
/* Other lights */
{ {10.0f, 20.0f, 0.0f}, {1.0f, 0.0f, 0.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
{ {20.0f, 20.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
{ {30.0f, 20.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
};
void Draw(Game *game)
{
Mat4 viewMatrix, projectedViewMatrix, modelTransform, projectionMatrix;
Vec3 pos = {-10.0, 70.0, 10.0};
Vec3 viewDirection = {0.22, -0.77, -0.58};
Vec3 up = {0.0f, 1.0f, 0.0f};
Render_BeginFrame();
shader_set_uniform_vec3(game->shaderProgram, "World_eyePosition", (float *)&game->camera->position);
Render_LoadLights(game->shaderProgram, diffuseLight, 1);
texture_bind(game->normalMap[1], 13);
glUniform1i(game->shaderProgram->Normal_Map, 13);
viewMatrix = mat4_lookAt(&pos, &viewDirection, &up);
projectionMatrix = mat4_orthographic(-50.0f, 50.0f, -50.0f, 50.0f, -50.0f, 70.0f);
//
projectedViewMatrix = mat4_mul(&projectionMatrix, &viewMatrix);
Render_DrawEntity(game->shaderProgram, &projectedViewMatrix, &game->player.entity);
texture_bind(game->normalMap[0], 13);
Render_DrawEntity(game->shaderProgram, &projectedViewMatrix, &game->ents[0]);
Render_EndFrame();
Vec3 t = {-1.0f, 10.0f, -1.0f};
modelTransform = mat4_translate(&t);
Mat4 temp = mat4_scale(10.0f, 10.0f, 10.0f);
modelTransform = mat4_mul(&modelTransform, &temp);
viewMatrix = camera_get_model_to_view_matrix(game->camera);
projectionMatrix = game->camera->projectionMatrix;
projectedViewMatrix = mat4_mul(&projectionMatrix, &viewMatrix);
modelTransform = mat4_mul(&projectedViewMatrix, &modelTransform);
glBindTexture(GL_TEXTURE_2D, render.shadow_map);
glUseProgram(render.default_shader->id);
glUniform1i(render.default_shader->Texture, 0);
glUniformMatrix4fv(render.default_shader->totalTransform, 1, GL_FALSE, modelTransform.data);
glBindVertexArray(render.default_quad->vao);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindVertexArray(0);
/*
glUseProgram(game->terrainProgram->id);
shader_set_uniform_vec3(game->terrainProgram, "World_eyePosition", (float *)&game->camera->position);
Render_LoadLights(game->terrainProgram, diffuseLight, 1);
Render_DrawTerrain(game->terrainProgram, &projectedViewMatrix, game->terrain);
glUseProgram(game->skyboxProgram->id);
Render_DrawSky(game->skyboxProgram, &viewMatrix, &game->camera->projectionMatrix, &game->sky);
glUseProgram(game->particlesProgram->id);
Render_DrawParticles(game->particlesProgram, &viewMatrix,
&game->camera->projectionMatrix);
*/
glUseProgram(game->shaderProgram->id);
window_update(game->window);
}
|