2011-06-30 98 views
0

この例のイメージ(link to image)のような線形グラデーションテクスチャを持つOpenGLで円柱を描くにはどうすればよいですか?OpenGLの線形グラデーションテクスチャを持つ円柱を描画

円筒を描画するのにgluCylinder()を使用します。しかし、私は質感を得るために苦労しています。

glEnable(GL_TEXTURE_1D); 
glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_1D, texture); 
GLubyte gradient[6] = { 255,0,0, 0,255,0 }; 
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA8, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, gradient); 
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

gluQuadricDrawStyle(quad,GLU_FILL); 
gluQuadricTexture(quad,GL_TRUE); 
gluCylinder(quad,1.0f,1.0f,3.0f,32,32); 

これは、勾配を生成するが、それは間違った方向性を持っている:screenshot

は、どのように私は正しい方向を得ることができますか?

+1

すでにいくつかのコードがありますか、まったく新しいOpenGLですか?それが後者の場合は、あなたが本当に理解できないコードを書くだけでなく、より低いレベルから始めなければなりません。 –

+0

NeHe OpenGLチュートリアルに進んで、すべての基本的なことがそこに説明されています - > http://nehe.gamedev.net/lesson.asp?index=01 – Kromster

+0

私はOpenGLを初めて使っていません。より多くの情報とコードを提供するために質問を更新しました。 –

答えて

1

テクスチャの座標を指定する必要があります。 gluCylinderが生成するテクスチャ座標があれば、私はそれを覚えていません。しかし、あなたのケースでは、古いスタイルのOpenGLテクスチャ座標の生成が役立つはずです。 gluCylinderはZ軸に沿って移動するので、(0,0,0)→(0)→(0,0、heigt)→(1)のテクスチャ座標が必要です。

バージョン2までのOpenGLはテクスチャ座標の生成を提供するので、gluQuadricTextureの代わりにgluCylinderを呼び出す前に、次のように追加することをお勧めします。

GLfloat texgen_coeff[4] = {1./height, 0., 0., 0.}; 
glEnable(GL_TEXTURE_GEN_S); 
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 
glTexGenfv(GL_S, GL_OBJECT_PLANE, texgen_coeff);