Naja, zu dem Code sage ich lieber nix
So sollte es schon eher funktionieren, aber nicht ausprobiert, ich weiß auch nicht genau, ob der Code für die Fläche so stimmt (oder ob überhaupt estwas stimmt, sollte aber).
Code:
core::line3d<f32>Linie=0;
while(device->run())
{
driver->beginScene(true, true, SColor(255,100,101,140));
Linie=smgr->getSceneCollisionManager()->getRayFromScreenCoordinates(core::position2d<s32>(100,100), camera);
core::plane3df Flaeche(core::vector3df(0, 0, 0), core::vector3df(0, 1, 0));
core::vector3df Kollision;
if(Flaeche.getIntersectionWithLimitedLine(Linie.start, Linie.end, Kollision)=true)
{
PointerNode->setPosition(Kollision);
}
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
Anmerkungen:
- Wichtig ist, dass du erst die Position berechnest, und danach per ISceneManager->drawAll() zeichnest, sonst wird PointerNode mit einem Frame Verzögerung versetzt.
- Für "camera" musst du den Namen deiner Kamera einsetzen.
- das erste Argument bei der Erstellung von Flaeche kennzeichnet afaik den Ursprungspunkt der Fläche, das zweite die Richtung. PointerNode wird immer an der Y-Koordinate der Fläche erscheinen, du kannst die Höhe verändern, indem du zB Werte wie "Flaeche(core::vector3df(0, 5, 0), core::vector3df(0, 1, 0));" einsetzt.
- Linie ist kein Pointer, sondern eine normale Variable.
- Du musst die in der Dokumentation aufkommenden Typnamen schon durch echte Variablen ersetzen
Die Mausposition bekommst du durch gui::ICursorControl::getPosition(), einen Pointer vom Typ gui::ICursorControl bekommst du durch device->getCursorControl(). Versuch da mal aus der Dokumentation dir deinen Code zu schreiben
http://irrlicht.sourceforge.net/docu/cl ... ntrol.html