Historique des modifications - Message

Message #6077

Sujet: Dessiner un cercle


TypeDateAuteurContenu
Dernière modification28-02-2009 03:33:26Magun
bon je suis partie de la méthode d'izguit pour faire une sphèrewink
euh ... faut juste remplacé le "((btSphereShape*)Shape)->getRadius()" par le radius que vous voulezsmile
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 voiloubig_smile

ps : je voudrais rajouté la rotation, mais je ne sais pas trop comment mis prendre ...hmm
Création du message28-02-2009 00:26:08Magun
bon je suis partie de la méthode d'izguit pour faire une sphèrewink
euh ... faut juste remplacé le "((btSphereShape*)Shape)->getRadius()" par le radius que vous voulezsmile
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 voiloubig_smile

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

Retour

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
98 invités en ligne
membre en ligne: -
RSS Feed