Imaginez on a 2 points 3D, comment tracer un cercle dont le centre est l'un des deux points, le cercle passant par l'autre point?
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace gui;
using namespace scene;
using namespace video;
IrrlichtDevice* creer_device()
{
IrrlichtDevice* device = createDevice(EDT_OPENGL, dimension2d<s32>(600,400),
16, false);
if (!device) return NULL;
device->getCursorControl()->setVisible(false);
device->setWindowCaption(L"cercle");
// camera
ISceneManager* smgr = device->getSceneManager();
ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS(0,100.0f,200.0f);
cam->setPosition(vector3df(-20,20,-20));
cam->setTarget(vector3df(1,1,1));
IGUIEnvironment* guienv = device->getGUIEnvironment();
guienv->getSkin()->setFont(guienv->getFont("../../media/fontlucida.png"));
IGUIFont *font = guienv->getSkin()->getFont();
smgr->addTextSceneNode(font, L"x", SColor(255,230,10,10), NULL, vector3df(10,0,0), -1);
smgr->addTextSceneNode(font, L"z", SColor(255,10,10,230), NULL, vector3df(0,0,10), -1);
smgr->addTextSceneNode(font, L"y", SColor(255,10,230,10), NULL, vector3df(0,10,0), -1);
return device;
}
int main()
{
IrrlichtDevice* device = creer_device();
if (!device) return 1;
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
vector3df centre(0,0,0);
vector3df pt1(10,10,10);
f32 rayon = centre.getDistanceFrom(pt1);
f32 precision=3.f, step = 1.f / precision;
while(device->run())
{
if (device->isWindowActive())
{
driver->beginScene(true, true, SColor(255,100,100,240));
SColor couleur(255,255,255,255);
//xyz
driver->draw3DLine(vector3df(0,0,0), vector3df(0,8,0), couleur);
driver->draw3DLine(vector3df(0,0,0), vector3df(8,0,0), couleur);
driver->draw3DLine(vector3df(0,0,0), vector3df(0,0,8), couleur);
//cercle
for (float angle=0.f; angle<2*PI; angle+=step)
{
vector3df pt2(cos(angle)*rayon, sin(angle)*rayon, 0);
pt2 += centre;
driver->draw3DLine(pt1, pt2, couleur);
pt1 = pt2;
}
smgr->drawAll();
driver->endScene();
}
}
device->drop();
return 0;
}