Browse Source

Fixed perspective with zNear == 0 (#71)

Christophe Riccio 12 years ago
parent
commit
01a98e97c1
4 changed files with 9 additions and 14 deletions
  1. 4 3
      glm/core/dummy.cpp
  2. 3 7
      glm/gtc/matrix_transform.inl
  3. 1 4
      readme.txt
  4. 1 0
      test/gtc/gtc_matrix_transform.cpp

+ 4 - 3
glm/core/dummy.cpp

@@ -31,7 +31,7 @@
 
 
 #define GLM_MESSAGES
 #define GLM_MESSAGES
 #include "../glm.hpp"
 #include "../glm.hpp"
-
+/*
 #if(GLM_ARCH & GLM_ARCH_SSE2)
 #if(GLM_ARCH & GLM_ARCH_SSE2)
 struct float4
 struct float4
 {
 {
@@ -54,16 +54,17 @@ int test_simd()
 }
 }
 
 
 #endif//GLM_ARCH
 #endif//GLM_ARCH
-
+*/
 int main()
 int main()
 {
 {
 	glm::mat4 A(1.0f);
 	glm::mat4 A(1.0f);
 	glm::vec4 B(1.0f);
 	glm::vec4 B(1.0f);
 	glm::vec4 C = A * B;
 	glm::vec4 C = A * B;
 	
 	
+/*
 #	if(GLM_ARCH & GLM_ARCH_SSE2)
 #	if(GLM_ARCH & GLM_ARCH_SSE2)
 		test_simd();
 		test_simd();
 #	endif
 #	endif
-
+*/
 	return 0;
 	return 0;
 }
 }

+ 3 - 7
glm/gtc/matrix_transform.inl

@@ -243,15 +243,11 @@ namespace glm
 #else
 #else
 		valType const rad = glm::radians(fovy);
 		valType const rad = glm::radians(fovy);
 #endif
 #endif
-		valType range = tan(rad / valType(2)) * zNear;	
-		valType left = -range * aspect;
-		valType right = range * aspect;
-		valType bottom = -range;
-		valType top = range;
 
 
+		valType tanHalfFovy = tan(rad / valType(2));
 		detail::tmat4x4<valType, defaultp> Result(valType(0));
 		detail::tmat4x4<valType, defaultp> Result(valType(0));
-		Result[0][0] = (valType(2) * zNear) / (right - left);
-		Result[1][1] = (valType(2) * zNear) / (top - bottom);
+		Result[0][0] = valType(1) / (aspect * tanHalfFovy);
+		Result[1][1] = valType(1) / (tanHalfFovy);
 		Result[2][2] = - (zFar + zNear) / (zFar - zNear);
 		Result[2][2] = - (zFar + zNear) / (zFar - zNear);
 		Result[2][3] = - valType(1);
 		Result[2][3] = - valType(1);
 		Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);
 		Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);

+ 1 - 4
readme.txt

@@ -50,10 +50,7 @@ GLM 0.9.5.0: 2013-XX-XX
 - Fixed GTX_multiple for negative value
 - Fixed GTX_multiple for negative value
 - Removed GTX_ocl_type extension
 - Removed GTX_ocl_type extension
 - Fixed post increment and decrement operators
 - Fixed post increment and decrement operators
-
-================================================================================
-GLM 0.9.4.4: 2013-0X-XX
---------------------------------------------------------------------------------
+- Fixed perspective with zNear == 0 (#71)
 - Fixed slerp when costheta is close to 1
 - Fixed slerp when costheta is close to 1
 - Fixed mat4x2 value_type constructor
 - Fixed mat4x2 value_type constructor
 
 

+ 1 - 0
test/gtc/gtc_matrix_transform.cpp

@@ -14,6 +14,7 @@ int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
 	
 	
+	glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
 	glm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));
 	glm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));
 
 
 	return Error;
 	return Error;