| Index: third_party/gles_book_examples/Common/Source/esShapes.c
|
| ===================================================================
|
| --- third_party/gles_book_examples/Common/Source/esShapes.c (revision 35873)
|
| +++ third_party/gles_book_examples/Common/Source/esShapes.c (working copy)
|
| @@ -1,280 +0,0 @@
|
| -//
|
| -// Book: OpenGL(R) ES 2.0 Programming Guide
|
| -// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
|
| -// ISBN-10: 0321502795
|
| -// ISBN-13: 9780321502797
|
| -// Publisher: Addison-Wesley Professional
|
| -// URLs: http://safari.informit.com/9780321563835
|
| -// http://www.opengles-book.com
|
| -//
|
| -
|
| -// ESShapes.c
|
| -//
|
| -// Utility functions for generating shapes
|
| -//
|
| -
|
| -///
|
| -// Includes
|
| -//
|
| -#include "esUtil.h"
|
| -#include <stdlib.h>
|
| -#include <math.h>
|
| -#include <string.h>
|
| -
|
| -///
|
| -// Defines
|
| -//
|
| -#define ES_PI (3.14159265f)
|
| -
|
| -//////////////////////////////////////////////////////////////////
|
| -//
|
| -// Private Functions
|
| -//
|
| -//
|
| -
|
| -
|
| -
|
| -//////////////////////////////////////////////////////////////////
|
| -//
|
| -// Public Functions
|
| -//
|
| -//
|
| -
|
| -//
|
| -/// \brief Generates geometry for a sphere. Allocates memory for the vertex data and stores
|
| -/// the results in the arrays. Generate index list for a TRIANGLE_STRIP
|
| -/// \param numSlices The number of slices in the sphere
|
| -/// \param vertices If not NULL, will contain array of float3 positions
|
| -/// \param normals If not NULL, will contain array of float3 normals
|
| -/// \param texCoords If not NULL, will contain array of float2 texCoords
|
| -/// \param indices If not NULL, will contain the array of indices for the triangle strip
|
| -/// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
|
| -/// if it is not NULL ) as a GL_TRIANGLE_STRIP
|
| -//
|
| -int esGenSphere ( int numSlices, float radius, GLfloat **vertices, GLfloat **normals,
|
| - GLfloat **texCoords, GLuint **indices )
|
| -{
|
| - int i;
|
| - int j;
|
| - int numParallels = numSlices / 2;
|
| - int numVertices = ( numParallels + 1 ) * ( numSlices + 1 );
|
| - int numIndices = numParallels * numSlices * 6;
|
| - float angleStep = (2.0f * ES_PI) / ((float) numSlices);
|
| -
|
| - // Allocate memory for buffers
|
| - if ( vertices != NULL )
|
| - *vertices = malloc ( sizeof(GLfloat) * 3 * numVertices );
|
| -
|
| - if ( normals != NULL )
|
| - *normals = malloc ( sizeof(GLfloat) * 3 * numVertices );
|
| -
|
| - if ( texCoords != NULL )
|
| - *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices );
|
| -
|
| - if ( indices != NULL )
|
| - *indices = malloc ( sizeof(GLuint) * numIndices );
|
| -
|
| - for ( i = 0; i < numParallels + 1; i++ )
|
| - {
|
| - for ( j = 0; j < numSlices + 1; j++ )
|
| - {
|
| - int vertex = ( i * (numSlices + 1) + j ) * 3;
|
| -
|
| - if ( vertices )
|
| - {
|
| - (*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 ( normals )
|
| - {
|
| - (*normals)[vertex + 0] = (*vertices)[vertex + 0] / radius;
|
| - (*normals)[vertex + 1] = (*vertices)[vertex + 1] / radius;
|
| - (*normals)[vertex + 2] = (*vertices)[vertex + 2] / radius;
|
| - }
|
| -
|
| - if ( texCoords )
|
| - {
|
| - int texIndex = ( i * (numSlices + 1) + j ) * 2;
|
| - (*texCoords)[texIndex + 0] = (float) j / (float) numSlices;
|
| - (*texCoords)[texIndex + 1] = ( 1.0f - (float) i ) / (float) (numParallels - 1 );
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Generate the indices
|
| - if ( indices != NULL )
|
| - {
|
| - GLuint *indexBuf = (*indices);
|
| - for ( i = 0; i < numParallels ; i++ )
|
| - {
|
| - for ( j = 0; j < numSlices; j++ )
|
| - {
|
| - *indexBuf++ = i * ( numSlices + 1 ) + j;
|
| - *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + j;
|
| - *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 );
|
| -
|
| - *indexBuf++ = i * ( numSlices + 1 ) + j;
|
| - *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 );
|
| - *indexBuf++ = i * ( numSlices + 1 ) + ( j + 1 );
|
| - }
|
| - }
|
| - }
|
| -
|
| - return numIndices;
|
| -}
|
| -
|
| -//
|
| -/// \brief Generates geometry for a cube. Allocates memory for the vertex data and stores
|
| -/// the results in the arrays. Generate index list for a TRIANGLES
|
| -/// \param scale The size of the cube, use 1.0 for a unit cube.
|
| -/// \param vertices If not NULL, will contain array of float3 positions
|
| -/// \param normals If not NULL, will contain array of float3 normals
|
| -/// \param texCoords If not NULL, will contain array of float2 texCoords
|
| -/// \param indices If not NULL, will contain the array of indices for the triangle strip
|
| -/// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
|
| -/// if it is not NULL ) as a GL_TRIANGLE_STRIP
|
| -//
|
| -int esGenCube ( float scale, GLfloat **vertices, GLfloat **normals,
|
| - GLfloat **texCoords, GLuint **indices )
|
| -{
|
| - int i;
|
| - int numVertices = 24;
|
| - int numIndices = 36;
|
| -
|
| - GLfloat cubeVerts[] =
|
| - {
|
| - -0.5f, -0.5f, -0.5f,
|
| - -0.5f, -0.5f, 0.5f,
|
| - 0.5f, -0.5f, 0.5f,
|
| - 0.5f, -0.5f, -0.5f,
|
| - -0.5f, 0.5f, -0.5f,
|
| - -0.5f, 0.5f, 0.5f,
|
| - 0.5f, 0.5f, 0.5f,
|
| - 0.5f, 0.5f, -0.5f,
|
| - -0.5f, -0.5f, -0.5f,
|
| - -0.5f, 0.5f, -0.5f,
|
| - 0.5f, 0.5f, -0.5f,
|
| - 0.5f, -0.5f, -0.5f,
|
| - -0.5f, -0.5f, 0.5f,
|
| - -0.5f, 0.5f, 0.5f,
|
| - 0.5f, 0.5f, 0.5f,
|
| - 0.5f, -0.5f, 0.5f,
|
| - -0.5f, -0.5f, -0.5f,
|
| - -0.5f, -0.5f, 0.5f,
|
| - -0.5f, 0.5f, 0.5f,
|
| - -0.5f, 0.5f, -0.5f,
|
| - 0.5f, -0.5f, -0.5f,
|
| - 0.5f, -0.5f, 0.5f,
|
| - 0.5f, 0.5f, 0.5f,
|
| - 0.5f, 0.5f, -0.5f,
|
| - };
|
| -
|
| - GLfloat cubeNormals[] =
|
| - {
|
| - 0.0f, -1.0f, 0.0f,
|
| - 0.0f, -1.0f, 0.0f,
|
| - 0.0f, -1.0f, 0.0f,
|
| - 0.0f, -1.0f, 0.0f,
|
| - 0.0f, 1.0f, 0.0f,
|
| - 0.0f, 1.0f, 0.0f,
|
| - 0.0f, 1.0f, 0.0f,
|
| - 0.0f, 1.0f, 0.0f,
|
| - 0.0f, 0.0f, -1.0f,
|
| - 0.0f, 0.0f, -1.0f,
|
| - 0.0f, 0.0f, -1.0f,
|
| - 0.0f, 0.0f, -1.0f,
|
| - 0.0f, 0.0f, 1.0f,
|
| - 0.0f, 0.0f, 1.0f,
|
| - 0.0f, 0.0f, 1.0f,
|
| - 0.0f, 0.0f, 1.0f,
|
| - -1.0f, 0.0f, 0.0f,
|
| - -1.0f, 0.0f, 0.0f,
|
| - -1.0f, 0.0f, 0.0f,
|
| - -1.0f, 0.0f, 0.0f,
|
| - 1.0f, 0.0f, 0.0f,
|
| - 1.0f, 0.0f, 0.0f,
|
| - 1.0f, 0.0f, 0.0f,
|
| - 1.0f, 0.0f, 0.0f,
|
| - };
|
| -
|
| - GLfloat cubeTex[] =
|
| - {
|
| - 0.0f, 0.0f,
|
| - 0.0f, 1.0f,
|
| - 1.0f, 1.0f,
|
| - 1.0f, 0.0f,
|
| - 1.0f, 0.0f,
|
| - 1.0f, 1.0f,
|
| - 0.0f, 1.0f,
|
| - 0.0f, 0.0f,
|
| - 0.0f, 0.0f,
|
| - 0.0f, 1.0f,
|
| - 1.0f, 1.0f,
|
| - 1.0f, 0.0f,
|
| - 0.0f, 0.0f,
|
| - 0.0f, 1.0f,
|
| - 1.0f, 1.0f,
|
| - 1.0f, 0.0f,
|
| - 0.0f, 0.0f,
|
| - 0.0f, 1.0f,
|
| - 1.0f, 1.0f,
|
| - 1.0f, 0.0f,
|
| - 0.0f, 0.0f,
|
| - 0.0f, 1.0f,
|
| - 1.0f, 1.0f,
|
| - 1.0f, 0.0f,
|
| - };
|
| -
|
| - // Allocate memory for buffers
|
| - if ( vertices != NULL )
|
| - {
|
| - *vertices = malloc ( sizeof(GLfloat) * 3 * numVertices );
|
| - memcpy( *vertices, cubeVerts, sizeof( cubeVerts ) );
|
| - for ( i = 0; i < numVertices; i++ )
|
| - {
|
| - (*vertices)[i] *= scale;
|
| - }
|
| - }
|
| -
|
| - if ( normals != NULL )
|
| - {
|
| - *normals = malloc ( sizeof(GLfloat) * 3 * numVertices );
|
| - memcpy( *normals, cubeNormals, sizeof( cubeNormals ) );
|
| - }
|
| -
|
| - if ( texCoords != NULL )
|
| - {
|
| - *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices );
|
| - memcpy( *texCoords, cubeTex, sizeof( cubeTex ) ) ;
|
| - }
|
| -
|
| -
|
| - // Generate the indices
|
| - if ( indices != NULL )
|
| - {
|
| - GLuint cubeIndices[] =
|
| - {
|
| - 0, 2, 1,
|
| - 0, 3, 2,
|
| - 4, 5, 6,
|
| - 4, 6, 7,
|
| - 8, 9, 10,
|
| - 8, 10, 11,
|
| - 12, 15, 14,
|
| - 12, 14, 13,
|
| - 16, 17, 18,
|
| - 16, 18, 19,
|
| - 20, 23, 22,
|
| - 20, 22, 21
|
| - };
|
| -
|
| - *indices = malloc ( sizeof(GLuint) * numIndices );
|
| - memcpy( *indices, cubeIndices, sizeof( cubeIndices ) );
|
| - }
|
| -
|
| - return numIndices;
|
| -}
|
|
|