Hallo zusammen!
Ich arbeite an einer Simulation, die einen Satelliten um die Erde kreisen lässt. Da es für den Anwender wichtig ist zu sehen, ob das MJD richtig in das JulianDate umgerechnet und alle Transformationsmatrizen und Positionen der Himmelskörper richtig berechnet werden, soll das Modell entsprechend der Sonnenposition beleuchtet werden. Genau da liegt das Problem, wenn ich Burningsvideo nehme wird die Kugel korrekt dargestellt, bei OpenGL/Direct3D habe ich einen scharfen Schatten. Ich habe schon alle möglichen Beleuchtungs-Optionen durchprobiert und auch schon getestet, ob es daran liegt dass die Normalen nicht normiert sind, weis jedoch nicht weiter.
Der entsprechende Code (für das Problem unwichtiges Zeug weg gelassen):
Code:
int main()
{
EventReceiver receiver;
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
IrrlichtDevice* device = createDevice(driverType, core::dimension2d<u32>(800, 600), 16, false, false, false, &receiver);
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
ISceneNode* mainNode = smgr->addEmptySceneNode(0);
ICameraSceneNode* camNode = smgr->addCameraSceneNode(mainNode, vector3df(15000,0,0), vector3df(0,0,0));
receiver.setNode(camNode,device);
ISceneNode* systemNode = smgr->addEmptySceneNode(mainNode);
smgr->setShadowColor();
smgr->setAmbientLight(SColorf(0.1f,0.1f,0.1f,0.0f));
ILightSceneNode* lightNode = smgr->addLightSceneNode(0,vector3df(300000,0,0),SColorf(1.0f,1.0f,1.0f,0.0f),10000000);
IMeshSceneNode* earth = smgr->addSphereSceneNode (6371.0f,100,systemNode,-1,core::vector3df(0,0,0));
earth->setMaterialTexture(0, driver->getTexture("earth_high_res.bmp"));
int lastFPS = -1;
while(device->run())
{
receiver.newFrame();
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
device->drop(); return 0;
}
Burningsvideo:
OpenGL/Direct3D:
Über mögliche Lösungen des Problems würde ich mich sehr freuen.
MfG, Lufti