1

GLSL でテクスチャ マッピングを行いたい。しかし、私のコードはシェーダーを使用していないと思います。これが私のコードです:

Vertex.vert

#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;

}

メインのテクスチャマッピング部分

    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();

コードの何が問題になっていますか? 完全なコード:

http://codepad.org/O096OoKU

http://codepad.org/m3Snroyv

http://codepad.org/8zvJ4Vrp

4

2 に答える 2

1

シェーダーコードは問題ないようです。ただし、 glGetAttribLocation() glGetUniformLocation() を呼び出したことはありません

gluniform()、glVertexAttribPointer() を呼び出す前に

また、これらすべてが呼び出される直前に、glUseProgram() を 1 回呼び出す必要があります。

于 2013-02-24T23:25:02.633 に答える
0

私もこれに慣れていないので、間違っている場合は修正してください。そのため、glTexCoord2f と glVertex2f の代わりに、常に glVertexAttrib2f と 3f を layout(location = ???) と組み合わせて使用​​します。

これがうまくいくかどうかに賛成票を投じてください。

私が試したいくつかの非推奨。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();
于 2013-03-31T11:40:52.867 に答える