2

わかりました。問題を分離します。これには、詳細な回答が必要であり、一般化された回答しかない場合は失敗します。

もともとline_loopを使用して描いた車体を持っていて、テクスチャを作成できるようにポリゴンに変更しました。ただし、そのようにホイールアーチを無視します。

車が間違っている

(今のところテクスチャリングを無視してください、私は別の時にそれを理解する必要があります;))

これは私の車がline_loopでどのように見えるかです

車の形

ポリゴンでホイールアーチを作成する方法で円が滑らかになる場合は、さらに良いです:)

これは私の現在のコードです(テクスチャのものは無視してください)以前の質問からその方向の製品でテッセレーションを開始しましたが、それをどのように使用するか、どの座標を渡すかなどは正確にはわかりません。すべての助けに感謝します!!

void drawBody(int textureindex)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureLib[textureindex]);

GLUtesselator *tess = gluNewTess(); // create a tessellator
      if(!tess) return 0;  // failed to create tessellation object, return 0

glBegin(GL_POLYGON);

glTexCoord2f(0.0F, 0.0F);
      glVertex2f(-1.0f, 0.0f);
glTexCoord2f(-0.97, 0.0);
      glVertex2f(-1.97f, 0.0f);
//wheel arch begin.
glTexCoord2f(-0.93, 0.3);
      glVertex2f(-1.93f, 0.3f);
glTexCoord2f(-0.95, 0.4);
glVertex2f(-1.95f, 0.4f);
glTexCoord2f(-1.2, 0.6);
glVertex2f(-2.2f, 0.6f);
glTexCoord2f(-1.6, 0.6);
glVertex2f(-2.6f, 0.6f);
glTexCoord2f(-1.82, 0.4);
glVertex2f(-2.82f, 0.4f);
glTexCoord2f(-1.8, 0.3);
glVertex2f(-2.8f, 0.3f);
glTexCoord2f(-1.78, 0.0);
glVertex2f(-2.78f, 0.0f);
//end wheel arch.
//Front of car.
glTexCoord2f(0.0, 0.0);
glVertex2f(-3.8f, 0.0f);
glTexCoord2f(0.0, 0.2);
glVertex2f(-3.7f, 0.2f);
glTexCoord2f(0.0, 0.4);
glVertex2f(-3.8f, 0.4f);
glTexCoord2f(0.0, 0.7);
glVertex2f(-2.8f, 0.7f);
glTexCoord2f(0.0, 0.7);
glVertex2f(-2.4f, 0.7f);
//Windscreen.
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0f, 1.0f);
glTexCoord2f(1.0, 1.0);
glVertex2f(0.5f, 1.05f);
glTexCoord2f(1.0, 0.8);
glVertex2f(2.3f, 0.8f);
//rear bumper.
glTexCoord2f(1.0, 0.5);
glVertex2f(2.15f, 0.5f);
glTexCoord2f(1.0, 0.3);
glVertex2f(2.15f, 0.3f);
glTexCoord2f(1.0, 0.3);
glVertex2f(2.35f, 0.3f);
glTexCoord2f(1.0, 0.0);
glVertex2f(2.0f, 0.0f);
glTexCoord2f(1.0, 0.0);
glVertex2f(1.83f, 0.0f);
//wheel arch begin.
glTexCoord2f(1.0, 0.3);
      glVertex2f(1.85f, 0.3f);
glTexCoord2f(1.0, 0.4);
      glVertex2f(1.86f, 0.4f);
glTexCoord2f(1.0, 0.6);
glVertex2f(1.6f, 0.6f);
glTexCoord2f(1.0, 0.6);
glVertex2f(1.2f, 0.6f);
glTexCoord2f(1.0, 0.4);
glVertex2f(1.0f, 0.4f);
glTexCoord2f(1.0, 0.3);
glVertex2f(1.0f, 0.3f);
glTexCoord2f(1.0, 0.0);
glVertex2f(1.05f, 0.0f);
//end wheel arch.
glEnd();
glDisable(GL_TEXTURE_2D);
}

テッセレーションのコードを改訂しました(これまでは1つのホイールアーチでのみ試行され、影響はありませんでした)。

    GLdouble car[7][2] = { {-1.93,0.3}, {-1.95,0.4}, {-2.2,0.6}, {-2.6,0.6}, {-2.82,0.4}, {-2.8,0.3}, {-2.78,0.0} };
    GLUtesselator *tess = gluNewTess(); // create a tessellator
gluTessBeginPolygon(tess, 0);  
gluTessBeginContour(tess);
{
    gluTessVertex(tess, car[0], car[0]);
    gluTessVertex(tess, car[1], car[1]);
    gluTessVertex(tess, car[2], car[2]);
    gluTessVertex(tess, car[3], car[3]);
    gluTessVertex(tess, car[4], car[4]);
    gluTessVertex(tess, car[5], car[5]);
    gluTessVertex(tess, car[6], car[6]);
}
gluTessEndContour(tess);
gluTessEndPolygon(tess);

ご協力いただきありがとうございます。最終的な画像は次のようになります。

車が完成しました

もう一度、すべてのあなたの助けに感謝します!特にPeterT:)

4

2 に答える 2

1

GL_POLYGON は、多角形の描画に使用されます。あなたの車は凸型ではないので、一度にすべてを描画することはできません (glBegin.. glEnd)。車を異なるプリミティブ タイプを持つ複数のパーツに分割します。GL_POLYGON はすべてに使用できるわけではありません。

tesselatorも使用していません。

要するに、あなたの質問は非常に基本的なものです。OpenGL をさらに進める前に、ほぼすべての基本情報をカバーする「OpenGL レッド ブック」を読み終えてください。バージョン 1.1 は、オンラインのさまざまな場所で無料で入手できます。

于 2012-01-07T22:40:21.840 に答える
1

テッセレータをまったく使用していません。座標をテッセレータに供給すると、次のようになります

    gluTessBeginContour(tess);
        :
        gluTessVertex(tess, v[i], v[i]);
        :
    gluTessEndContour(tess);

ここを読んでサンプルを入手してください http://www.songho.ca/opengl/gl_tessellation.html

于 2012-01-07T22:39:04.193 に答える