2013-01-24 3 views
0

저는 joint []에 대한 변환 행렬을 포함하는 mat4 []에 인덱스를 유지하기 위해 int [] 속성이 필요한 스켈 레탈 애니메이션 용 셰이더를 작성하고 있습니다. 내 문제는 int []를 저장하는 VBO를 만들 수 없다는 것입니다. 그러나 GL30.glVertexAttribIPointer()를 사용하여 시도했지만 내 컴퓨터는 OpenGL 3.0을 지원하지 않습니다. 그래서 glVertexAttribPointer()를 읽어야 만 강제로 모든 값을 float로 변환합니다. 셰이더에서 액세스 할 수있는 VBO에 int []를 저장하는 가장 좋은 방법은 무엇입니까?int [] 속성이있는 LWJGL opengl glsl 셰이더

답변

1

당신이하려고하는 것에는 두 가지 문제점이 있습니다.

첫 번째 문제는 정수를 전달하려고한다는 것입니다. 수레를 사용하십시오; float를 배열의 인덱스로 사용하는 것은 잘못된 것이 아닙니다. normalized 매개 변수가 glVertexAttribPointer 인 경우 GL_FALSE을 전달하면 효과적으로 정수가됩니다. 각 색인을 GL_UNSIGNED_BYTE으로 전달할 수 있습니다.

두 번째 문제는 배열을 전달하려고한다는 것입니다. 그만해; 배열이 아닌 vec4이 필요합니다. XYZW는 행렬과 함께 사용하는 4 개의 인덱스를 나타냅니다.

정점에 4 개 이상의 행렬이 필요한 경우 어떻게해야합니까? 그것도 그만 두십시오. 그게 다른 사람들이 가죽을 벗기는 법입니다. 이것이 작동하는 방식은 정점 데이터를 만들 때 4 개 이상의 행렬에 의해 정점이 영향을받는 경우 가장 큰 가중치로 4를 취합니다 (그에 따라 가중치를 다시 조정 함).

+0

부동 소수점을 사용하여 정수를 저장할 경우 인접한 두 개의 부동 소수점 사이의 차이가 1보다 큰 경우를 제외하면 최대 2^23까지 문제가 없습니다 (따라서 모든 정수가 부동 소수점으로 표시 될 수있는 것은 아닙니다). 그러나 나는 이것이이 상황에 아무런 제한이 없다고 기대한다. –