Historique des modifications - Message

Message #2867

Sujet: Dessiner un cercle


Type Date Auteur Contenu
Création du message 21-08-2007 08:34:40 katsankat
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;
}

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
216 invités en ligne
membre en ligne: -
RSS Feed