我想在沒有任何引擎的情況下在純OpenGL ES 2.0中繪製球體。我寫下面的代碼:Draw Sphere - 頂點順序
int GenerateSphere (int Slices, float radius, GLfloat **vertices, GLfloat **colors) {
srand(time(NULL));
int i=0, j = 0;
int Parallels = Slices ;
float tempColor = 0.0f;
int VerticesCount = (Parallels + 1) * (Slices + 1);
float angleStep = (2.0f * M_PI)/((float) Slices);
// Allocate memory for buffers
if (vertices != NULL) {
*vertices = malloc (sizeof(GLfloat) * 3 * VerticesCount);
}
if (colors != NULL) {
*colors = malloc(sizeof(GLfloat) * 4 * VerticesCount);
}
for (i = 0; i < Parallels+1; i++) {
for (j = 0; j < Slices+1 ; j++) {
int vertex = (i * (Slices + 1) + j) * 3;
(*vertices)[vertex + 0] = radius * sinf (angleStep * (float)i) *
sinf (angleStep * (float)j);
(*vertices)[vertex + 1] = radius * cosf (angleStep * (float)i);
(*vertices)[vertex + 2] = radius * sinf (angleStep * (float)i) *
cosf (angleStep * (float)j);
if (colors) {
int colorIndex = (i * (Slices + 1) + j) * 4;
tempColor = (float)(rand()%100)/100.0f;
(*colors)[colorIndex + 0] = 0.0f;
(*colors)[colorIndex + 1] = 0.0f;
(*colors)[colorIndex + 2] = 0.0f;
(*colors)[colorIndex + (rand()%4)] = tempColor;
(*colors)[colorIndex + 3] = 1.0f;
}
}
}
return VerticesCount;
}
我用下面的代碼繪製它:
glDrawArrays(GL_TRIANGLE_STRIP, 0, userData->numVertices);
凡userData-> numVertices - VerticesCount從功能GenerateSphere。 但在屏幕上繪製系列三角形,這些不是球體近似! 我想,我需要計算頂點並使用OpenGL ES 2.0函數glDrawElements()(包含數組,包含數字頂點)。但是在屏幕上繪製的一系列三角形不是球體近似。 如何繪製球體近似值?如何指定順序頂點(OpenGL ES 2.0術語中的索引)?
我一般使用的功能esGenSphere從GLES2編程指南。然而,書中的那個(和svn)會產生錯誤的texcoord y;這在https://github.com/laanwj/etna_viv/blob/master/native/lib/esShapes.c中得到解決。它生成頂點和索引。 – wump