Historique des modifications - Message

Message #8198

Sujet: C++ mes essais moteur de Terrain


Type Date Auteur Contenu
Dernière modification 14-04-2010 16:27:09 Magun
j'ai modifier pas mal le moteur et puis je me suis dit que quelque nouveaux serait intéresser par ma dernier modif :] qui cherche toujours a faire se genre de petit chose :

dans la gestion des quads.h:

Code c++ :


   irr::s32 debug_data; // ajouter la variable

dans la gestion des quads.cpp:

Code c++ :


               // dans le constructeur rajouter
                     debug_data = 0;
                void CQuadNode::setDebugDataVisible(irr::s32 stat)
                {
                    debug_data = stat;
                }
                void CQuadNode::RenderQuad(irr::scene::ISceneManager* mgr , unsigned short FrustumCode)
                {
                  if( m_pParent == NULL ) FrustumCode = 1; //FRUSTUM_INTERSECT;
                  else
                  {
                    if( FrustumCode ) //FRUSTUM_ALLIN
                    {
                        FrustumCode = m_pQuadTerrain->_isVisible(Box);
                        if( !FrustumCode  && m_pParent ) return;
                    }
                  }

                  if( m_pChildren[0] != NULL )
                  {
                      // pas nécessaire et crée un "bug" si l'on puis dire car les quads sont rendue plusieurs fois et se superpose sur le rendue ( visible en EMT_TRANSPARENT_ADD_COLOR )
                      //if( m_pChildren[0] ) m_pChildren[0]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[1] ) m_pChildren[1]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[2] ) m_pChildren[2]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[3] ) m_pChildren[3]->RenderQuad(mgr, FrustumCode );
                  }
                  else
                  {
                        ++m_pQuadTerrain->nQuad;
                        irr::video::SMaterial mat;
                            mat.Lighting = false;

                        irr::video::IVideoDriver* driver = mgr->getVideoDriver();
                        if(debug_data & scene::EDS_NORMALS)
                        {
                            core::vector3df normalizedNormal;
                            const f32 DebugNormalLength = 20.f;
                            const video::SColor DebugNormalColor(255,255,140,0);

                            const scene::IMeshBuffer* mb = mbuffer;
                            const u32 vSize = video::getVertexPitchFromType(mb->getVertexType());
                            const video::S3DVertex* v = ( const video::S3DVertex*)mb->getVertices();
                            const bool normalize = mb->getMaterial().NormalizeNormals;

                            driver->setMaterial(mat);
                            for (u32 i=0; i != mb->getVertexCount(); ++i)
                            {
                                normalizedNormal = v->Normal;
                                if (normalize) normalizedNormal.normalize();
                                driver->draw3DLine(v->Pos, v->Pos + (normalizedNormal * DebugNormalLength), DebugNormalColor);
                                v = (const video::S3DVertex*) ( (u8*) v+vSize );
                            }
                        }
                        if(Debug || debug_data & scene::EDS_BBOX_BUFFERS)
                        {
                            mat.FogEnable = false;
                            driver->setMaterial(mat);
                            driver->draw3DBox(Box, video::SColor(255,0,255,0));
                        }
                        if(debug_data & scene::EDS_MESH_WIRE_OVERLAY)
                        {
                            mat.Wireframe = true;
                            driver->setMaterial(mat);
                            driver->drawIndexedTriangleList(&mbuffer->Vertices[0],mbuffer->getVertexCount(),&mbuffer->Indices[0],mbuffer->getIndexCount()/3 );
                        }
                        mat = Material;
                        if(debug_data & scene::EDS_HALF_TRANSPARENCY) mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
                        driver->setMaterial(mat);
                        driver->drawIndexedTriangleList(&mbuffer->Vertices[0],mbuffer->getVertexCount(),&mbuffer->Indices[0],mbuffer->getIndexCount()/3 );
                  }
                }
et dans CTerrainNode.cpp

Code c++ :


                void CTerrainNode::setDebugDataVisible(s32 dbg)
                {
                    DebugDataVisible = dbg;
                    for(unsigned short j=0 ; j<max_grille; ++j)
                        grille[j]->setDebugDataVisible(dbg);
                }

CTerrainNode.h

Code c++ :


     virtual void setDebugDataVisible(s32);


par contre je n'est toujours pas trouver d'où venais le problème avec les lights ... vraiment moche le rendue =S
un petit rendue de mon éditeur, par ce que c'est petit nouveaux vont pas trouver à quoi correspond se code wink

bon j'avoue tout les debug_mode ensemble sa fait un peut moche mais bon ses pour montré ...
ps: éviter de mettre la vision des normals sa pompe .... ... beacoup !
Création du message 14-04-2010 16:19:21 Magun
j'ai modifier pas mal le moteur et puis je me suis dit que quelque nouveaux serait intéresser par ma dernier modif :] qui cherche toujours a faire se genre de petit chose :

dans la gestion des quads.h:

Code c++ :


   irr::s32 debug_data; // ajouter la variable

dans la gestion des quads.cpp:

Code c++ :


               // dans le constructeur rajouter
                     debug_data = 0;
                void CQuadNode::setDebugDataVisible(irr::s32 stat)
                {
                    debug_data = stat;
                }
                void CQuadNode::RenderQuad(irr::scene::ISceneManager* mgr , unsigned short FrustumCode)
                {
                  if( m_pParent == NULL ) FrustumCode = 1; //FRUSTUM_INTERSECT;
                  else
                  {
                    if( FrustumCode ) //FRUSTUM_ALLIN
                    {
                        FrustumCode = m_pQuadTerrain->_isVisible(Box);
                        if( !FrustumCode  && m_pParent ) return;
                    }
                  }

                  if( m_pChildren[0] != NULL )
                  {
                      // pas nécessaire et crée un "bug" si l'on puis dire car les quads sont rendue plusieurs fois et se superpose sur le rendue ( visible en EMT_TRANSPARENT_ADD_COLOR )
                      //if( m_pChildren[0] ) m_pChildren[0]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[1] ) m_pChildren[1]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[2] ) m_pChildren[2]->RenderQuad(mgr, FrustumCode );
                      //if( m_pChildren[3] ) m_pChildren[3]->RenderQuad(mgr, FrustumCode );
                  }
                  else
                  {
                        ++m_pQuadTerrain->nQuad;
                        irr::video::SMaterial mat;
                            mat.Lighting = false;

                        irr::video::IVideoDriver* driver = mgr->getVideoDriver();
                        if(debug_data & scene::EDS_NORMALS)
                        {
                            core::vector3df normalizedNormal;
                            const f32 DebugNormalLength = 20.f;
                            const video::SColor DebugNormalColor(255,255,140,0);

                            const scene::IMeshBuffer* mb = mbuffer;
                            const u32 vSize = video::getVertexPitchFromType(mb->getVertexType());
                            const video::S3DVertex* v = ( const video::S3DVertex*)mb->getVertices();
                            const bool normalize = mb->getMaterial().NormalizeNormals;

                            driver->setMaterial(mat);
                            for (u32 i=0; i != mb->getVertexCount(); ++i)
                            {
                                normalizedNormal = v->Normal;
                                if (normalize) normalizedNormal.normalize();
                                driver->draw3DLine(v->Pos, v->Pos + (normalizedNormal * DebugNormalLength), DebugNormalColor);
                                v = (const video::S3DVertex*) ( (u8*) v+vSize );
                            }
                        }
                        if(Debug || debug_data & scene::EDS_BBOX_BUFFERS)
                        {
                            mat.FogEnable = false;
                            driver->setMaterial(mat);
                            driver->draw3DBox(Box, video::SColor(255,0,255,0));
                        }
                        if(debug_data & scene::EDS_MESH_WIRE_OVERLAY)
                        {
                            mat.Wireframe = true;
                            driver->setMaterial(mat);
                            driver->drawIndexedTriangleList(&mbuffer->Vertices[0],mbuffer->getVertexCount(),&mbuffer->Indices[0],mbuffer->getIndexCount()/3 );
                        }
                        mat = Material;
                        if(debug_data & scene::EDS_HALF_TRANSPARENCY) mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
                        driver->setMaterial(mat);
                        driver->drawIndexedTriangleList(&mbuffer->Vertices[0],mbuffer->getVertexCount(),&mbuffer->Indices[0],mbuffer->getIndexCount()/3 );
                  }
                }
et dans CTerrainNode.cpp

Code c++ :


                void CTerrainNode::setDebugDataVisible(s32 dbg)
                {
                    DebugDataVisible = dbg;
                    for(unsigned short j=0 ; j<max_grille; ++j)
                        grille[j]->setDebugDataVisible(dbg);
                }

CTerrainNode.h

Code c++ :


     virtual void setDebugDataVisible(s32);


par contre je n'est toujours pas trouver d'où venais le problème avec les lights ... vraiment moche le rendue =S
un petit rendue de mon éditeur, par ce que c'est petit nouveaux vont pas trouver à quoi correspond se code wink

bon j'avoue tout les debug_mode ensemble sa fait un peut moche mais bon ses pour montré ...
ps: éviter de mettre la vision des normals sa pompe .... ... beacoup !

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