- 여러 텍스쳐 사용하기
- 하나의 쉐이더에서 여러 텍스쳐를 사용하려면 여러 샘플러 유니폼을 만들고, 각각 다른 텍스쳐 유닛을 참조하도록 설정해야 함
이 때 여러 텍스쳐를 Context에 binding 필요 - 최대 유닛 개수
- Example
- GLint units;
- glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &units);
- 텍스처를 특정 텍스처 유닛에 바인딩
- Example
- 텍스쳐 유닛 5 선택
- glActiveTexture(GL_TEXTURE0 + 5);
- 예약 토큰 사용
- GLuint textures[3];
- glGenTextures(3, &textures);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- glActiveTexture(GL_TEXTURE2);
- glBindTexture(GL_TEXTURE_2D, textures[2]);
- 쉐이더 내에서 샘플러 유니폼이 각각의 텍스쳐 유닛을 참조하도록 설정
- glUniform 사용
void glUniform1f(
GLint location, GLfloat v0 )
;- location: shader 내 uniform 변수의 binding location
- v0: 변수에 넣을 값
- 쉐이더 코드에서 샘플러는 유니폼으로 선언되기 때문에
glGetUniformLocation으로 그 위치를 찾아 값을 수정한다. - Example
- GLint loc = glGenUniformLocation(mProgram, "name_of_uniform_variable");
- glUniform1i(loc, GL_TEXTURE2);
- binding 레이아웃 지시어 사용
- Example
- Shader
- layout (binding = 0) uniform sampler2D tex1;
- layout (binding = 1) uniform sampler2D tex2;
- Code
- glUniform1i(0, GL_TEXTURE0);
- glUniform1i(1, GL_TEXTURE1);
- 텍스쳐 필터링
- 텍셀과 화면의 픽셀이 일대일 매칭이 되는 경우는 거의 없음.
- 텍스쳐 이미지는 늘어나거나 줄어들어 지오메트리 서피스에 적용된다.
- texelFetch
gvec4 texelFetch(
gsampler2DRect sampler, ivec2 P )
;- 텍스쳐로부터 특정 정수 텍스쳐 좌표를 사용하여 하나의 텍셀을 읽어온다.
- 프래그먼트 대 텍셀 비율이 정수가 아닌 경우에는 이 함수를 사용하지 않는다.
- texture
gvec4 texture(
gsampler2DRect sampler, vec2 P )
;- 부동소수점 텍스쳐 좌표를 인자로 받음.
- [0.0 ~ 1.0] 사이의 범위가 텍스쳐에 매핑된다.
범위 밖에 있는 값도 가능하며, 이를 사용하여 확대/축소등이 가능 - 늘어나거나 줄어든 텍스쳐 맵으로부터 컬러 프래그먼트를 계산하는 작업을
텍스쳐 필터링이라고 한다. - 텍스쳐를 늘리는 작업을 확대라고 하며, 줄이는 작업을 축소라고 한다.
- 확대 및 축소 필터 사용
- 샘플러 인자로 GL_TERXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER를 사용하며 GL_NEAREST와 GL_LINEAR 사용가능.
- GL_NEAREST (최단 인접 필터링)
- 가장 단순하며 빠른 필터링
- 텍스쳐가 늘어나는 경우 블록 모양의 픽셀을 만든다.
- Example
- glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glSamplerParameteri(sampler, GL_TEXTURE_MAX_FILTER, GL_NEAREST);
- GL_LINEAR (선형 필터링)
- 텍스쳐 좌표에 가장 가까운 텍셀을 구하고, 텍스쳐 좌표 주변 텍셀의 가중치 평균(선형 보간)을 사용하여 계산.
- 텍스쳐가 늘어날 때 흐려지는 효과가 있어서 최단 인접 필터링에 비해 더 자연스럽다.
- Example
- glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
https://learnopengl.com/Getting-started/Textures |
다른 바카라사이트 와 비견될 정도의 후한 이벤트와 서비스는 단연 실시간 라이브카지노 시장의 본보기이며, 큰 축이 되었습니다. '전국여행지원'은 여행대금의 할인을 받을 수 있는 '현민 할인'을 대신하는 관광 더나인카지노 수요의 환기책이다. 도쿄를 제외한 46개 도부현은 이날부터 12월 말까지, 도쿄도는 10월20일~12월20일까지 각각 실시될 예정이다.
답글삭제