160 CHAPTER 5: Textures^
m_Scale=radius;
m_Squash=squash;
colorIncrment=255/stacks;
if ((self = [super init]))
{
m_Stacks = stacks;
m_Slices = slices;
m_VertexData = nil;
m_TexCoordsData = nil;
//Vertices
GLfloat *vPtr = m_VertexData =
(GLfloat*)malloc(sizeof(GLfloat) * 3 * ((m_Slices*2+2) *«
(m_Stacks)));
//Color data
GLubyte *cPtr = m_ColorData =
(GLubyte*)malloc(sizeof(GLubyte) * 4 * ((m_Slices*2+2) *«
(m_Stacks)));
//Normal pointers for lighting
GLfloat *nPtr = m_NormalData = (GLfloat*)
malloc(sizeof(GLfloat) * 3 * ((m_Slices*2+2) * (m_Stacks)));
GLfloat *tPtr=nil; //3
if(textureFile!=nil)
{
tPtr=m_TexCoordsData =
(GLfloat *)malloc(sizeof(GLfloat) * 2 * ((m_Slices*2+2) *«
(m_Stacks)));
}
unsigned int phiIdx, thetaIdx;
//Latitude
for(phiIdx=0; phiIdx < m_Stacks; phiIdx++)
{
//Starts at -1.57 goes up to +1.57 radians.
//The first circle
float phi0 = M_PI * ((float)(phiIdx+0) * (1.0/(float)«
(m_Stacks)) - 0.5);