目次
干系文章
OpenGL系列之一:OpenGL第一个步调
OpenGL系列之二:绘制三角形
OpenGL系列之三:三角形极点增长颜色
实现结果
实当代码
这里是以之前的第三个步调(OpenGL系列之三:三角形极点增长颜色)为底子。
这里我们照旧只修改CCOpenGLRender.cpp中的Java_com_itfitness_opengldemo_GLRender_ndkPaintGL函数,我们调解绘制点的坐标,然后再增长一个点,别的我们也要调解glDrawArrays函数的mode参数为GL_TRIANGLE_STRIP,详细如下:
extern "C"JNIEXPORT void JNICALLJava_com_itfitness_opengldemo_GLRender_ndkPaintGL(JNIEnv *env, jobject thiz) { //清空颜色缓冲区或深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //界说三角型的点 CCFloat7 vertexTriangle[] = { {0.7,-0.7,0,1.0,0.0,0.0,1.0}, {0.7,0.7,0,0.0,1.0,0.0,1.0}, {-0.7,-0.7,0,0.0,0.0,1.0,1.0}, {-0.7,0.7,0,1.0,0.0,1.0,1.0}, }; //启动一组极点坐标 glEnableClientState(GL_VERTEX_ARRAY); //启动颜色极点 glEnableClientState(GL_COLOR_ARRAY); // 指定绘制的定点数组 // 第一个参数:绘制几个点(这里实在就是CCFloat7中的前三个点x,y,z) // 第二个参数:范例为float // 第三个参数:第一个点到第二个点之间的步长(也就是布局体的长度) // 第四个参数:绘制数据的地点 glVertexPointer(3,GL_FLOAT,sizeof(CCFloat7),vertexTriangle); //颜色的 glColorPointer(4,GL_FLOAT,sizeof(CCFloat7),&vertexTriangle[0].r); //绘制上面指定的数组 // 第一个参数:从哪个开始 // 第二个参数:绘制几个点 glDrawArrays(GL_TRIANGLE_STRIP,0,4); //关闭一组极点坐标 glDisableClientState(GL_VERTEX_ARRAY); //关闭颜色极点 glDisableClientState(GL_COLOR_ARRAY);}补充阐明
关于glDrawArrays中mode的参数,我们之前绘制三角形利用的是GL_TRIANGLES,这次我们利用的是GL_TRIANGLE_STRIP,实在尚有一个GL_TRIANGLE_FAN可以利用,这三个mode的区别如下:
GL_TRIANGLES:每三个点绘制一个三角形,不共享点
GL_TRIANGLE_STRIP:如果有四个极点,那么第2和第3个极点将被作为共享极点
GL_TRIANGLE_FAN:如果有四个极点,那么第一个极点始终作为共享极点,第二个极点也会做一次共享极点
|