Specular calculations for deferred lighting in progress

--HG--
extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4049
This commit is contained in:
kearwood
2012-04-20 00:17:15 +00:00
parent 21762174bf
commit 17e0503529
6 changed files with 13 additions and 29 deletions

View File

@@ -60,7 +60,6 @@ KRCamera::KRCamera() {
dSunB = 0.70f;
perspective_fov = PI / 8.0;
perspective_aspect = 1.3333;
perspective_nearz = 0.25f;
perspective_farz = 100.0f;
@@ -86,8 +85,7 @@ KRCamera::~KRCamera() {
KRMat4 KRCamera::getProjectionMatrix() {
KRMat4 projectionMatrix;
projectionMatrix.perspective(perspective_fov, perspective_aspect, perspective_nearz, perspective_farz);
projectionMatrix.rotate(-90 * 0.0174532925199, Z_AXIS);
projectionMatrix.perspective(perspective_fov, m_viewportSize.x / m_viewportSize.y, perspective_nearz, perspective_farz);
return projectionMatrix;
}

View File

@@ -67,7 +67,6 @@ public:
double perspective_fov;
double perspective_nearz;
double perspective_farz;
double perspective_aspect;
int dof_quality;
double dof_depth;

View File

@@ -121,7 +121,6 @@ typedef enum KREngineParameterType {KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_F
- (void)renderScene: (KRScene *)pScene WithPosition: (KRVector3)position Yaw: (GLfloat)yaw Pitch: (GLfloat)pitch Roll: (GLfloat)roll;
- (void)setNearZ: (double)dNearZ;
- (void)setFarZ: (double)dFarZ;
- (void)setAspect: (double)dAspect;
- (void)setDebugText: (NSString *)text;
@end

View File

@@ -210,11 +210,14 @@ double const PI = 3.141592653589793f;
viewMatrix.rotate(yaw, Y_AXIS);
viewMatrix.rotate(pitch, X_AXIS);
viewMatrix.rotate(roll, Z_AXIS);
[self renderScene: pScene WithViewMatrix: viewMatrix];
}
- (void)renderScene: (KRScene *)pScene WithViewMatrix: (KRMat4)viewMatrix
{
viewMatrix.rotate(-90 * 0.0174532925199, Z_AXIS);
KRMat4 invViewMatrix = viewMatrix;
invViewMatrix.invert();
@@ -248,7 +251,7 @@ double const PI = 3.141592653589793f;
newShadowMVP = ext.calcShadowProj(pScene, m_pContext, sun_yaw, sun_pitch);
} else {
KRBoundingVolume frustrumSliceVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.perspective_aspect, m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMinDepths[m_cShadowBuffers - 1][iShadow], m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMaxDepths[m_cShadowBuffers - 1][iShadow]);
KRBoundingVolume frustrumSliceVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.getViewportSize().x / m_camera.getViewportSize().y, m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMinDepths[m_cShadowBuffers - 1][iShadow], m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMaxDepths[m_cShadowBuffers - 1][iShadow]);
newShadowMVP = frustrumSliceVolume.calcShadowProj(pScene, m_pContext, sun_yaw, sun_pitch);
}
@@ -360,7 +363,7 @@ double const PI = 3.141592653589793f;
KRBoundingVolume frustrumVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.perspective_aspect, m_camera.perspective_nearz, m_camera.perspective_farz);
KRBoundingVolume frustrumVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.getViewportSize().x / m_camera.getViewportSize().y, m_camera.perspective_nearz, m_camera.perspective_farz);
if(m_camera.bEnableDeferredLighting) {
// ----====---- Opaque Geometry, Deferred rendering Pass 1 ----====----
@@ -1238,13 +1241,6 @@ double const PI = 3.141592653589793f;
[self invalidateShadowBuffers];
}
}
- (void)setAspect: (double)dAspect
{
if(m_camera.perspective_aspect != dAspect) {
m_camera.perspective_aspect = dAspect;
[self invalidateShadowBuffers];
}
}
- (void)setDebugText: (NSString *)text
{

View File

@@ -258,7 +258,7 @@ void main()
gl_FragColor = vec4(gl_FragColor.r * lightMapColor.r, gl_FragColor.g * lightMapColor.g, gl_FragColor.b * lightMapColor.b, 1.0);
#endif
//gl_FragColor = vec4(vec3(specularFactor), 1.0);
gl_FragColor = vec4(vec3(specularFactor), 1.0);
#endif
}

View File

@@ -41,12 +41,7 @@ void main()
mediump vec2 gbuffer_uv = vec2(gl_FragCoord.xy / viewport.zw);
highp vec3 view_space_vertex_position;
view_space_vertex_position.xy = ((2.0 * gl_FragCoord.xy) - (2.0 * viewport.xy)) / (viewport.zw) - 1.0;
/*view_space_vertex_position.z = -(2.0 * texture2D(gbuffer_depth, gbuffer_uv).r - gl_DepthRange.near - gl_DepthRange.far) /
(gl_DepthRange.far - gl_DepthRange.near) - 1.0;
*/
view_space_vertex_position.z = -texture2D(gbuffer_depth, gbuffer_uv).r;
lowp vec4 gbuffer_sample = texture2D(gbuffer_frame, gbuffer_uv);
@@ -61,15 +56,12 @@ void main()
highp vec3 view_space_vertex_position;
view_space_vertex_position.xy = ((2.0 * gl_FragCoord.xy) - (2.0 * viewport.xy)) / (viewport.zw) - 1.0;
view_space_vertex_position.z = -texture2D(gbuffer_depth, gbuffer_uv).r;
highp vec3 halfVec = normalize((normalize(vec3(0.0, 0.0, 0.0) - view_space_vertex_position) + view_space_light)); // Normalizing anyways, no need to divide by 2
//highp vec3 halfVec = normalize(view_space_light - normalize(view_space_vertex_position));
//highp vec3 halfVec = normalize(vec3(0.0, 0.0, -1.0) - normalize(view_space_vertex_position));
mediump float specularFactor = max(0.0,pow(clamp(dot(halfVec,normalize(gbuffer_normal)), 0.0, 1.0), gbuffer_specular_exponent));
//mediump float specularFactor = 0.0;
//specularFactor = halfVec.z;
mediump float specularFactor = clamp(pow(dot(halfVec,normalize(gbuffer_normal)), gbuffer_specular_exponent), 0.0, 1.0);
gl_FragColor = vec4(vec3(lamberFactor), specularFactor);
}