Sign in to follow this  

D3DXCreateSphere and Texture

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm trying to do a few hours texturing my sphere, but it's happening a strange error. (sorry my poor english)
radius = 3.0f
slices = 32
stacks = 32

My code:
[CODE]void LoadSphere()
{
// create the sphere mesh
D3DXCreateSphere(devices.d3ddev, radius, slices, stacks, &pMesh, NULL);
// exist texture to load
if(!fileTexture.empty())
{
HRESULT hr = D3D_OK;

hr = D3DXCreateTextureFromFile(devices.d3ddev, fileTexture.c_str(), &sphereTexture);
if(FAILED(hr))
{
Log::Instance().AddEntry("Error ir loading texture " + fileTexture);
}
else
{
LPD3DXMESH cloneMesh = NULL;
if(FAILED(pMesh->CloneMeshFVF(NULL, SPHEREFVFtex, devices.d3ddev, &cloneMesh)))
{
//Reset Clone Mesh
cloneMesh = NULL;
Log::Instance().AddEntry("Error in CloneMeshFVF");
}
//Create Texture Cordinates
if(cloneMesh!=NULL)
{
//Release Previous Mesh
pMesh->Release();
//Create new Vertex Buffer
int numVertices = cloneMesh->GetNumVertices();
LPDIRECT3DVERTEXBUFFER9 pVB=NULL;
SDX_CUSTOMVERTEXtex* pVer = NULL;
cloneMesh->GetVertexBuffer(&pVB);
pVB->Lock(0,0,(VOID**)&pVer,0);

DWORD n;
for(n = 0; n < numVertices; n++)
{
float u,v;
Convert(pVer[n].X, pVer[n].Y, pVer[n].Z, radius, u, v);
pVer[n].Tu = u;
pVer[n].Tv = v;
}
pVB->Unlock();
//Set pMesh to New Mesh
pMesh = cloneMesh;
hasTexture = true;
}
else
{
hasTexture = false;
}
}
}
}
Convert(float x,float y,float z,float r,float& u,float& v)
{
float q;
float q2;
q = atan2(z,x);
u = q / (2.0f * 3.1415f);
q2 = asin(y/r);
v = (1.0f-q2/(3.1415f/2.0f))/2.0f;
if(u > 1.0)
u = 1.0;
}[/CODE]

Render:
[CODE]if(hasTexture)
{
devices.d3ddev->SetFVF(SPHEREFVFtex);
devices.d3ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
devices.d3ddev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
devices.d3ddev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
// Set texture
devices.d3ddev->SetTexture(0, sphereTexture) ;
}
// draw the sphere
pMesh->DrawSubset(0);[/CODE]

Img:
[img]http://i49.tinypic.com/qys51d.jpg[/img]


The texture is attached

Thanks Edited by VitaliBR

Share this post


Link to post
Share on other sites
I had the same problem some years ago, but with Jupiter rather than Earth. ;) If memory serves I ended up dumping D3DXCreateSphere and just made my own sphere code instead. I can try find it later on this evening and post it for you if you're interested.

Share this post


Link to post
Share on other sites
Rather than clog up the forum with this, I've pastebinned it: [url="http://pastebin.com/GZV8mbbC"]http://pastebin.com/GZV8mbbC[/url]

The vertex format I used was position (3 floats), normal (3 floats) and texcoords (2 floats) - which I've called 's' and 't' rather than 'u' and 'v', showing my OpenGL background (I'm actually fairly certain that I pulled the original from MESA's implementation of GLU quadrics).

Disclaimer: this is OLD code for me so don't be expecting it to have much in the way of modern coding styles, OK. ;) Edited by mhagain

Share this post


Link to post
Share on other sites
[quote name='mhagain' timestamp='1344453930' post='4967494']
Rather than clog up the forum with this, I've pastebinned it: [url="http://pastebin.com/GZV8mbbC"]http://pastebin.com/GZV8mbbC[/url]

The vertex format I used was position (3 floats), normal (3 floats) and texcoords (2 floats) - which I've called 's' and 't' rather than 'u' and 'v', showing my OpenGL background (I'm actually fairly certain that I pulled the original from MESA's implementation of GLU quadrics).

Disclaimer: this is OLD code for me so don't be expecting it to have much in the way of modern coding styles, OK. ;)
[/quote]


thank you! how its function VectorNormalize?

Why did you leave the FVF in CreateVertexBuffer to 0? Edited by VitaliBR

Share this post


Link to post
Share on other sites

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

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this