2015-01-05 1 views
0

OpenGL documentation은이 두 기능에 대해 거의 말하지 않습니다. glTexParameteriv 또는 glTexParameterfv 대신 glTexParameterIiv을 사용하는 것이 맞습니까? GL_TEXTURE_BORDER_COLOR 대한 값 glTexParameterIiv 또는 glTexParameterIuiv 지정된 경우는glTexParameterIiv 및 glTexParameterIuiv의 사용 사례는 무엇입니까?

상기 정수 값의 내부 데이터 형식 변성 저장된다. glTexParameteriv로 지정하면 다음 방정식을 사용하여 부동 소수점으로 변환됩니다. f = (2c + 1)/(2 b-1). glTexParameterfv로 지정하면 부동 소수점 값으로 수정되지 않고 저장됩니다.

+0

붙여 넣은 텍스트를 다시 포맷해야했는데, 방정식이 잘못 나왔습니다. 그러나 기본적으로'f = (2c + 1)/(2^b-1)'은 a * signed * 정수 값'(c)'를 취하여 [** - 1 **, ** 1 **], 여기서'(b)'는 구성 요소 당 비트 수입니다. 내 대답은 서명되지 않은 색상 (더 일반적인 시나리오)에 대한 정규화에 대해 설명합니다. –

답변

2

당신이 붙여 넣은 스 니펫으로 자신의 질문에 답변했습니다. 전통적인 텍스처는 고정 소수점 (부호가없는 정규화, 여기서 값은 은 정규화를 통해 1.0으로 변환되지만 GL 3.0에는 정수 값이 정수로 유지되는 정수형 (부호있는/부호없는 정수) 텍스처 유형이 도입되었습니다.

정수 텍스처가 있고 경계 색을 지정하려는 경우 (GL_CLAMP_TO_BORDER 감싸기 모드와 함께 사용) 부호가 있거나 부호가 없는지 여부에 따라이 두 함수 중 하나의 변형을 사용합니다.

정수 텍스처를 필터링 할 수는 없지만 텍스처 좌표 랩 동작은 계속할 수 있습니다. 상기 텍스처가 정수이고 glTexParameteriv (...)이 전달 된 컬러 값을 정규화하므로, 컬러 데이터 정수를 유지하기 위해 추가 함수가 만들어 져야합니다.

glVertexAttribIPointer (...) 등과 같은 종류의 것을 찾을 수 있습니다. GL 파이프 라인에 정수 데이터 (단순히 정수 데이터를 부동 소수점으로 변환하는 것과는 대조적으로)를 추가하면 많은 새로운 명령이 필요했습니다.

+0

정수를 변환하지 않으면 정확히 무엇이 얻습니까? 정규화 비용을 피하거나 데이터 통합을 유지하는 문제는 좋은 생각입니다. 예를 들어 나중에 이러한 색상에 대해 더 많은 계산을해야하는 경우입니까? – philix

+0

@philix : 일부 알고리즘에는 실제로 정수 값이 필요합니다. 다른 정수 값 42.7 억을 나타낼 수있는 1 차원 룩업 테이블을 원한다면 텍스처의 내부 형식으로'GL_R32UI'를 사용할 것입니다. 부동 소수점 가수 (2^24)를 소모 한 후에는 더 이상 부동 소수점으로 정수 값을 정확하게 표현할 수 없으므로 실제로 32 비트 부동 소수점 텍스처로이를 수행 할 수 없습니다. [matlab 설명] (http://www.mathworks.com/help/matlab/ref/flintmax.html) 꽤 좋습니다. –

+0

예, 그 문제를 이해합니다. OpenGL에 대한 많은 경험이 없으므로 OpenGL에 전달한 후에 텍스처의 데이터를 가지고 아무 것도하지 않았습니다. OpenGL 3.0에서'glTexParameter [u] iv'를 사용하여'GL_TEXTURE_BORDER_COLOR'를 설정하는 것은별로 의미가 없습니다. 하나는'glTexParameterfv' 또는'glTexParameterI [u] iv'를 사용해야합니다. 그 맞습니까? – philix

관련 문제