2013-11-02 4 views
1

텍스처가 있는데 화면에 렌더링 할 때 텍스처가 화면과 동일한 경우에도 텍스처가 작게 렌더링됩니다.텍스처가 화면에 맞지 않습니다.

정점 셰이더 :

#version 120 
    attribute vec2 point; 
    varying vec2 fr_point; 
    void main(void) { 
    gl_Position = vec4(point, 0.0, 1.0); 
    fr_point = point; 
    } 

단편 쉐이더 :

#version 120 
    varying vec2 fr_point; 
    uniform sampler2D texture; 
    void main(void) { 
    gl_FragColor = texture2D(texture, fr_point); 
    }; 

정점 쿼드 -1과 1 내지 쿼드 인 속성 질감을 표현하기위한 I는 다음 쉐이더를 사용 선별 할

기능을 렌더링의 나

glClearColor(1.0, 1.0, 1.0, 1.0); 
glClear(GL_COLOR_BUFFER_BIT); 

glUseProgram(p); 

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texture); 

glUniform1i(uni_texture, 0); 

glEnableVertexAttribArray(att_point); 
GLfloat triangle_vertices[] = { 
    -1., -1., 
    -1., 1., 
    1., -1, 

    1., 1, 
    -1., 1., 
    1., -1. 
}; 

glVertexAttribPointer(
    att_point, 
    2, 
    GL_FLOAT, 
    GL_FALSE, 
    0, 
    triangle_vertices 
); 

glDrawArrays(GL_TRIANGLES, 0, 6); 
glDisableVertexAttribArray(att_point); 
glutSwapBuffers(); 
,

텍스처가 항상 작게 렌더링되는 이유는 텍스처가 더 크거나 크기가 같은 경우에도 마찬가지입니다.

+0

솔루션을 찾은 경우 대답을 수락하거나 답변을 작성하고 동의하면 SO는 다음과 같이 진행됩니다. 감사! –

답변

2

텍스처 좌표는 0에서 1까지의 크기를 가지므로 쿼드 좌표를 텍스처 좌표로 변환해야합니다.

fr_point = (1+point)/2; //fr_point = (vec2(1)+point.xy)/2 

그래서

(-1,-1) -> (0,0) 
(-1,1) -> (0,1) 
(1,1) -> (1,1) 
(1,-1) -> (1,0) 

좌표는 텍스쳐 좌표 것이다.

관련 문제