【问题标题】:Drawing single quad texture openGL ES 2.0绘制单四边形纹理 openGL ES 2.0
【发布时间】:2013-02-18 00:14:34
【问题描述】:

我是 ES 2.0 的新手,我正在尝试在 openGL ES 2.0 中绘制单个纹理。

这是我的代码:

data:指向纹理的指针(它正在工作,我已经可以用 ES 1.0 测试它)

w : 纹理宽度

h : 纹理高度

纹理为 256x256 像素

glGetError 在每一行都返回 GL_NO_ERROR……

希望有人可以提供帮助!我只能看到黑屏!

谢谢,

聪明

{ {

enum  {
    ATTRIB_VERTEX=0,
    ATTRIB_TEXTURE_POSITION,
    NUM_ATTRIB
};


glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

const GLfloat vertices[] = { -0.5f, -0.5f, 0.5f,  -0.5f, -0.5f,  0.5f, 0.5f, 0.5f };
const GLfloat texture_coord[] = {   0.0f, 1.0f,0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f };

GLuint texName;

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


glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices);

glEnableVertexAttribArray(ATTRIB_TEXTURE_POSITION);
glVertexAttribPointer(ATTRIB_TEXTURE_POSITION, 2, GL_FLOAT, 0, 0, texture_coord);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,w,h,
              0, GL_RGBA,
              GL_UNSIGNED_BYTE, data);


glDrawArrays (GL_TRIANGLES, 0, 4);
}

}

【问题讨论】:

    标签: drawing opengl-es-2.0 texture2d


    【解决方案1】:

    那是完整的来源吗?如果是这样,你必须做这些,但你必须在这些之前设置着色器。

    设置手柄

    ATTRIB_VERTEX = glGetAttribLocation(m_paintProgram, "position");
    ATTRIB_TEXTURE_POSITION = glGetAttribLocation(m_paintProgram, "inputTextureCoordinate");
    maintextureHandle= glGetUniformLocation(m_EffectProgram[displayMode], "texture0");
    

    通过句柄给出值

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texName);  
    glUniform1i(maintextureHandle, 0); // add
    

    而且您不必每次都调用此代码,只需调用一次即可

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texName);  
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,w,h,0, GL_RGBA,GL_UNSIGNED_BYTE, data);
    

    实际上,你的代码并没有那么多必需的代码,例如 Shader load、Shader compile、glUseProgram()、glBindFramebuffer()、glviewport()、glBindRenderbuffer 之类的。但我不能教他们所有人 我希望您参考此链接并了解更多关于opengl es 2.0的信息。

    http://examples.oreilly.com/9780596804831/readme.html#WireframeSkeleton

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多