# Sphere generation problem

This topic is 3553 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I'm attempting to generate Sphere Vertex data based on the sphere games Sky Domes pdf. found at http://www.spheregames.com/files/SkyDomesPDF.zip if i implement the code in the pdf for generating a dome it works, however the dome is on its side. This is easy to fix. The second problem is when i try to extend the Dome into a full Sphere You can see the problem here Basically instead of extending the sphere it goes back over the Dome. I use the following method to determine the vertices for the dome
	m_pVerts = new sVertexXYZCUV[m_iNumberOfVertices];

int n = 0;
for(int iPhi = -90; iPhi < 90; iPhi += m_idPhi)
{
for(int iTheta = 0; iTheta < 360; iTheta += m_idTheta)
{
m_pVerts[n].fX = m_fRadius * sinf(iPhi * DTOR) * cosf(DTOR * iTheta);
m_pVerts[n].fY = m_fRadius * sinf(iPhi * DTOR) * sinf(DTOR * iTheta);
m_pVerts[n].fZ = m_fRadius * cosf(iPhi * DTOR);
n++;

m_pVerts[n].fX = m_fRadius * sinf((iPhi + m_idPhi) * DTOR) * cosf(iTheta * DTOR);
m_pVerts[n].fY = m_fRadius * sinf((iPhi + m_idPhi) * DTOR) * sinf(iTheta * DTOR);
m_pVerts[n].fZ = m_fRadius * cosf((iPhi + m_idPhi) * DTOR);
n++;

m_pVerts[n].fX = m_fRadius * sinf(DTOR * iPhi) * cosf(DTOR * (iTheta + m_idTheta));
m_pVerts[n].fY = m_fRadius * sinf(DTOR * iPhi) * sinf(DTOR * (iTheta + m_idTheta));
m_pVerts[n].fZ = m_fRadius * cosf(DTOR * iPhi);
n++;

if(iPhi > -90 && iPhi < 90)
{
m_pVerts[n].fX = m_fRadius * sinf((iPhi + m_idPhi) * DTOR) * cosf(DTOR * (iTheta + m_idTheta));
m_pVerts[n].fY = m_fRadius * sinf((iPhi + m_idPhi) * DTOR) * sinf(DTOR * (iTheta + m_idTheta));
m_pVerts[n].fZ = m_fRadius * cosf((iPhi + m_idPhi) * DTOR);
n++;
}
}
}


DTOR is defined as D3DX_PI / 180.0f This is me attempting to implement the latitude / longitude method :S [Edited by - LordFallout on March 20, 2008 9:42:11 AM]

##### Share on other sites
I managed to sort the orientation problem by switching the Y and Z co-ordinate calculations.

Also, i managed to make a whole sphere, there still exists a problem thought

I'm not sure if its clear or not from this photo but the vertices are mixed up towards the poles.

This was the semi solution
	m_pVerts = new sVertexXYZCUV[m_iNumberOfVertices];	int n = 0;	for(float fPhi = -90; fPhi < 90; fPhi += m_fdPhi)	{		for(float fTheta = 0; fTheta < 360; fTheta += m_fdTheta)		{			m_pVerts[n].fX = m_fRadius * sinf(fPhi * DTOR) * cosf(DTOR * fTheta);			m_pVerts[n].fY = m_fRadius * cosf(fPhi * DTOR);			if(fPhi < 0)				m_pVerts[n].fY = -m_pVerts[n].fY;			m_pVerts[n].fZ = m_fRadius * sinf(fPhi * DTOR) * sinf(DTOR * fTheta);			n++;			m_pVerts[n].fX = m_fRadius * sinf((fPhi + m_fdPhi) * DTOR) * cosf(fTheta * DTOR);			m_pVerts[n].fY = m_fRadius * cosf((fPhi + m_fdPhi) * DTOR);			if(fPhi < 0)				m_pVerts[n].fY = -m_pVerts[n].fY;			m_pVerts[n].fZ = m_fRadius * sinf((fPhi + m_fdPhi) * DTOR) * sinf(fTheta * DTOR);			n++;						m_pVerts[n].fX = m_fRadius * sinf(fPhi * DTOR) * cosf(DTOR * (fTheta + m_fdTheta));			m_pVerts[n].fY = m_fRadius * cosf(fPhi * DTOR);			if(fPhi < 0)				m_pVerts[n].fY = -m_pVerts[n].fY;			m_pVerts[n].fZ = m_fRadius * sinf(fPhi * DTOR) * sinf(DTOR * (fTheta + m_fdTheta));			n++;						m_pVerts[n].fX = m_fRadius * sinf((fPhi + m_fdPhi) * DTOR) * cosf(DTOR * (fTheta + m_fdTheta));			m_pVerts[n].fY = m_fRadius * cosf((fPhi + m_fdPhi) * DTOR);			if(fPhi < 0)				m_pVerts[n].fY = -m_pVerts[n].fY;			m_pVerts[n].fZ = m_fRadius * sinf((fPhi + m_fdPhi) * DTOR) * sinf(DTOR * (fTheta + m_fdTheta));			n++;		}	}

The initial problem arose because the cos of a number would be the same no matter if it was positive or negative, hence the solution to check if the number is negative or not, i think there might have been a better solution, if anyone notices it, please post for me. I'm going to continue my search.

##### Share on other sites
wow, i've spent the past five hours doing nothing, :) the fix was to
	for(float fPhi = 0; fPhi < 180; fPhi += m_fdPhi)	{

	for(float fPhi = -90; fPhi < 90; fPhi += m_fdPhi)	{

Maybe that'll help someone else out in the future :)

Now onto the colouring.

##### Share on other sites

This topic is 3553 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Create an account

Register a new account

• ### Forum Statistics

• Total Topics
628644
• Total Posts
2984010

• 9
• 9
• 10
• 21
• 20