2013-11-02 78 views
1

我有一个小问题,当我有一个纹理,并且我想用opengl在我的屏幕上渲染它时,即使纹理具有与屏幕相同的尺寸,纹理也会呈现为较小的问题。用于呈现纹理筛选我使用以下着色器:纹理不适合在屏幕上

顶点着色器:

#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的范围内的四

我的渲​​染功能

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) 

坐标将纹理坐标。