Implemented collider visualization to aid in debugging navigation issues.

This commit is contained in:
2013-05-01 12:32:16 -07:00
parent 21a59080b5
commit b7b9bedf14
5 changed files with 110 additions and 65 deletions

View File

@@ -422,7 +422,7 @@ void KRCamera::renderFrame(float deltaTime, GLint renderBufferWidth, GLint rende
GL_PUSH_GROUP_MARKER("Debug Overlays"); GL_PUSH_GROUP_MARKER("Debug Overlays");
if(settings.bShowOctree) { if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) {
// Enable z-buffer test // Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST)); GLDEBUG(glEnable(GL_DEPTH_TEST));
GLDEBUG(glDepthRangef(0.0, 1.0)); GLDEBUG(glDepthRangef(0.0, 1.0));
@@ -1042,6 +1042,12 @@ std::string KRCamera::getDebugText()
stream << "\n\n\t\tTOTAL:\t" << draw_call_count << " draw calls\t" << vertex_count << " vertices"; stream << "\n\n\t\tTOTAL:\t" << draw_call_count << " draw calls\t" << vertex_count << " vertices";
} }
break; break;
case KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE:
stream << "Octree Visualization";
break;
case KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS:
stream << "Collider Visualization";
break;
} }
return stream.str(); return stream.str();
} }

View File

@@ -150,3 +150,47 @@ void KRCollider::setAudioOcclusion(float audio_occlusion)
{ {
m_audio_occlusion = audio_occlusion; m_audio_occlusion = audio_occlusion;
} }
void KRCollider::render(KRCamera *pCamera, std::vector<KRPointLight *> &point_lights, std::vector<KRDirectionalLight *> &directional_lights, std::vector<KRSpotLight *>&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass)
{
KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass);
if(renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS) {
loadModel();
if(m_models.size()) {
GL_PUSH_GROUP_MARKER("Debug Overlays");
KRShader *pShader = getContext().getShaderManager()->getShader("visualize_overlay", pCamera, point_lights, directional_lights, spot_lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass);
if(getContext().getShaderManager()->selectShader(*pCamera, pShader, viewport, getModelMatrix(), point_lights, directional_lights, spot_lights, 0, renderPass)) {
// Enable additive blending
GLDEBUG(glEnable(GL_BLEND));
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE));
// Disable z-buffer write
GLDEBUG(glDepthMask(GL_FALSE));
// Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST));
GLDEBUG(glDepthFunc(GL_LEQUAL));
GLDEBUG(glDepthRangef(0.0, 1.0));
for(int i=0; i < m_models[0]->getSubmeshCount(); i++) {
m_models[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay");
}
// Enable alpha blending
GLDEBUG(glEnable(GL_BLEND));
GLDEBUG(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
}
GL_POP_GROUP_MARKER;
}
}
}

View File

@@ -68,6 +68,8 @@ public:
float getAudioOcclusion(); float getAudioOcclusion();
void setAudioOcclusion(float audio_occlusion); void setAudioOcclusion(float audio_occlusion);
void render(KRCamera *pCamera, std::vector<KRPointLight *> &point_lights, std::vector<KRDirectionalLight *> &directional_lights, std::vector<KRSpotLight *>&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass);
private: private:
std::vector<KRMesh *> m_models; std::vector<KRMesh *> m_models;
std::string m_model_name; std::string m_model_name;

View File

@@ -172,31 +172,30 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
@"debug_enable_diffuse" : @25, @"debug_enable_diffuse" : @25,
@"debug_enable_specular" : @26, @"debug_enable_specular" : @26,
@"debug_enable_reflection" : @27, @"debug_enable_reflection" : @27,
@"debug_octree" : @28, @"debug_deferred" : @28,
@"debug_deferred" : @29, @"enable_deferred_lighting" : @29,
@"enable_deferred_lighting" : @30, @"near_clip" : @30,
@"near_clip" : @31, @"far_clip" : @31,
@"far_clip" : @32, @"volumetric_environment_enable" : @32,
@"volumetric_environment_enable" : @33, @"volumetric_environment_downsample" : @33,
@"volumetric_environment_downsample" : @34, @"volumetric_environment_max_distance" : @34,
@"volumetric_environment_max_distance" : @35, @"volumetric_environment_slices" : @35,
@"volumetric_environment_slices" : @36, @"volumetric_environment_intensity" : @36,
@"volumetric_environment_intensity" : @37, @"fog_type": @37,
@"fog_type": @38, @"fog_near": @38,
@"fog_near": @39, @"fog_far": @39,
@"fog_far": @40, @"fog_density": @40,
@"fog_density": @41, @"fog_color_r": @41,
@"fog_color_r": @42, @"fog_color_g": @42,
@"fog_color_g": @43, @"fog_color_b": @43,
@"fog_color_b": @44, @"dust_enable" : @44,
@"dust_enable" : @45, @"dust_intensity" : @45,
@"dust_intensity" : @46, @"lod_bias" : @46,
@"lod_bias" : @47, @"enable_realtime_occlusion" : @47,
@"enable_realtime_occlusion" : @48, @"debug_display" : @48,
@"debug_display" : @49, @"siren_enable" : @49,
@"siren_enable" : @50, @"siren_enable_reverb" : @50,
@"siren_enable_reverb" : @51, @"siren_enable_hrtf" : @51
@"siren_enable_hrtf" : @52
} copy]; } copy];
[self loadShaders]; [self loadShaders];
@@ -269,7 +268,7 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
-(int)getParameterCount -(int)getParameterCount
{ {
return 53; return 52;
} }
@@ -285,7 +284,7 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
-(NSString *)getParameterLabelWithIndex: (int)i -(NSString *)getParameterLabelWithIndex: (int)i
{ {
NSString *parameter_labels[53] = { NSString *parameter_labels[52] = {
@"Camera FOV", @"Camera FOV",
@"Shadow Quality (0 - 2)", @"Shadow Quality (0 - 2)",
@"Enable per-pixel lighting", @"Enable per-pixel lighting",
@@ -314,7 +313,6 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
@"Debug - Enable Diffuse", @"Debug - Enable Diffuse",
@"Debug - Enable Specular", @"Debug - Enable Specular",
@"Debug - Enable Reflections", @"Debug - Enable Reflections",
@"Debug - Octree Visualize",
@"Debug - Deferred Lights Visualize", @"Debug - Deferred Lights Visualize",
@"Enable Deferred Lighting", @"Enable Deferred Lighting",
@"Clip Plane - Near", @"Clip Plane - Near",
@@ -344,7 +342,7 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
} }
-(KREngineParameterType)getParameterTypeWithIndex: (int)i -(KREngineParameterType)getParameterTypeWithIndex: (int)i
{ {
KREngineParameterType types[53] = { KREngineParameterType types[52] = {
KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_FLOAT,
KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_INT,
@@ -376,7 +374,6 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL,
KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL,
KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL,
KRENGINE_PARAMETER_BOOL,
KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_FLOAT,
KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_FLOAT,
KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL,
@@ -404,7 +401,7 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
} }
-(float)getParameterValueWithIndex: (int)i -(float)getParameterValueWithIndex: (int)i
{ {
float values[53] = { float values[52] = {
_settings.perspective_fov, _settings.perspective_fov,
(float)_settings.m_cShadowBuffers, (float)_settings.m_cShadowBuffers,
_settings.bEnablePerPixel ? 1.0f : 0.0f, _settings.bEnablePerPixel ? 1.0f : 0.0f,
@@ -433,7 +430,6 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
_settings.bEnableDiffuse ? 1.0f : 0.0f, _settings.bEnableDiffuse ? 1.0f : 0.0f,
_settings.bEnableSpecular ? 1.0f : 0.0f, _settings.bEnableSpecular ? 1.0f : 0.0f,
_settings.bEnableReflection ? 1.0f : 0.0f, _settings.bEnableReflection ? 1.0f : 0.0f,
_settings.bShowOctree ? 1.0f : 0.0f,
_settings.bShowDeferred ? 1.0f : 0.0f, _settings.bShowDeferred ? 1.0f : 0.0f,
_settings.bEnableDeferredLighting ? 1.0f : 0.0f, _settings.bEnableDeferredLighting ? 1.0f : 0.0f,
_settings.getPerspectiveNearZ(), _settings.getPerspectiveNearZ(),
@@ -583,84 +579,79 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
} }
break; break;
case 28: case 28:
if(_settings.bShowOctree != bNewBoolVal) {
_settings.bShowOctree = bNewBoolVal;
}
break;
case 29:
if(_settings.bShowDeferred != bNewBoolVal) { if(_settings.bShowDeferred != bNewBoolVal) {
_settings.bShowDeferred = bNewBoolVal; _settings.bShowDeferred = bNewBoolVal;
} }
break; break;
case 30: case 29:
if(_settings.bEnableDeferredLighting != bNewBoolVal) { if(_settings.bEnableDeferredLighting != bNewBoolVal) {
_settings.bEnableDeferredLighting = bNewBoolVal; _settings.bEnableDeferredLighting = bNewBoolVal;
} }
break; break;
case 31: case 30:
_settings.setPerspectiveNear(v); _settings.setPerspectiveNear(v);
break; break;
case 32: case 31:
_settings.setPerpsectiveFarZ(v); _settings.setPerpsectiveFarZ(v);
break; break;
case 33: case 32:
_settings.volumetric_environment_enable = bNewBoolVal; _settings.volumetric_environment_enable = bNewBoolVal;
break; break;
case 34: case 33:
_settings.volumetric_environment_downsample = 5 - (int)v; _settings.volumetric_environment_downsample = 5 - (int)v;
break; break;
case 35: case 34:
_settings.volumetric_environment_max_distance = v; _settings.volumetric_environment_max_distance = v;
break; break;
case 36: case 35:
_settings.volumetric_environment_quality = v; _settings.volumetric_environment_quality = v;
break; break;
case 37: case 36:
_settings.volumetric_environment_intensity = v; _settings.volumetric_environment_intensity = v;
break; break;
case 38: case 37:
_settings.fog_type = v; _settings.fog_type = v;
break; break;
case 39: case 38:
_settings.fog_near = v; _settings.fog_near = v;
break; break;
case 40: case 39:
_settings.fog_far = v; _settings.fog_far = v;
break; break;
case 41: case 40:
_settings.fog_density = v; _settings.fog_density = v;
break; break;
case 42: case 41:
_settings.fog_color.x = v; _settings.fog_color.x = v;
break; break;
case 43: case 42:
_settings.fog_color.y = v; _settings.fog_color.y = v;
break; break;
case 44: case 43:
_settings.fog_color.z = v; _settings.fog_color.z = v;
break; break;
case 45: case 44:
_settings.dust_particle_enable = bNewBoolVal; _settings.dust_particle_enable = bNewBoolVal;
break; break;
case 46: case 45:
_settings.dust_particle_intensity = v; _settings.dust_particle_intensity = v;
break; break;
case 47: case 46:
_settings.setLODBias(v); _settings.setLODBias(v);
break; break;
case 48: case 47:
_settings.setEnableRealtimeOcclusion(bNewBoolVal); _settings.setEnableRealtimeOcclusion(bNewBoolVal);
break; break;
case 49: case 48:
_settings.debug_display = (KRRenderSettings::debug_display_type)v; _settings.debug_display = (KRRenderSettings::debug_display_type)v;
break; break;
case 50: case 49:
_settings.siren_enable = bNewBoolVal; _settings.siren_enable = bNewBoolVal;
break; break;
case 51: case 50:
_settings.siren_enable_reverb = bNewBoolVal; _settings.siren_enable_reverb = bNewBoolVal;
break; break;
case 52: case 51:
_settings.siren_enable_hrtf = bNewBoolVal; _settings.siren_enable_hrtf = bNewBoolVal;
break; break;
} }
@@ -668,10 +659,10 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
-(float)getParameterMinWithIndex: (int)i -(float)getParameterMinWithIndex: (int)i
{ {
float minValues[53] = { float minValues[52] = {
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.01f, 50.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.01f, 50.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -10.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f 0.0f, 0.0f, 0.0f
@@ -682,10 +673,10 @@ void kraken::set_parameter(const std::string &parameter_name, float parameter_va
-(float)getParameterMaxWithIndex: (int)i -(float)getParameterMaxWithIndex: (int)i
{ {
float maxValues[53] = { float maxValues[52] = {
PI, 3.0f, 1.0f, 1.0, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, PI, 3.0f, 1.0f, 1.0, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f,
1.0f, 10.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f, 1.0f, 10.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f,
2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 10.0f, 1000.0f, 1.0f, 5.0f, 1000.0f, 1.0f, 5.0f, 3.0f, 1.0f, 1.0f, 10.0f, 1000.0f, 1.0f, 5.0f, 1000.0f, 1.0f, 5.0f, 3.0f,
1000.0f, 1000.0f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, (float)(KRRenderSettings::KRENGINE_DEBUG_DISPLAY_NUMBER - 1), 1000.0f, 1000.0f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, (float)(KRRenderSettings::KRENGINE_DEBUG_DISPLAY_NUMBER - 1),
1.0f, 1.0f, 1.0f 1.0f, 1.0f, 1.0f

View File

@@ -93,6 +93,8 @@ public:
KRENGINE_DEBUG_DISPLAY_MEMORY, KRENGINE_DEBUG_DISPLAY_MEMORY,
KRENGINE_DEBUG_DISPLAY_TEXTURES, KRENGINE_DEBUG_DISPLAY_TEXTURES,
KRENGINE_DEBUG_DISPLAY_DRAW_CALLS, KRENGINE_DEBUG_DISPLAY_DRAW_CALLS,
KRENGINE_DEBUG_DISPLAY_OCTREE,
KRENGINE_DEBUG_DISPLAY_COLLIDERS,
KRENGINE_DEBUG_DISPLAY_NUMBER KRENGINE_DEBUG_DISPLAY_NUMBER
} debug_display; } debug_display;