Hello,
I currently have a 2d engine, and I wanted to add lighting to it. I am not well versed in graphical programming (hence posting it in beginners). After following a few tutorials online I have managed to implement lights into my engine (kinda) that being I can draw a 2D plane (which I manually input the vertices) with the lighting effects.
However, when ever I draw a sprite (see code below). The lighting effect is not present, it is the original image. I think, although I am unsure, this may have to do something with LPD3DXSPRITE (what I am using as the actual sprite) I suspect this does not have any vertices hence no normal that are required for the light effect to be shown. Is this correct?
If it is correct how would I go about correcting this? Would I have to create vertices for each sprite image and add a texture to it? If this is the case I would appreciate some guidance on how to do this. If it is not correct, what is my problem, I have been scratching my head for a while now :/
Sprite drawing:
void Graphics::drawSpriteWithOffset(const SpriteData &spriteData,
int x, int y, COLOR_ARGB colour)
{
/**Stuff*/
D3DXMATRIX matrix;
D3DXMatrixTransformation2D(&matrix, NULL, 0.0f, &scaling, &spriteCenter, (float) (spriteData.angle), &translate);
sprite->SetTransform(&matrix);
sprite->Draw(spriteData.texture,&spriteData.rect,NULL,NULL,colour);
}
Creating the Light:
void Graphics::init_light(void)
{
D3DLIGHT9 light; // create the light struct
D3DMATERIAL9 material; // create the material struct
ZeroMemory(&light, sizeof(light)); // clear out the light struct for use
light.Type = D3DLIGHT_DIRECTIONAL; // make the light type 'directional light'
light.Diffuse = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); // set the light's color
light.Direction = D3DXVECTOR3(-1.0f, 0.0f, 1.0f);
device3d->SetLight(0, &light); // send the light struct properties to light #0
device3d->LightEnable(0, TRUE); // turn on light #0
ZeroMemory(&material, sizeof(D3DMATERIAL9)); // clear out the struct for use
material.Diffuse = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // set diffuse color to white
material.Ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); // set ambient color to white
device3d->SetMaterial(&material); // set the globably-used material to &material
}
Any help is appreciated,