[英]Drawing with Vertex Buffer Objects in OpenGL ES 1.1 not working
[英]I need OpenGL ES 1.1 to render objects with texturing and others with just vertex paints and colors simple
我在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)
禁用纹理化(我猜您MaterialController
的bindMaterial
方法调用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
方法),并在渲染前立即设置所需的每个状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.