2012-01-07 7 views
2

私はそれに深い答えが必要なので、私の問題を別にしています。一般化の答えがあれば失敗します。ポリゴンレンダリングされた車でテッセレーションを使用したOpenGLプロジェクト

私は元々line_loopを使って描いた車体を持っていて、それをポリゴンに変えてテクスチャをつけることができます。しかし、それはホイールアーチを無視している。

car wrong

(今のテクスチャを無視し、私は別の時間に1つを把握する必要があります;))

これは私の車はline_loop

car shape

と次のようになりますホイールをポリゴンでアーチさせる方法が円滑になると、より円滑になります。

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

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

すべてのあなたの助けのおかげでは、最終的なイメージは次のようになります。もう一度

car finished

すべてのあなたの助けに感謝を!特にPeterT :)

+0

即時モード: 'glBegin(...); for(...){glVertex(...);} glEnd(); '、それは痛い。それをやめ、頂点配列を使用してください。即時モードは10年以上無視され、OpenGL-3以降は償却されます。 – datenwolf

答えて

1

テッセレーターはまったく使用していません。テッセレータに座標を供給すること、ここで読むこの

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

のようなものを見て、http://www.songho.ca/opengl/gl_tessellation.html

+0

私は車のすべての芯を供給するのですか、または車輪のアーチを構成するものだけを供給しますか? –

+0

@ Mike私は彼らがちょうど別の輪郭だと思う。しかし、ここで普通の2Dを持っているように見えます。ホイールのテクスチャが透明なPNGであれば、平方の四角形ができます。 – epatel

+0

okありがとう非常に:) –

1

GL_POLYGONがポリゴンを描画するために使用されている例をつかむだろう。あなたの車は凸面ではないので、一度にすべてを描くことはできません(glBegin .. glEnd)。異なるプリミティブタイプを持つ複数のパーツに分割します。 GL_POLYGONはすべてに使用できません。

あなたはtesselatorを使用していません。

あなたの質問は非常に基本的です。 OpenGLをさらに進める前に、すべての基本的な情報をカバーする "OpenGL red book"を完成させてください。バージョン1.1はavailable online for freeで、several different placesです。

関連する問題