Final diffuse color should be calculated from Light.DiffuseColor * Material.DiffuseColor. Yet if I set light diffuse to rgb[1,1,1] and material diffuse to rgb[1,0,0] resulting color is still white. Am I doing something wrong?
Here is test case:
Code: Select all
#include <irrlicht.h>
using namespace irr;
int main()
{
IrrlichtDevice *device = createDevice(video::EDT_OPENGL,
core::dimension2d<u32>(640, 480), 16, false, false, false, 0);
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
scene::ISceneNode *sphere = smgr->addSphereSceneNode(2.f);
sphere->getMaterial(0).AmbientColor = video::SColor(0, 0, 0, 255);
sphere->getMaterial(0).DiffuseColor = video::SColor(255, 0, 0, 255);
sphere->getMaterial(0).SpecularColor = video::SColor(0, 0, 0, 255);
sphere->getMaterial(0).Shininess = 0.f;
scene::ICameraSceneNode* camera = smgr->addCameraSceneNode();
camera->setPosition(core::vector3df(0,10,-10));
camera->setTarget(core::vector3df(0,0,0));
scene::ILightSceneNode *light = smgr->addLightSceneNode(0, core::vector3df(-40,80,0));
video::SLight *ldata = &light->getLightData();
ldata->AmbientColor = video::SColorf(0.f, 0.f, 0.f, 0.1f);
ldata->DiffuseColor = video::SColorf(1.f, 1.0f, 1.0f, 1.f);
ldata->SpecularColor = video::SColorf(0.f, 0.f, 0.f, 0.f);
ldata->Attenuation = core::vector3df(1,0,0);
smgr->setAmbientLight(video::SColorf(0.f, 0.f, 0.f, 1.f));
while(device->run())
{
driver->beginScene(true, true, video::SColor(0,200,200,255));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}