Historique des modifications - Message

Message #2749

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


TypeDateAuteurContenu
Création du message25-07-2007 20:27:46ZeroZero
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

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