浏览代码

debug opton to scale lens distortion.

This is handy to adjust if you calibrate an HMD but the acieved FoV is smaller or larger than the screen width.  You can dynamically adjust the warp_scale until it looks right, and then fixup your calibration
James Sarrett 8 年之前
父节点
当前提交
b23579027d
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      examples/opengl/main.c

+ 8 - 1
examples/opengl/main.c

@@ -154,6 +154,7 @@ int main(int argc, char** argv)
 	right_lens_center[0] = sep/2.0f;
 	right_lens_center[0] = sep/2.0f;
 	//asume calibration was for lens view to which ever edge of screen is further away from lens center
 	//asume calibration was for lens view to which ever edge of screen is further away from lens center
 	float warp_scale = (left_lens_center[0] > right_lens_center[0]) ? left_lens_center[0] : right_lens_center[0];
 	float warp_scale = (left_lens_center[0] > right_lens_center[0]) ? left_lens_center[0] : right_lens_center[0];
+	float warp_adj = 1.0f;
 
 
 	ohmd_device_settings_destroy(settings);
 	ohmd_device_settings_destroy(settings);
 
 
@@ -176,7 +177,6 @@ int main(int argc, char** argv)
 	glUseProgram(shader);
 	glUseProgram(shader);
 	glUniform1i(glGetUniformLocation(shader, "warpTexture"), 0);
 	glUniform1i(glGetUniformLocation(shader, "warpTexture"), 0);
 	glUniform2fv(glGetUniformLocation(shader, "ViewportScale"), 1, viewport_scale);
 	glUniform2fv(glGetUniformLocation(shader, "ViewportScale"), 1, viewport_scale);
-	glUniform1f(glGetUniformLocation(shader, "WarpScale"), warp_scale);
 	glUniform3fv(glGetUniformLocation(shader, "aberr"), 1, aberr_scale);
 	glUniform3fv(glGetUniformLocation(shader, "aberr"), 1, aberr_scale);
 	glUseProgram(0);
 	glUseProgram(0);
 
 
@@ -238,6 +238,12 @@ int main(int argc, char** argv)
 						printf("right_lens_center: [%0.4f, %0.4f]\n", right_lens_center[0], right_lens_center[1]);
 						printf("right_lens_center: [%0.4f, %0.4f]\n", right_lens_center[0], right_lens_center[1]);
 					}
 					}
 					break;
 					break;
+				case SDLK_a:
+					warp_adj *= 1.0/0.9;
+					break;
+				case SDLK_z:
+					warp_adj *= 0.9;
+					break;
 				case SDLK_d:
 				case SDLK_d:
 					/* toggle between distorted and undistorted views */
 					/* toggle between distorted and undistorted views */
 					if ((distortion_coeffs[0] != 0.0) ||
 					if ((distortion_coeffs[0] != 0.0) ||
@@ -317,6 +323,7 @@ int main(int argc, char** argv)
 
 
 		// Setup ortho state.
 		// Setup ortho state.
 		glUseProgram(shader);
 		glUseProgram(shader);
+		glUniform1f(glGetUniformLocation(shader, "WarpScale"), warp_scale*warp_adj);
 		glUniform4fv(glGetUniformLocation(shader, "HmdWarpParam"), 1, distortion_coeffs);
 		glUniform4fv(glGetUniformLocation(shader, "HmdWarpParam"), 1, distortion_coeffs);
 		glViewport(0, 0, hmd_w, hmd_h);
 		glViewport(0, 0, hmd_w, hmd_h);
 		glEnable(GL_TEXTURE_2D);
 		glEnable(GL_TEXTURE_2D);