다음 행을 추가 할 때까지 제대로 작동하는 GLSL 셰이더가 있습니다.mat4x3 vec4 곱셈에서 GLSL 컴파일이 실패합니다.
"vec4 coord = texture2D(Coordinates,gl_TexCoord[0].st);"
"mat4x3 theMatrix;"
"theMatrix[1][1] = 1.0;"
"vec3 CampProj = theMatrix * coord;"
내가이 이야기하고있는 오류 로그를 확인하는 경우 :
"ERROR: 0:2: '=' : cannot convert from '4-component vector of float' to '3-component vector of float'\n\n"
내가 CampProject이 좋은 데 모은 vec4 할 경우,하지만 난 4 열, 3 열 행렬 곱 방법으로 매우 혼란 스러워요 4 성분 벡터에 의해 4 성분 벡터가 생길 것입니다.
이 버그입니까, 아니면 4x3 행렬이 실제로 0,0,0,1 최종 행이있는 4x4 일 수 있습니까? 컴파일러가 vec4를 반환하는 것을 왜 주장하고 있는지 누군가가 내게 설명 할 수 없습니까?
내가 VSExpress 2013, WIN7, 모바일 인텔 ® 4 시리즈 익스프레스 칩셋 제품군을 통해 C++를 사용하고
UPDATE :
레토의 대답이 나는 경우가 기대할 것입니다. 그것은 컴파일의 버그입니다. 둘 다 이것이 LA 문맥에서 의미가있는 유일한 이유이고, LA 정의는 GLSL 문서가 행렬/행렬 및 행렬/vec 곱셈에 대해 참조하는 것입니다. 그러나 비디오 칩셋 드라이버를 업데이트 한 후에도 편집 작업이 나에게 동일한 동작을하고 있습니다. Reto가 묘사하는 행동을 다른 사람이 확인할 수 있습니까?
@ 리토 12-05-14까지 아무도 확인하지 않은 경우 올바른 답을 올바른 논리적 가능성으로 받아 들일 것입니다.
vec4에서 vec3으로 암시 적 변환이 수행되지 않았습니까? vec3에 의한 4x3 행렬의 멀티플렉싱은 의미가 있지만, vec4에 의한 4x3 행렬은 아닙니다. 어쩌면'coord'의 마지막 'w'좌표가 단순히 곱셈을 위해 버려지는 것입니까? http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations – vmg
@vmg : 크기가 마술처럼 4x4로 확장되고 새 행에 (0,0,0,1)이 할당 될 가능성이 큽니다. 덧붙여 말하면, 이것은 표준 준수 GLSL 구현에서 전혀 작동하지 않아야합니다. 이것은 4x3 매트릭스 * 1x4 컬럼 벡터입니다. 'vec4'의 네 번째 줄을 없애거나 4x3 행렬에 여분의 행을 추가하지 않고서는 이것을 만족시킬 방법이 없습니다 (GLSL에 의해 정의 된'mat4x3'에서'mat4' 또는'vec4'에서'vec4'' 로의 vec3 변환은 암묵적으로 변환되지 않습니다) , 어떤 일이 일어나고 있든 비표준 AFAIK입니다.) –
예, 명확히 해 주셔서 감사합니다. 정확하게 'vec의 4 번째 줄을 떨어 뜨린다'는 것이 었습니다. – vmg