- 파일로부터 텍스처 로딩하기
- KTX (Khronos TeXture format)
- glTexStorage2D 및glTexSubImage2D 등의 텍스처 함수에 전달할 대부분의 인자를 포함하기 때문에 파일의 텍스처를 직접 로딩할 수 있다.
- https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
- 텍스처 좌표
- Example
- Vertex shader
- #version 430 core
- uniform mat4 mv_matrix;
- uniform mat4 proj_matrix;
- layout (location = 0) in vec4 position;
- layout (location = 4) in vec2 tc;
- out VS_OUT
- {
- vec2 tc;
- } vs_out;
- void main(void)
- {
- // 각 버텍스 위치 계산
- vec4 pos_vs = mv_matrix * position;
- // 텍스처 좌표를 그대로 전달
- vs_out.tc = tc;
- gl_Position = proj_matrix * pos_vs;
- }
- Fragment shader
- #version 430 core
- layout (binding = 0) uniform sapler2D tex_object;
- in VS_OUT
- {
- vec2 tc;
- } fs_in;
- out vec4 color;
- void main(void)
- {
- // 받은 좌표값을 스케일하여 텍스쳐를 출력한다.
- color = texture(tex_object, fs_in.tc * vec2(2.0, 3.0));
- }
- 텍스처 데이터 읽는 방식 제어하기
- 일반적으로 텍스처 좌표는 정규화된다. (0.0 ~ 1.0)
- 래핑 모드
- (0.0 ~ 1.0) 범위를 벗어나는 텍스처 좌표에 대해 어떻게 처리할지
- 필터링 모드
- 샘플들의 중간값을 어떻게 처리할지
- 샘플러의 래핑 및 필터링 모드를 제어하는 인자들은 샘플러 객체에 저장된다.
- 샘플러 객체 생성
void glGenSamplers(
GLsizei n, GLuint *samplers )
;- n: 생성 할 샘플러 개수
- samplers: 샘플러 객체를 저장할 배열 주소
- 샘플러 인자 설정
void glSamplerParameterf(
GLuint sampler, GLenum pname, GLfloat param )
;void glSamplerParameteri(
GLuint sampler, GLenum pname, GLint param )
;- sampler: 샘플러 객체 핸들러
- pname: 샘플러 파라미터의 심볼릭 네임
GL_TEXTURE_WRAP_S
,GL_TEXTURE_WRAP_T
,GL_TEXTURE_WRAP_R
,GL_TEXTURE_MIN_FILTER
,GL_TEXTURE_MAG_FILTER
,GL_TEXTURE_BORDER_COLOR
,GL_TEXTURE_MIN_LOD
,GL_TEXTURE_MAX_LOD
,GL_TEXTURE_LOD_BIAS
GL_TEXTURE_COMPARE_MODE
, orGL_TEXTURE_COMPARE_FUNC
- param: 샘플러 파라미터
- 샘플러 객체를 텍스처 유닛에 바인딩
void glBindSampler(
GLuint unit, GLuint sampler )
;- unit: 텍스처 유닛의 인덱스
- 텍스처로부터 텍스처 샘플러의 인자를 분리함으로써의 장점
- 텍스처가 많은 경우에도 동일한 샘플링 인자를 사용할 수 있다.
- 바인딩된 텍스처를 변경해도 샘플러 인자는 변경하지 않아도 된다.
- 동일한 텍스처에 여러 다른 샘플러 인자를 사용가능.
- 텍스처 안에 저장된 샘플러 객체 사용
- 타깃에 바인딩 한 후 함수 호출
void glTexParameterf(
GLenum target, GLenum pname, GLfloat param )
;void glTexParameteri(
GLenum target, GLenum pname, GLint param )
;- target: 텍스쳐 종류 (GL_TEXTURE_2D 등)
- pname: 텍스쳐 파라미터의 심볼릭 네임
GL_DEPTH_STENCIL_TEXTURE_MODE
,GL_TEXTURE_BASE_LEVEL
,GL_TEXTURE_COMPARE_FUNC
,GL_TEXTURE_COMPARE_MODE
,GL_TEXTURE_LOD_BIAS
,GL_TEXTURE_MIN_FILTER
,GL_TEXTURE_MAG_FILTER
,GL_TEXTURE_MIN_LOD
,GL_TEXTURE_MAX_LOD
,GL_TEXTURE_MAX_LEVEL
,GL_TEXTURE_SWIZZLE_R
,GL_TEXTURE_SWIZZLE_G
,GL_TEXTURE_SWIZZLE_B
,GL_TEXTURE_SWIZZLE_A
,GL_TEXTURE_WRAP_S
,GL_TEXTURE_WRAP_T
, orGL_TEXTURE_WRAP_R
- param: pname에 따른 파라미터 (GL_NEAREST 등)
2018년 4월 24일 화요일
5.5.[4-5] 파일로부터 텍스처 로딩하기, 텍스처 데이터 읽는 방식 제어하기 (1/2)
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기