2011-06-30 102 views
0

如何在OpenGL中繪製具有與本示例圖像(link to image)中定向的線性漸變紋理的圓柱體?在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提供紋理座標生成,所以我建議在調用gluCylinder之前添加以下內容,而不是gluQuadricTexture。

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