2013-02-24 2 views
1

GLSL로 텍스처 매핑을하고 싶습니다. 하지만 내 코드는 쉐이더를 사용하지 않는다고 생각합니다.GLSL 텍스처 매핑

내 코드에 문제가 있습니다 무엇 주요

glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, _textureId[0]); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);  
    glUniform1i(glGetUniformLocation(shader.ShaderProgram,"img"),0); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(-2.5f, -2.5f, 2.5f); 
    glTexCoord2f(1.0f, 0.0f); 
    glVertex3f(2.5f, -2.5f, 2.5f); 
    glTexCoord2f(1.0f, 1.0f); 
    glVertex3f(2.5f, -2.5f, -2.5f); 
    glTexCoord2f(0.0f, 1.0f); 
    glVertex3f(-2.5f, -2.5f, -2.5f); 
    glEnd(); 

에서

#version 330 


out vec2 texcoord; 

void main() 
{ 
    gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex; 
    texcoord=gl_MultiTexCoord0.xy; 
} 

Fragment.frag

#version 330 

uniform sampler2D img; 
in vec2 texcoord; 

void main() 
{ 
    vec4 texcolor = texture2D(img,texcoord); 
    gl_FragColor=texcolor; 

} 

텍스처 매핑 부분

Vertex.vert : 여기 내 코드는 무엇입니까? 전체 코드 :

http://codepad.org/O096OoKU

http://codepad.org/m3Snroyv

http://codepad.org/8zvJ4Vrp

답변

0

쉐이더 코드가 괜찮 나에게 보인다. (gluniform를 호출하기 전에 그러나 당신이 호출되지 glGetAttribLocation() glGetUniformLocation()

), glVertexAttribPointer()

또한이 모든 직전에() 한 번 glUseProgram 전화를 요구하고있다.

+0

전나무 링크를 보면 shader.CompileShaders()가 호출됩니다. mainloop하기 전에. 그 안에 glUseProgram()이 있습니다. 하지만 언급 한 기능을 어떻게 사용할 수 있습니까? 간단하면 쓸 수 있습니까? – peaceman

+0

각 glActiveTexture (GL_TEXTURE0) 호출 전에 glUsePrograme()를 호출해야합니다. glBindTexture (GL_TEXTURE_2D, m_TextureMainInput); glUniform1i (텍스처 [0] [displayMode], 0); 이것들은 어디에 있습니까? – Sung

+0

나는 그것들을 추가했지만 변화가 없다. 코드를 추가하든 아니든 코드가 정상적으로 실행되는지, 셰이더가 사용되지 않는지에 대한 변경은 없습니다. 너는 그 (것)들을 배우기 위하여 저에게 인터넷 연결을 줄 수 있는가? – peaceman

0

메신저 나도 잘못 입력했는데 잘못 입력했는데 어쩌면 그 대신 이런 식으로 생각해야할까요? 대신 glTexCoord2f 및 glVertex2f 대신 glVertexAttrib2f 및 3f를 (레이아웃 = location ???)과 결합하여 사용합니다.

upvote이 방법이 효과가 있다면.

일부는 사용하지 않으려 고 시도했습니다. glMultiTexCoord gl_texCoord

#ifdef __VERT__ 
#version 330 

uniform mat4 cameraPV; 
uniform mat4 lightPV; 

layout(location = 0) in vec3 shader_vertexPosition; 
layout(location = 1) in vec2 shader_textureCoord; 

out vec2 shader_baseTextureCoord; 
out vec4 shader_lightTextureCoord; 

void main() 
{ 
    vec4 worldPosition = vec4(shader_vertexPosition, 1); 
    gl_Position = cameraPV * worldPosition; 
    shader_baseTextureCoord = shader_textureCoord; 
    shader_lightTextureCoord = lightPV * worldPosition; 
} 
#endif 

static void VertexAttrib(GLuint location, glm::vec3 vector) 
{ 
    glVertexAttrib3f(location, vector.x, vector.y, vector.z); 
} 

glm::vec3 pa(+50, -10, -50); 
glm::vec3 pb(-50, -10, -50); 
glm::vec3 pc(+50, -10, +50); 
glm::vec3 pd(-50, -10, +50); 

glBegin(GL_TRIANGLE_STRIP); 
    glVertexAttrib2f(1, 1, 0); GLMisc::VertexAttrib(0, pa); 
    glVertexAttrib2f(1, 0, 0); GLMisc::VertexAttrib(0, pb); 
    glVertexAttrib2f(1, 1, 1); GLMisc::VertexAttrib(0, pc); 
    glVertexAttrib2f(1, 0, 1); GLMisc::VertexAttrib(0, pd); 
glEnd();