6x6 행렬의 블록 행렬 반전을 수행하고 4x4, 2x4, 4x2 및 2x2 블록으로 분할하지만 어딘가에 무언가가 진행됩니다. 잘못되어 값 중 하나에 액세스하려고하면 충돌이 발생합니다. 나는 isnan() 또는 isinf()를 사용하여 잘못된 값을 감지하려고 시도하지만 충돌이 발생할 것으로 생각됩니다.수치 적 불안정으로 인해 iOS에서 충돌이 발생 함 OpenGL ES 3.0 버텍스 쉐이더, 셰이더 언어 버전 300
// Pieces of a block matrix inversion:
mat4 invA = inverse(A);
mat2 invD = inverse(D);
mat4 schurA = A - B*invD*C;
mat2 schurD = D - C*invA*B;
mat2x4 upperR = -invA*B*schurD;
mat4x2 lowerL = -invD*C*schurA;
// Set outgoing color for the vertex to yellowish:
v_pColorMarker = vec3(0.90, 1.00, 0.60);
// Does not crash, so it seems I can do a multiply with these matrix values:
vec2 p45 = vec2(0.0);
p45 += lowerL*bschurD*b45;
float temp = schurD[0][1];
// Checking matrix entry for NaN causes crash ????!!!!
if (isnan(temp))
{
// Set the vertex color to something I’ll be able to see and detect:
v_pColorMarker = vec3(0.0, 1.0, 0.0);
}
아이디어가 있으십니까? 버텍스 쉐이더에서 충돌이 일어나고 행렬 내부의 값을 검사하는 좋은 방법이 없기 때문에 디버깅하는 방법을 모르겠습니다. 행렬의 [0] [1]에있는 값이 INF의 NaN과 다른 설명이 아닌 숫자가 아닌 값일 수 있으며 isnan()과 isinf()가 충돌 할 수 있습니까?
장치에서 디버그하고 "OpenGL ES 스크린 샷"(Xcode의 카메라 아이콘 버튼)을 사용하여 그리기 호출 스택을 단계별로 실행하면 OpenGL ES 상태 (바운드 텍스처, 사용 된 프로그램, 사용 가능한 속성, 실제 uniform 값 -eg, modelview 행렬). –
그래야 셰이더 내의 로컬 값을 볼 수 있습니까? schurD와 같이 행렬의 가치를 검사하고 싶다면 어떻게해야합니까? –
지역 변수에 대해서는 모르지만 제복은 맞습니다. –