纹理已经加载,主要展示代码如下:
- (void)draw
{
glClearColor(0.7, 0.7, 0.7, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_SRC_COLOR);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
CGFloat width = self.bounds.size.width;
CGFloat height = self.bounds.size.height;
glOrthof(-width / 2,
width / 2,
-height / 2,
height / 2,
-0.01,
10);
// glFrustumf(-width / 2,
// width / 2,
// -height / 2,
// height / 2,
// 1,
// 100);
glViewport(0, 0, width, height);
float POSITION[] = {0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, POSITION);
float AMBIENT[] = {0, 0, 1, 1}; // 颜色配置无色(宇宙环境为无色)
glLightfv(GL_LIGHT0, GL_AMBIENT, AMBIENT);
float DIFFUSE[] = {1, 1, 1, 1}; // 漫反射颜色设为白色
glLightfv(GL_LIGHT0, GL_DIFFUSE, DIFFUSE);
float SPECULAR[] = {1, 1, 1, 1}; // 镜面反射设为白色
glLightfv(GL_LIGHT0, GL_SPECULAR, SPECULAR);
glEnable(GL_COLOR_MATERIAL);
glEnableClientState(GL_VERTEX_ARRAY);
// glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVector3f A = glVector3fMake(-256, 256, -1);
glVector3f B = glVector3fMake(256, 256, -1);
glVector3f C = glVector3fMake(-256, -256, -1);
glVector3f D = glVector3fMake(256, -256, -1);
glVector3f points[] = {
A,
B,
C,
D
};
glVector3f texturePoints[] = {
glVector2fMake(0, 1),
glVector2fMake(1, 1),
glVector2fMake(0, 0),
glVector2fMake(1, 0)
};
GLbyte location[] = {
0, 1, 2, 3
};
// GLfloat colors[] = {
// 1, 0, 0, 1,
// 0, 1, 0, 1,
// 0, 0, 1, 1,
// 1, 1, 0, 1
// };
// ABC, BCD
glTriangle3v normals[] = {
glTriangle3vNormal(glTriangle3vMake(A, B, C)),
glTriangle3vNormal(glTriangle3vMake(B, C, D)),
};
glBindTexture(GL_TEXTURE_2D, self.textureId);
glVertexPointer(3, GL_FLOAT, 0, points);
// glColorPointer(4, GL_FLOAT, 0, colors);
glNormalPointer(GL_FLOAT, 0, normals);
glPointSize(10);
glTexCoordPointer(2, GL_FLOAT, 0, texturePoints);
// glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, location);
glDisableClientState(GL_VERTEX_ARRAY);
// glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
[_context presentRenderbuffer:GL_RENDERBUFFER_OES];
}