目錄
相關(guān)文章
OpenGL系列之一:OpenGL第一個(gè)程序
OpenGL系列之二:繪制三角形
OpenGL系列之三:三角形頂點(diǎn)增加顏色
實(shí)現(xiàn)效果
實(shí)現(xiàn)代碼
這里是以之前的第三個(gè)程序(OpenGL系列之三:三角形頂點(diǎn)增加顏色)為基礎(chǔ)。
這里我們還是只修改CCOpenGLRender.cpp中的Java_com_itfitness_opengldemo_GLRender_ndkPaintGL函數(shù),我們調(diào)整繪制點(diǎn)的坐標(biāo)坞古,然后再增加一個(gè)點(diǎn),另外我們也要調(diào)整glDrawArrays函數(shù)的mode參數(shù)為GL_TRIANGLE_STRIP辞居,具體如下:
extern "C"
JNIEXPORT void JNICALL
Java_com_itfitness_opengldemo_GLRender_ndkPaintGL(JNIEnv *env, jobject thiz) {
//清空顏色緩沖區(qū)或深度緩沖區(qū)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//定義三角型的點(diǎn)
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},
};
//啟動(dòng)一組頂點(diǎn)坐標(biāo)
glEnableClientState(GL_VERTEX_ARRAY);
//啟動(dòng)顏色頂點(diǎn)
glEnableClientState(GL_COLOR_ARRAY);
// 指定繪制的定點(diǎn)數(shù)組
// 第一個(gè)參數(shù):繪制幾個(gè)點(diǎn)(這里其實(shí)就是CCFloat7中的前三個(gè)點(diǎn)x,y,z)
// 第二個(gè)參數(shù):類型為float
// 第三個(gè)參數(shù):第一個(gè)點(diǎn)到第二個(gè)點(diǎn)之間的步長(zhǎng)(也就是結(jié)構(gòu)體的長(zhǎng)度)
// 第四個(gè)參數(shù):繪制數(shù)據(jù)的地址
glVertexPointer(3,GL_FLOAT,sizeof(CCFloat7),vertexTriangle);
//顏色的
glColorPointer(4,GL_FLOAT,sizeof(CCFloat7),&vertexTriangle[0].r);
//繪制上面指定的數(shù)組
// 第一個(gè)參數(shù):從哪個(gè)開(kāi)始
// 第二個(gè)參數(shù):繪制幾個(gè)點(diǎn)
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
//關(guān)閉一組頂點(diǎn)坐標(biāo)
glDisableClientState(GL_VERTEX_ARRAY);
//關(guān)閉顏色頂點(diǎn)
glDisableClientState(GL_COLOR_ARRAY);
}
補(bǔ)充說(shuō)明
關(guān)于glDrawArrays中mode的參數(shù),我們之前繪制三角形使用的是GL_TRIANGLES蛋勺,這次我們使用的是GL_TRIANGLE_STRIP瓦灶,其實(shí)還有一個(gè)GL_TRIANGLE_FAN可以使用,這三個(gè)mode的區(qū)別如下:
GL_TRIANGLES:每三個(gè)點(diǎn)繪制一個(gè)三角形抱完,不共享點(diǎn)
GL_TRIANGLE_STRIP:假如有四個(gè)頂點(diǎn)贼陶,那么第2和第3個(gè)頂點(diǎn)將被作為共享頂點(diǎn)
GL_TRIANGLE_FAN:假如有四個(gè)頂點(diǎn),那么第一個(gè)頂點(diǎn)始終作為共享頂點(diǎn)巧娱,第二個(gè)頂點(diǎn)也會(huì)做一次共享頂點(diǎn)