2010-11-24 56 views
0

我考慮了一展身手了一段時間,但我一直沒能得到良好的結果。基本上,我有一個2個紋理的球體。一個是與其他人混合在一起的,並且想法是讓它成爲一個臉部環境映射。我想讓一個紋理與球體一起旋轉,另一個紋理保持固定在最初的紋理座標上。另外旋轉2紋理座標集相同的對象

我試圖旋轉一個紋理矩陣GL_TEXTURE和重置等,但是這並沒有真正做的伎倆,因爲當它旋轉某些方面的紋理映射是不正確的。

任何人都知道我可以旋轉,只有一組紋理座標,並保持固定的另一個?

這是我此刻的渲染代碼:

glColor4f(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 

glClientActiveTexture(GL_TEXTURE0); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex[0]); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].texCoord); 

glMatrixMode(GL_TEXTURE); 
glPushMatrix(); 
glTranslatef(0, 0, -4.5f); 
glRotatef(.00001, .00001, .0, .0); 

glClientActiveTexture(GL_TEXTURE1); 
glActiveTexture(GL_TEXTURE1); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex[1]); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].texCoord); 

glPopMatrix(); 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); 

glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glTranslatef(0, 0, -4.5f); 

glVertexPointer(3, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].vertex); 
glNormalPointer(GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].normal); 
glDrawArrays(GL_TRIANGLES, 0, kSphereNumberOfVertices); 

glPopMatrix(); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 

rotation += .0001; 

如果有人需要看到更多的是怎麼回事,只是讓我知道的。

回答

1

你可以使用兩個球,只發出glRotatef()球體與您要旋轉的紋理。另一個球體只會收到相應的glTranslatef()命令。如果您使用Alpha通道混合紋理,它應該工作相同。

+0

我雖然這件事,但我擔心它會影響到整體性能。還有一堆其他的碰撞檢測和物理數學,已經增加了很多開銷。任何想法,我會採取多少表現打擊,而不是一種不同的方式? – ezekielDFM 2010-12-20 17:04:35