fixed lighting. The ball is be-au-ti-ful
parent
507b475539
commit
273a8e010f
|
@ -101,13 +101,15 @@ void main()
|
|||
vec2 texelSize = vec2_splat(1.0/u_shadowMapSize);
|
||||
float visibility = PCF(u_shadowMap, v_shadowcoord, u_shadowMapBias, texelSize);
|
||||
|
||||
vec3 ambient = 0.1 * color;
|
||||
vec3 brdf = color * visibility;
|
||||
vec3 ambient = 0.05 * color;
|
||||
vec3 brdf = (lc.x + lc.y) * color * visibility;
|
||||
|
||||
#if TEXTURED
|
||||
vec4 texcolor = toLinear (texture2D(sceneDefaultTexture, v_texcoord0) );
|
||||
brdf = brdf * texcolor.xyz;
|
||||
ambient = ambient * texcolor.xyz;
|
||||
#endif
|
||||
vec3 final = toGamma(abs(ambient + brdf) );
|
||||
|
||||
gl_FragColor = vec4(final, 1.0);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0);
|
||||
vec3 v_dir : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
|
||||
vec3 v_view : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
|
||||
vec4 v_shadowcoord : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
vec4 v_position : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0);
|
||||
vec4 v_shadowcoord : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
vec4 v_position : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
vec3 v_dir : TEXCOORD3 = vec3(0.0, 0.0, 0.0);
|
||||
vec2 v_texcoord0 : TEXCOORD4 = vec2(0.0, 0.0);
|
||||
vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0);
|
||||
vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ void main()
|
|||
gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
|
||||
|
||||
vec4 normal = a_normal * 2.0 - 1.0;
|
||||
v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz);
|
||||
v_normal = normalize(normal.xyz);
|
||||
v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz;
|
||||
|
||||
const float shadowMapOffset = 0.001;
|
||||
|
|
|
@ -9,13 +9,14 @@ $output v_view, v_normal, v_shadowcoord, v_texcoord0
|
|||
#include "../common/common.sh"
|
||||
|
||||
uniform mat4 u_lightMtx;
|
||||
uniform vec4 u_lightPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
|
||||
|
||||
vec4 normal = a_normal * 2.0 - 1.0;
|
||||
v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz);
|
||||
v_normal = normalize(normal.xyz);
|
||||
v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz;
|
||||
|
||||
const float shadowMapOffset = 0.001;
|
||||
|
|
|
@ -466,10 +466,10 @@ bgfx::VertexDecl PosColorTexCoord0Vertex::ms_decl;
|
|||
// Plane
|
||||
PosNormalColorTexcoordVertex s_hplaneVertices[] =
|
||||
{
|
||||
{ -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 0.f, 0.f },
|
||||
{ 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 10.f, 0.f },
|
||||
{ -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 0.f, 10.f},
|
||||
{ 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 10.f, 10.f },
|
||||
{ -1.0f, 0.0f, 1.0f, packF4u(0.0f, -1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 0.f, 0.f },
|
||||
{ 1.0f, 0.0f, 1.0f, packF4u(0.0f, -1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 10.f, 0.f },
|
||||
{ -1.0f, 0.0f, -1.0f, packF4u(0.0f, -1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 0.f, 10.f},
|
||||
{ 1.0f, 0.0f, -1.0f, packF4u(0.0f, -1.0f, 0.0f), packF4u(1.0f, 1.0f, 1.0f), 10.f, 10.f },
|
||||
};
|
||||
|
||||
const uint16_t s_planeIndices[] =
|
||||
|
@ -755,7 +755,7 @@ void Renderer::setupShaders() {
|
|||
std::cout << "Creating light uniforms..." << std::endl;
|
||||
lights[0].u_shadowMap = bgfx::createUniform("u_shadowMap", bgfx::UniformType::Int1);
|
||||
lights[0].u_shadowMapParams = bgfx::createUniform("u_shadowMapParams", bgfx::UniformType::Vec4);
|
||||
lights[0].u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Int1);
|
||||
lights[0].u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Vec4);
|
||||
lights[0].u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Int1);
|
||||
|
||||
// Setup the light probe pass
|
||||
|
@ -1103,7 +1103,7 @@ void Renderer::paintGL() {
|
|||
float eye[3];
|
||||
eye[0] = lights[i].pos[0];
|
||||
eye[1] = lights[i].pos[1];
|
||||
eye[2] = lights[0].pos[2];
|
||||
eye[2] = lights[i].pos[2];
|
||||
|
||||
float at[3];
|
||||
at[0] = - lights[i].pos[0] + lights[i].dir[0];
|
||||
|
@ -1168,6 +1168,7 @@ void Renderer::paintGL() {
|
|||
// Floor.
|
||||
bx::mtxMul(lightMtx, mtxFloor, lights[0].mtxShadow);
|
||||
bgfx::setUniform(lights[0].u_lightMtx, lightMtx);
|
||||
bgfx::setUniform(lights[0].u_lightPos, lights[0].pos);
|
||||
|
||||
// Clear backbuffer and shadowmap framebuffer at beginning.
|
||||
bgfx::setViewClear(RenderState::Skybox
|
||||
|
@ -1237,6 +1238,7 @@ void Renderer::paintGL() {
|
|||
}
|
||||
|
||||
bgfx::setUniform(lights[0].u_lightMtx, lightMtx);
|
||||
bgfx::setUniform(lights[0].u_lightPos, lights[0].pos);
|
||||
bgfx::setUniform(u_color, Vector4f(1.f, 1.f, 1.f, 1.f).data(), 4);
|
||||
bgfx::setIndexBuffer(plane_ibh);
|
||||
bgfx::setVertexBuffer(plane_vbh);
|
||||
|
@ -1246,15 +1248,19 @@ void Renderer::paintGL() {
|
|||
|
||||
// render entities
|
||||
for (size_t i = 0; i < entities.size(); i++) {
|
||||
float mtxLightViewProjInv[16];
|
||||
float light_pos_world[3];
|
||||
// shadow map pass
|
||||
bx::mtxMul(lightMtx, entities[i]->transform, lights[0].mtxShadow);
|
||||
bgfx::setUniform(lights[0].u_lightMtx, lightMtx);
|
||||
bgfx::setUniform(lights[0].u_lightPos, lights[0].pos);
|
||||
bgfx::setUniform(u_color, entities[i]->color, 4);
|
||||
meshSubmit(entities[i]->mesh, &s_renderStates[RenderState::ShadowMap], 1, entities[i]->transform);
|
||||
|
||||
// scene pass
|
||||
bx::mtxMul(lightMtx, entities[i]->transform, lights[0].mtxShadow);
|
||||
bgfx::setUniform(lights[0].u_lightMtx, lightMtx);
|
||||
bgfx::setUniform(lights[0].u_lightPos, lights[0].pos);
|
||||
bgfx::setUniform(u_color, entities[i]->color, 4);
|
||||
meshSubmit(entities[i]->mesh, &s_renderStates[RenderState::Scene], 1, entities[i]->transform);
|
||||
}
|
||||
|
@ -1385,6 +1391,25 @@ void Renderer::paintGL() {
|
|||
|
||||
ImGui::Begin("Render Settings");
|
||||
|
||||
if(ImGui::DragFloat3 ("Light0 Pos", lights[0].pos, 1.0f, -10.0f, 10.0f)) {
|
||||
}
|
||||
|
||||
if(ImGui::DragFloat3 ("Light0 Dir", lights[0].dir, 1.0f, -10.0f, 10.0f)) {
|
||||
}
|
||||
|
||||
float light_at[3];
|
||||
light_at[0] = lights[0].dir[0] - lights[0].pos[0];
|
||||
light_at[1] = lights[0].dir[1] - lights[0].pos[1];
|
||||
light_at[2] = lights[0].dir[2] - lights[0].pos[2];
|
||||
|
||||
if(ImGui::DragFloat3 ("Light0 At", light_at, 1.0f, -10.0f, 10.0f)) {
|
||||
lights[0].dir[0] = lights[0].pos[0]- light_at[0];
|
||||
lights[0].dir[1] = lights[0].pos[1]- light_at[1];
|
||||
lights[0].dir[2] = lights[0].pos[2]- light_at[2];
|
||||
}
|
||||
|
||||
assert (lights.size() == 1);
|
||||
|
||||
ImGui::Checkbox("Draw Debug", &drawDebug);
|
||||
|
||||
for (int i = 0; i < lights.size(); i++) {
|
||||
|
|
|
@ -53,7 +53,7 @@ struct Camera {
|
|||
up {0.f, 1.f, 0.f},
|
||||
near (0.1f),
|
||||
far (150.f),
|
||||
fov (70.f),
|
||||
fov (60.f),
|
||||
orthographic (false),
|
||||
width (-1.f),
|
||||
height (-1.f),
|
||||
|
@ -86,7 +86,7 @@ struct Light {
|
|||
|
||||
bgfx::TextureHandle shadowMapTexture;
|
||||
bgfx::FrameBufferHandle shadowMapFB;
|
||||
float pos[3];
|
||||
float pos[4];
|
||||
float dir[3];
|
||||
|
||||
float mtxView[16];
|
||||
|
@ -108,7 +108,7 @@ struct Light {
|
|||
u_lightMtx (BGFX_INVALID_HANDLE),
|
||||
shadowMapTexture (BGFX_INVALID_HANDLE),
|
||||
shadowMapFB (BGFX_INVALID_HANDLE),
|
||||
pos {10.f, 10.f, 10.f},
|
||||
pos {0.f, 10.f, 10.f, 1.0f},
|
||||
dir {-1.f, -1.f, -1.f},
|
||||
mtxView {
|
||||
1.f, 0.f, 0.f, 0.f,
|
||||
|
|
|
@ -275,11 +275,14 @@ static void module_reload(struct module_state *state) {
|
|||
|
||||
cout << "Creating render entity mesh ..." << endl;
|
||||
state->character->entity->mesh = bgfxutils::createUVSphere (45, 45);
|
||||
// state->character->entity->mesh = bgfxutils::createCuboid (1.f, 1.f, 1.f);
|
||||
// state->character->entity->mesh = bgfxutils::createCylinder (20);
|
||||
cout << "Creating render entity mesh ... success!" << endl;
|
||||
|
||||
// load the state of the entity
|
||||
SerializeVec3(*gReadSerializer, "protot.TestModule.entity.position", state->character->position);
|
||||
SerializeBool(*gReadSerializer, "protot.TestModule.modules_window.visible", state->modules_window_visible);
|
||||
SerializeInt(*gReadSerializer, "protot.TestModule.modules_window.selection_index", state->modules_window_selected_index);
|
||||
|
||||
glfwSetScrollCallback (gWindow, mouse_scroll_callback);
|
||||
}
|
||||
|
@ -289,6 +292,8 @@ static void module_unload(struct module_state *state) {
|
|||
|
||||
// serialize the state of the entity
|
||||
SerializeVec3(*gWriteSerializer, "protot.TestModule.entity.position", state->character->position);
|
||||
SerializeBool(*gWriteSerializer, "protot.TestModule.modules_window.visible", state->modules_window_visible);
|
||||
SerializeInt(*gWriteSerializer, "protot.TestModule.modules_window.selection_index", state->modules_window_selected_index);
|
||||
|
||||
// clean up
|
||||
cout << "destroying render entity " << state->character->entity << endl;
|
||||
|
|
Loading…
Reference in New Issue