我需要OpenGL ES 1.1渲染对象与纹理和其他只是顶点油漆和颜色简单



我在XCode上运行,使用OpenGL ES 1.1我有两个类一个是纹理的,另一个是带有颜色数据的三角形它们渲染得很好,直到我渲染我的纹理三角形为止但是其他的也会被我的精灵图集的奇怪部分纹理化它们根本没有任何纹理线

-(void) renderWithUpdate {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//Translate
glTranslatef(tranlation.x, tranlation.y, tranlation.z);
//Scale
glScalef(scale.x, scale.y, scale.z);
//Rotate
glRotatef( angleGeo, 1.0, 1.0, 0.0);

angleGeo = angleGeo + 0.5;
//NSLog(@"Rotation Angle:%F", (float)angleGeo );
glVertexPointer(vertexSize, GL_FLOAT, 0, self.vertexes );
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_FLOAT, 0, self.colors);
glEnableClientState(GL_COLOR_ARRAY);                

//Render with Texturing 
if (materialKey != nil) {
    [[MaterialController  sharedMaterialController] bindMaterial:materialKey];
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, uvCoordinates);
}

//Render
glDrawArrays( renderStyle, 0, self.vertexCount);
}

如果我在渲染方法中禁用纹理编码数组,当我的纹理对象工作良好时,它们会完全消失

glEnable(GL_TEXTURE_2D)有关吗?

渲染纹理对象后,您必须通过调用glDisable(GL_TEXTURE_2D)来禁用纹理(我猜您的MaterialControllerbindMaterial方法调用glEnable(GL_TEXTURE_2D))。仅仅禁用纹理坐标数组(使用glDisableClientState(GL_TEXTURE_COORD_ARRAY))是不够的(尽管你也应该这样做,在渲染纹理几何之后):

...
glDrawArrays( renderStyle, 0, self.vertexCount);
if(materialKey != nil)
{
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisable(GL_TEXTURE_2D);
}

始终记住,OpenGL是一个状态机,你改变的每个状态(如启用纹理)保持其值,直到再次改变它。所以你应该总是意识到你的应用程序的哪些部分改变了OpenGL状态(如bindMaterial方法),并在渲染之前立即设置你需要的每个状态。

相关内容

  • 没有找到相关文章

最新更新