如何在OpenGL的for循环中指定纹理坐标?

如何在OpenGL的for循环中指定纹理坐标?,opengl,graphics,gpu,Opengl,Graphics,Gpu,我想以这样一种方式修改下面的代码片段,即使用for循环生成具有特定纹理的几何体。我想输入顶点坐标和顶点数量,然后使用glVertex3f生成纹理平面。这可能吗 编辑:为了澄清,我希望能够给出 glTexCoord2f(0.f, 0.f); glVertex3f(-1, -1, -1); glTexCoord2f(rep, 0.f); glVertex3f(-1, 1, -1); glTexCoord2f(rep, rep); glVertex3f(

我想以这样一种方式修改下面的代码片段,即使用for循环生成具有特定纹理的几何体。我想输入顶点坐标和顶点数量,然后使用glVertex3f生成纹理平面。这可能吗

编辑:为了澄清,我希望能够给出

        glTexCoord2f(0.f, 0.f); glVertex3f(-1, -1, -1);
        glTexCoord2f(rep, 0.f); glVertex3f(-1, 1, -1);
        glTexCoord2f(rep, rep); glVertex3f(-1, 1, 1);
        glTexCoord2f(0.f, rep); glVertex3f(-1, -1, 1);
使用for循环的段。就像我想要一个glVertex3f[n]数组,它的坐标由用户给定

// Obstacle texture

// draw with different ppm file
obstProg->enable();
obstProg->bindTexture("tex", obstTex, GL_TEXTURE_2D, 0);
obstProg->bindTexture("shadowTex", renderer->getShadowTexture(), GL_TEXTURE_2D, 1);
obstProg->setUniformfv("lightPosEye", renderer->getLightPositionEyeSpace(), 3);
obstProg->setUniformfv("lightColor", lightColor, 3);

    // set shadow matrix as texture matrix
matrix4f shadowMatrix3 = renderer->getShadowMatrix();
glActiveTexture(GL_TEXTURE0);
glMatrixMode(GL_TEXTURE);
glLoadMatrixf((GLfloat *) shadowMatrix3.get_value());

glColor3f(1.0, 1.0, 1.0);
glNormal3f(0.0, 1.0, 0.0);
glBegin(GL_QUADS);
{
    float rep = 10.f;
    glTexCoord2f(0.f, 0.f); glVertex3f(-1, -1, -1);
    glTexCoord2f(rep, 0.f); glVertex3f(-1, 1, -1);
    glTexCoord2f(rep, rep); glVertex3f(-1, 1, 1);
    glTexCoord2f(0.f, rep); glVertex3f(-1, -1, 1);

    glTexCoord2f(0.f, 0.f); glVertex3f(1, -1, -1);
    glTexCoord2f(rep, 0.f); glVertex3f(1, 1, -1);
    glTexCoord2f(rep, rep); glVertex3f(1, 1, 1);
    glTexCoord2f(0.f, rep); glVertex3f(1, -1, 1);

    glTexCoord2f(0.f, 0.f); glVertex3f(-1, -1, 1);
    glTexCoord2f(rep, 0.f); glVertex3f(-1, 1, 1);
    glTexCoord2f(rep, rep); glVertex3f(1, 1, 1);
    glTexCoord2f(0.f, rep); glVertex3f(1, -1, 1);

    glTexCoord2f(0.f, 0.f); glVertex3f(-1, -1, -1);
    glTexCoord2f(rep, 0.f); glVertex3f(-1, 1, -1);
    glTexCoord2f(rep, rep); glVertex3f(1, 1, -1);
    glTexCoord2f(0.f, rep); glVertex3f(1, -1, -1);

    glTexCoord2f(0.f, 0.f); glVertex3f(-1, 1, -1);
    glTexCoord2f(rep, 0.f); glVertex3f(1, 1, -1);
    glTexCoord2f(rep, rep); glVertex3f(1, 1, 1);
    glTexCoord2f(0.f, rep); glVertex3f(-1, 1, 1);

}
glEnd();
obstProg->disable();

因为数组中已经有顶点数据,所以直接将它们发送到OpenGL是有意义的,而不是手动循环它们并调用立即模式函数。谷歌搜索“顶点数组”

您不应该使用或学习使用即时模式(glBegin、glEnd、glTexCoord、glVertex和其他一些模式)。它们已从OpenGL-3及更高版本中删除。而且它们使用起来很笨拙。谢谢你的建议。但是有什么办法可以完成我在问题中描述的行为吗?@EmreTurkoz:考虑到你没有准确地描述你想要做的事情。。。不,您说要“生成纹理平面”。“纹理平面”是什么?它像“纹理坐标”吗?你打算如何生成这个“纹理平面?”@EmreTurkoz:那么。。。那样做。你需要我们做什么?@EmreTurkoz:既然你已经拥有数组中的顶点数据,直接将它们发送到OpenGL是有意义的,而不是手动循环并调用即时模式函数。谷歌搜索“顶点数组”