2012-03-11 13 views
-2

以下のようなコードスニペットを、for-loopsを使って特定のテクスチャを使ってジオメトリを生成するように修正したいと思います。私は、頂点の座標と頂点の量を入力し、glVertex3fを使ってテクスチャ面を生成します。これは可能ですか?OpenGLでforループのテクスチャ座標を割り当てる方法は?

編集:明確にするために、私は、forループ使用

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

セグメントに含まれる情報を与えることができるようにしたいです。これは、ユーザーが指定した座標を持つ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(); 
+2

あなたは即時モード(glBegin、glEnd、glTexCoord、glVertexなど)を使用したり、習得したりしないでください。それらはOpenGL-3以降から削除されています。そして、彼らは使用するのに不器用です。 – datenwolf

+0

アドバイスありがとうございます。しかし私が私の質問で述べた行為を実行する方法はありますか? –

+0

@ EmreTurkoz:あなたが何をしようとしているのかを正確には説明していないと考えている...いいえ。あなたは、 "テクスチャ平面を生成する"と言います。さて、「テクスチャ平面」とは何ですか?それは "テクスチャ座標"のようなものですか?この「テクスチャ平面」をどのように生成するつもりですか? –

答えて

1

あなたはすでにそれが代わりに手動でそれらをループで、直接のOpenGLに送信し、即時モード関数を呼び出すことは理にかなって、アレイ内の頂点データを持っているので。 Googleの "Vertex Arrays"

関連する問題