|
|
|
|
@ -6,6 +6,11 @@
|
|
|
|
|
|
|
|
|
|
#include "tangerine.h" |
|
|
|
|
|
|
|
|
|
using glm::vec3; |
|
|
|
|
using glm::vec4; |
|
|
|
|
using glm::uvec4; |
|
|
|
|
using glm::mat4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
loadLights(RenderState* rs) |
|
|
|
|
@ -16,15 +21,15 @@ loadLights(RenderState* rs)
|
|
|
|
|
#if 0 |
|
|
|
|
// NOTE: add a directional light
|
|
|
|
|
idx = (*lb->active_d_lights)++; |
|
|
|
|
lb->dl_directions[idx] = glm::vec4(-2, 1, 3, 1); |
|
|
|
|
lb->dl_colors[idx] = glm::vec4(0.5, 0.5, 0.3, 1); |
|
|
|
|
lb->dl_intensities[idx] = glm::uvec4(1, 0, 0, 0); |
|
|
|
|
lb->dl_directions[idx] = vec4(-2, 1, 3, 1); |
|
|
|
|
lb->dl_colors[idx] = vec4(0.5, 0.5, 0.3, 1); |
|
|
|
|
lb->dl_intensities[idx] = uvec4(1, 0, 0, 0); |
|
|
|
|
#endif |
|
|
|
|
// NOTE: add a point light
|
|
|
|
|
idx = (*lb->active_p_lights)++; |
|
|
|
|
lb->pl_positions[idx] = glm::vec4(-10, 0, -10, 1); |
|
|
|
|
lb->pl_colors[idx] = glm::vec4(1, 1, 0.8, 1); |
|
|
|
|
lb->pl_intensities[idx] = glm::vec4(3, 0, 0, 0); |
|
|
|
|
lb->pl_positions[idx] = vec4(-10, 0, -10, 1); |
|
|
|
|
lb->pl_colors[idx] = vec4(1, 1, 0.8, 1); |
|
|
|
|
lb->pl_intensities[idx] = vec4(3, 0, 0, 0); |
|
|
|
|
|
|
|
|
|
GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); |
|
|
|
|
assert(lights_ubo != nullptr); |
|
|
|
|
@ -50,7 +55,7 @@ loadLights(RenderState* rs)
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setEntityPosition(e, glm::vec3(lb->pl_positions[idx])); |
|
|
|
|
setEntityPosition(e, vec3(lb->pl_positions[idx])); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
@ -77,12 +82,12 @@ loadCubes(RenderState* rs)
|
|
|
|
|
|
|
|
|
|
// NOTE: init entities
|
|
|
|
|
const u32 NUM_CUBES = 5; |
|
|
|
|
glm::vec3 cube_locs[NUM_CUBES] = { |
|
|
|
|
glm::vec3( 0, 0, 0), |
|
|
|
|
glm::vec3(-10, 10, 0), |
|
|
|
|
glm::vec3(-10, -10, 0), |
|
|
|
|
glm::vec3( 10, 10, 0), |
|
|
|
|
glm::vec3( 10, -10, 0), |
|
|
|
|
vec3 cube_locs[NUM_CUBES] = { |
|
|
|
|
vec3( 0, 0, 0), |
|
|
|
|
vec3(-10, 10, 0), |
|
|
|
|
vec3(-10, -10, 0), |
|
|
|
|
vec3( 10, 10, 0), |
|
|
|
|
vec3( 10, -10, 0), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < NUM_CUBES; i++) { |
|
|
|
|
@ -135,7 +140,7 @@ loadSpaceShip(RenderState* rs)
|
|
|
|
|
shader_lit->attrib_mappings, |
|
|
|
|
"ship 01")) |
|
|
|
|
{ |
|
|
|
|
setEntityPosition(e, glm::vec3(0, -10, -15)); |
|
|
|
|
setEntityPosition(e, vec3(0, -10, -15)); |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
@ -150,7 +155,7 @@ testColoredVertices(RenderState* rs)
|
|
|
|
|
m.num_vertices = 5; |
|
|
|
|
m.num_indices = 12; |
|
|
|
|
|
|
|
|
|
glm::vec3 vertices[m.num_vertices] = { |
|
|
|
|
vec3 vertices[m.num_vertices] = { |
|
|
|
|
{ 0, 1, 0 }, |
|
|
|
|
{ -1, -1, -1 }, |
|
|
|
|
{ -1, -1, 1 }, |
|
|
|
|
@ -164,7 +169,7 @@ testColoredVertices(RenderState* rs)
|
|
|
|
|
1, 2, 3 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
glm::vec3 colors[m.num_vertices] = { |
|
|
|
|
vec3 colors[m.num_vertices] = { |
|
|
|
|
{ 1, 0, 0 }, |
|
|
|
|
{ 0, 1, 0 }, |
|
|
|
|
{ 0, 0, 1 }, |
|
|
|
|
@ -174,7 +179,7 @@ testColoredVertices(RenderState* rs)
|
|
|
|
|
m.vertices = vertices; |
|
|
|
|
m.colors = colors; |
|
|
|
|
m.indices = indices; |
|
|
|
|
glm::mat4 xform = glm::mat4(1); |
|
|
|
|
mat4 xform = mat4(1); |
|
|
|
|
m.xform = &xform; |
|
|
|
|
Model mdl = {0}; |
|
|
|
|
mdl.num_meshes = 1; |
|
|
|
|
@ -194,7 +199,7 @@ testColoredVertices(RenderState* rs)
|
|
|
|
|
shader->attrib_mappings, |
|
|
|
|
"colored pyramid 01")) |
|
|
|
|
{ |
|
|
|
|
setEntityPosition(e, glm::vec3(0, -10, 15)); |
|
|
|
|
setEntityPosition(e, vec3(0, -10, 15)); |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
@ -206,9 +211,9 @@ bool
|
|
|
|
|
loadCamera(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
Camera* cam = rs->camera; |
|
|
|
|
glm::vec3 cam_pos = { 0, 15, 40 }; |
|
|
|
|
glm::vec3 look_pos = { 0, 0, 0 }; |
|
|
|
|
glm::vec3 up = { 0, 1, 0 }; |
|
|
|
|
vec3 cam_pos = { 0, 15, 40 }; |
|
|
|
|
vec3 look_pos = { 0, 0, 0 }; |
|
|
|
|
vec3 up = { 0, 1, 0 }; |
|
|
|
|
cameraInitPerspective(cam, cam_pos, look_pos, up); |
|
|
|
|
GLBuffer* xforms_ubo = getUBOByName(rs->gl_ctx, "matrices"); |
|
|
|
|
|
|
|
|
|
@ -247,7 +252,7 @@ loadScene(RenderState* rs)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
orbitPositionZ0(glm::vec4* pos, float angle) |
|
|
|
|
orbitPositionZ0(vec4* pos, float angle) |
|
|
|
|
{ |
|
|
|
|
// get radius length
|
|
|
|
|
float r = sqrt(pow(abs(pos->x), 2) + pow(abs(pos->z), 2)); |
|
|
|
|
@ -279,16 +284,16 @@ render_cb_pre(RenderState* rs)
|
|
|
|
|
orbitPositionZ0(&lb->pl_positions[0], 2 * M_PI / 180); |
|
|
|
|
RenderGroup* rg = getRenderGroupByName(rs, "debug_lights"); |
|
|
|
|
Entity* ent = &rg->entities[0]; |
|
|
|
|
setEntityPosition(ent, glm::vec3(lb->pl_positions[0])); |
|
|
|
|
setEntityPosition(ent, vec3(lb->pl_positions[0])); |
|
|
|
|
|
|
|
|
|
GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); |
|
|
|
|
assert(lights_ubo); |
|
|
|
|
updateGLBuffer(lights_ubo, lb->buffer); |
|
|
|
|
|
|
|
|
|
// NOTE: orbit camera
|
|
|
|
|
static glm::vec4 cam_pos; |
|
|
|
|
static glm::vec3 look_pos; |
|
|
|
|
static glm::vec3 up; |
|
|
|
|
static vec4 cam_pos; |
|
|
|
|
static vec3 look_pos; |
|
|
|
|
static vec3 up; |
|
|
|
|
static bool initialized = false; |
|
|
|
|
|
|
|
|
|
if (!initialized) { |
|
|
|
|
@ -300,7 +305,7 @@ render_cb_pre(RenderState* rs)
|
|
|
|
|
|
|
|
|
|
orbitPositionZ0(&cam_pos, 0.5 * M_PI / 180); |
|
|
|
|
rs->camera->xforms.view = |
|
|
|
|
glm::lookAt(glm::vec3(cam_pos), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0)); |
|
|
|
|
glm::lookAt(vec3(cam_pos), vec3(0, 0, 0), vec3(0, 1, 0)); |
|
|
|
|
|
|
|
|
|
static GLBuffer* xform_ubo = nullptr; |
|
|
|
|
|
|
|
|
|
@ -317,9 +322,7 @@ render_cb_pre(RenderState* rs)
|
|
|
|
|
for (u32 j = 0; j < rg2->num_entities; j++) { |
|
|
|
|
Entity& e = rg2->entities[j]; |
|
|
|
|
float direction = (j % 2 == 0) ? 1 : -1; |
|
|
|
|
rotateEntity(&e, |
|
|
|
|
glm::vec3(0, 1, 0), |
|
|
|
|
direction * (float) M_PI / (3 * 60)); |
|
|
|
|
rotateEntity(&e, vec3(0, 1, 0), direction * (float) M_PI / (3 * 60)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|