2014-05-22 1 views
0

내 코드 현재 조각난 쉐이더의 벡터를 다른 좌표 공간 (카메라 공간과 그림자 매핑을 사용하는 조명 공간 사이의 변환에 simliar)으로 변환해야하며,이 좌표 공간에서 일부 계산을 수행해야합니다. , 그것을 다시 변환하십시오.변환 된 벡터에 원본 벡터가 아닌 역변환 행렬을 곱한 이유는 무엇입니까?

결과가 만족스럽지 않고, 원인을 찾고 있었기 때문에 결국 벡터를 변환했는지 확인한 다음 변환 행렬의 역행렬을 사용하여 원래 벡터와 같습니다. . 이 같은

뭔가 :

vec4 transformedVec4 = transformMat4 * originalVec4; 
vec4 ReTransformedVec4 = inverse(transformMat4) * transformedVec4; 

if(transformedVec4 == ReTransformedVec4) 
{ 
    //some code to display if equal 
} 

내가 내 코드는 경우 문을 입력 결코,보고 정말 놀랐습니다.

누구의 출처를 알 수 있습니까? 부동 소수점 정밀도 일 뿐이므로 결과가 서로 다르게 나타 납니까?

답변

4

예는 부동 소수점의 조합 및 변형 행렬을 반전의 부정확 한 성격 (inverse(transformMat4)*transformMat4이 아닌 정확히 식별)입니다

당신은 당신이 벡터

사이의 거리를 사용할 수있는 친밀감을 알고 싶다면
if(distance(transformedVec4,ReTransformedVec4) <0.01) 
{ 
    //some code to display if equal 
} 
관련 문제