Historique des modifications - Message

Message #2749

Sujet: C++ Irrlicht 1.3 Moteur de Terrain avec Vertex Alpha


Type Date Auteur Contenu
Création du message 25-07-2007 20:27:46 ZeroZero
Salut,

je viens de trouver le bug dans la fonction de calcul des normal de Copland, voici un extrait de son code avec en commentaire la partie qui était incorrect et en dessous la correction :
 // bottom right
            if (x<Size-1 && z<Size-1)
            {
                a = pMeshBuffer->Vertices[x*Size+z+1].Pos;
                //b = pMeshBuffer->Vertices[x*Size+z+1].Pos;
                b = pMeshBuffer->Vertices[x*Size+z].Pos;
                c = pMeshBuffer->Vertices[(x+1)*Size+z+1].Pos;
                b -= a;
                c -= a;
                t = b.crossProduct ( c );
                t.normalize ( );
                normal += t;

c'est la valeur de b qui était incorrect.

Je pense qu'il y a encore un autre bug car j'ai toujour des normal qui sont de trait grand très sous la map, je vais essayer de trouver d'ou ca vient si je peux.

Voila, pour l'affichage des normal, je vais te filer mon code mais bon je debute alors je suis pas sur que ce que je vais mettre soit un exemple a prendre :
// normals
	if (DebugDataVisible == scene::EDS_NORMALS || DebugDataVisible == scene::EDS_FULL)
	{
        video::SMaterial m;
		m.Lighting = false;
		Driver->setMaterial(m);
        
        for (u32 i=0;i<NbsTiles;i++)
        {
            if (CTTileBuffer[i] != NULL)
            {
                if( frustum->getBoundingBox().intersectsWithBox(CTTileBuffer[i]->getBoundingBox())==true)
                {
                    f64 ActualDistance = CTTileBuffer[i]->BoundingBox.getCenter().getDistanceFrom(Pos);
                    if(ActualDistance < RenderDistance)
                    {
                        video::SColor c ( 255, 0 ,0, 255 );
                        for(u16 j = 0 ; j < CTTileBuffer[i]->getVertexCount(); j++)
                        {
                            video::S3DVertex2TCoords v = CTTileBuffer[i]->Vertices[j];
                            core::vector3df h = v.Normal*100;
                            Driver->draw3DLine ( v.Pos, v.Pos + h, c );
                        }
                    }
                }
            }
        }
	}

j'espere que ca va t'aider.

A+

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