Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8328 in orxonox.OLD for branches/terrain/src/lib/graphics/importer


Ignore:
Timestamp:
Jun 12, 2006, 5:17:14 PM (18 years ago)
Author:
ponder
Message:
  • Renamed Terrain into TerrainEntity in order to avoid conflicts between the importer/terrain class and the world_entities/terrain.
  • Changed TerrainEntity to support the new terrain class.
Location:
branches/terrain/src/lib/graphics/importer/terrain
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/terrain/src/lib/graphics/importer/terrain/frustum.h

    r8319 r8328  
    1717#include "types.h"
    1818#include "glincl.h"
    19 
     19#include <stdio.h>
    2020#define m( _row,_col )  _m[_col*4+_row-5]
    2121
     22#define CHECK_GL_ERROR( _d ) do { \
     23        GLenum __err = glGetError(); \
     24        if ( __err != GL_NO_ERROR ) \
     25                printf( "check%s: %s\n", _d, (char*)gluErrorString( __err ) );\
     26        }\
     27        while ( 0 )
     28       
    2229/**
    2330 * Code borrowed from Lighthouse 3D
  • branches/terrain/src/lib/graphics/importer/terrain/terrain.cc

    r8321 r8328  
    33#include "terrain_page.h"
    44#include "glincl.h"
     5#include "util/loading/resource_manager.h"
     6#include "debug.h"
    57
    68#ifdef HAVE_SDL_SDL_IMAGE_H
     
    1214void Terrain::build()
    1315{
    14         SDL_Surface *tmpData = IMG_Load( heightmapSource.c_str() );
     16        ResourceManager *MANAGER = ResourceManager::getInstance();
     17        std::string full = MANAGER->getFullName( heightmapSource );
     18        SDL_Surface *tmpData = IMG_Load( full.c_str() );
    1519        if ( !tmpData ) {
    16                 printf( "sorry, can't load!!!\n" );
     20                PRINTF(0)( "I' sorry, I can't load %s\n", full.c_str() );
    1721                return;
    1822        }               
     
    2529        memcpy( heightfield.data, tmpData->pixels, sizeof(UByte)*dataSize );
    2630        SDL_FreeSurface( tmpData );
    27         //TODO: Check for modulo!
     31        //TODO: Perform some checks...
    2832        pagesX = (heightfield.width/(pageSize-1) );
    2933        pagesZ = (heightfield.height/(pageSize-1) );
    30         tex = new Texture( lightmapSource );
    31        
     34        tex = (Texture*)MANAGER->load( lightmapSource );
     35       
     36        //TODO: Determine layer visibility!
    3237        printf( "creating terrain pages ( %d, %d )...", pagesX, pagesZ );
    3338        pages = new pTerrainPage[pagesX*pagesZ];       
     
    7277        newPage->setPosition( Triple( scale.x*_xOffset, 0.0f, scale.z*_zOffset ) );
    7378        newPage->calculateErrors();
    74        
    75         //newPage->calculateMinMax();
    7679        return newPage;
    7780}
     
    8184//              through the activePages list is sufficient to remove all invisible
    8285//              pages.
     86//              DONE
    8387void Terrain::determineVisiblePages( pTerrainQuad _node )
    8488{
     
    111115void Terrain::draw( )
    112116{
     117        glGetError();
    113118        pTerrainPage page = NULL;
    114        
    115119        frustum->extractPlanes();
    116        
    117120        glEnableClientState( GL_VERTEX_ARRAY );
     121
    118122        glEnableClientState( GL_TEXTURE_COORD_ARRAY );
    119123        glEnable( GL_TEXTURE_2D );
    120124        glEnable( GL_DEPTH_TEST );
    121         glEnable( GL_CULL_FACE );
    122 
    123        
     125        glDisable( GL_CULL_FACE );
    124126        glBindTexture( GL_TEXTURE_2D, tex->getTexture() );
    125127        glDisable( GL_LIGHTING );
    126 
    127128        glEnable( GL_COLOR_MATERIAL );
    128129        glColor3f( 1.0f, 1.0f, 1.0f );
    129130        cullCount = 0;
    130        
    131131        // Lets see which pages are visible.
    132132        determineVisiblePages( root );
     
    134134        int count = 0;
    135135        page = activePages;     
    136        
    137136        while ( page ) {
    138137                if ( !page->isActive() ) {
    139138                        pTerrainPage tmp = page;
    140139                        page = tmp->getNext();
     140                        tmp->setVisibility( false );
    141141                        tmp->deactivate();
     142                        deactivatedCount++;
    142143                        continue;
    143144                }       
     
    149150                page = page->getNext();
    150151        }
    151        
    152152        //printf( "%d pages activated, %d pages deactivated\n", activatedCount, deactivatedCount );
    153153        activatedCount = 0; deactivatedCount = 0;
    154         //float percentage = (float)cullCount/(float)(pagesX*pagesZ)*100.0f;
     154        float percentage = (float)cullCount/(float)(pagesX*pagesZ)*100.0f;
    155155        //printf( "culled %f%% terrain pages away\n",  percentage );
    156156}
     
    205205                for ( int z = 0; z < _height; ++z ) {
    206206                        pTerrainPage page = getPage( _x0+x, _z0+z );
    207                         page->chooseLOD( );
    208                         page->show( );
     207                        page->setVisibility( true );                   
     208                        page->chooseLOD();
     209
    209210                }
    210211        }
  • branches/terrain/src/lib/graphics/importer/terrain/terrain.h

    r8319 r8328  
    6767       
    6868                void getAltitude( Triple& _alt, Triple& _normal );
     69               
    6970                void showPages( int _x0, int _z0, int _width, int _height );
    7071                                       
     
    106107                inline float getAltitude( int _x, int _z ) const;
    107108               
    108                 inline void setLightmap( std::string &_lightmap )
     109                inline void setLightmap( const std::string &_lightmap )
    109110                {
    110111                        lightmapSource = _lightmap;
    111112                }
    112                 inline void setHeightmap( std::string &_heightmap )
     113                inline void setHeightmap( const std::string &_heightmap )
    113114                {
    114115                        heightmapSource = _heightmap;
     
    180181inline float Terrain::getAltitude( int _x, int _z ) const
    181182{
    182         if ( _x > heightfield.width || _z > heightfield.height )
    183                 return 0.0f;
    184183        return heightfield.data[heightfield.pitch*_z+_x]/255.0f;       
    185184}
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_page.cc

    r8321 r8328  
    1010 
    1111        ### File Specific:
    12         main programmer: Marco Biasini
     12        main-programmer: Marco Biasini
    1313 
    1414 */
     
    1919#include <math.h>
    2020
    21 #define CHECK_GL_ERROR() do { \
     21#define CHECK_GL_ERROR( _d ) do { \
    2222        GLenum __err = glGetError(); \
    2323        if ( __err != GL_NO_ERROR ) \
    24                 printf( (char*)gluErrorString( __err ) );\
     24                printf( "check%s: %s\n", _d, (char*)gluErrorString( __err ) );\
    2525        }\
    2626        while ( 0 )
     
    7777void TerrainPage::activate()
    7878{
     79       
    7980        pTerrainPage list = owner->getActiveList();
    8081        next = list;
     
    202203        int stride = 1 << _lod;
    203204        for ( int z = 0; z < owner->getPageSize()-stride; z+=stride ) {
    204                 if ( z > 0 ) {
    205                        
     205                if ( z > 0 ) {                 
    206206                        //Connect the two rows together by inserting the last index of last row
    207207                        //and the first index of the next row two times. This will produce two
     
    278278void TerrainPage::draw( )
    279279{
    280        
     280        //These give an error
    281281        assert( glIsEnabled( GL_VERTEX_ARRAY ) );
    282282        assert( !glIsEnabled( GL_NORMAL_ARRAY ) );
    283         assert( isVisible ); assert( numIndices );
     283        assert( isVisible ); assert( numIndices > 0 );
     284        assert( active );
    284285        active = false;
     286        CHECK_GL_ERROR( "1" ); 
    285287        glVertexPointer( 3, GL_FLOAT, 0, vertices );
    286288        glTexCoordPointer( 2, GL_FLOAT, 0, coords );   
     
    290292        if ( owner->debug() )
    291293                drawBox( );
    292        
    293         CHECK_GL_ERROR();
     294               
     295        CHECK_GL_ERROR( "2" ); 
    294296}
    295297
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_page.h

    r8321 r8328  
    247247                        show( );
    248248                }
     249                active = true;
    249250        }
    250251        else {
Note: See TracChangeset for help on using the changeset viewer.