Historique des modifications - Message

Message #6077

Sujet: Dessiner un cercle


Type Date Auteur Contenu
Dernière modification 28-02-2009 03:33:26 Magun
bon je suis partie de la méthode d'izguit pour faire une sphère wink
euh ... faut juste remplacé le "((btSphereShape*)Shape)->getRadius()" par le radius que vous voulez smile
il y a le principe pour les 3 axe m'enfin je trouve le dernier inutile ..... ( Y )
        float precision;
        irr::s32 dist = position.getDistanceFrom(device->getSceneManager()->getActiveCamera()->getPosition());//position correspond .. ba a un vector3df de la position du node
        if(dist<99)                  precision = .2f;
        else if(dist>100&&dist<301)  precision = .5f;
        else if(dist>300&&dist<801)  precision = 1.f;
        else if(dist>800&&dist<1501) precision = 1.5f;
        else if(dist>1500&&dist<2501)precision = 2.5f;
        else precision = 3.f;

                    float radius = ((btSphereShape*)Shape)->getRadius()+.5f;
                    for(float sangle=.2f;sangle<PI; sangle += radius/8.33333325)//nombre de tour équivalent a la taille de l'obj
                    {
                        irr::core::vector3df start;
                        float _sin = sin(sangle);
                            end.X = ((cos(.0f)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((sin(.0f)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((radius*cos(sangle))+position.Z+rotation.Z);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//X
                        {
                            end.X = ((cos(angle)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((sin(angle)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((radius*cos(sangle))+position.Z+rotation.Z);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                        end.Y = ((cos(.0f)*radius*_sin)+position.Y+rotation.Y);
                        end.Z = ((sin(.0f)*radius*_sin)+position.Z+rotation.Z);
                        end.X = ((radius*cos(sangle))+position.X+rotation.X);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//Z
                        {
                            end.Y = ((cos(angle)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((sin(angle)*radius*_sin)+position.Z+rotation.Z);
                            end.X = ((radius*cos(sangle))+position.X+rotation.X);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                        end.X = ((sin(.0f)*radius*_sin)+position.X+rotation.X);
                        end.Y = ((radius*cos(sangle))+position.Y+rotation.Y);
                        end.Z = ((cos(.0f)*radius*_sin)+position.Z+rotation.Z);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//Y
                        {
                            end.X = ((sin(angle)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((radius*cos(sangle))+position.Y+rotation.Y);
                            end.Z = ((cos(angle)*radius*_sin)+position.Z+rotation.Z);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                    }

voili voilou big_smile

ps : je voudrais rajouté la rotation, mais je ne sais pas trop comment mis prendre ... hmm
Création du message 28-02-2009 00:26:08 Magun
bon je suis partie de la méthode d'izguit pour faire une sphère wink
euh ... faut juste remplacé le "((btSphereShape*)Shape)->getRadius()" par le radius que vous voulez smile
il y a le principe pour les 3 axe m'enfin je trouve le dernier inutile ..... ( Y )
        float precision;
        irr::s32 dist = position.getDistanceFrom(device->getSceneManager()->getActiveCamera()->getPosition());//position correspond .. ba a un vector3df de la position du node
        if(dist<99)                  precision = .2f;
        else if(dist>100&&dist<301)  precision = .5f;
        else if(dist>300&&dist<801)  precision = 1.f;
        else if(dist>800&&dist<1501) precision = 1.5f;
        else if(dist>1500&&dist<2501)precision = 2.5f;
        else precision = 3.f;

                    float radius = ((btSphereShape*)Shape)->getRadius()+.5f;
                    for(float sangle=.2f;sangle<PI; sangle += radius/8.33333325)//nombre de tour équivalent a la taille de l'obj
                    {
                        irr::core::vector3df start;
                        float _sin = sin(sangle);
                            end.X = ((cos(.0f)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((sin(.0f)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((radius*cos(sangle))+position.Z+rotation.Z);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//X
                        {
                            end.X = ((cos(angle)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((sin(angle)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((radius*cos(sangle))+position.Z+rotation.Z);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                        end.Y = ((cos(.0f)*radius*_sin)+position.Y+rotation.Y);
                        end.Z = ((sin(.0f)*radius*_sin)+position.Z+rotation.Z);
                        end.X = ((radius*cos(sangle))+position.X+rotation.X);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//Z
                        {
                            end.Y = ((cos(angle)*radius*_sin)+position.Y+rotation.Y);
                            end.Z = ((sin(angle)*radius*_sin)+position.Z+rotation.Z);
                            end.X = ((radius*cos(sangle))+position.X+rotation.X);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                        end.X = ((sin(.0f)*radius*_sin)+position.X+rotation.X);
                        end.Y = ((radius*cos(sangle))+position.Y+rotation.Y);
                        end.Z = ((cos(.0f)*radius*_sin)+position.Z+rotation.Z);
                        begin = end;
                        for(float angle  = .0f;angle<PI*2.08f; angle += precision)//Y
                        {
                            end.X = ((sin(angle)*radius*_sin)+position.X+rotation.X);
                            end.Y = ((radius*cos(sangle))+position.Y+rotation.Y);
                            end.Z = ((cos(angle)*radius*_sin)+position.Z+rotation.Z);
                            device->getVideoDriver()->draw3DLine(begin,end,debugColor);
                            begin = end;
                        }
                    }

voili voilou big_smile

ps : je voudrais rajouté la rotation, mais je ne sais pas trop comment mis prendre ... hmm

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
129 invités en ligne
membre en ligne: -
RSS Feed