Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7700 in orxonox.OLD


Ignore:
Timestamp:
May 18, 2006, 5:05:45 PM (18 years ago)
Author:
stefalie
Message:

branches/water: first attempt to realise reflection

Location:
branches/water/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/water/src/lib/graphics/importer/material.cc

    r7687 r7700  
    333333// MAPPING //
    334334
    335 /**
    336  *  Sets the Materials Diffuse Map
     335void Material::setDiffuseMap(Texture* texture, unsigned int textureNumber)
     336{
     337  assert(textureNumber < Material::getMaxTextureUnits());
     338
     339  if (this->textures.size() > textureNumber && this->textures[textureNumber] != NULL)
     340    ResourceManager::getInstance()->unload(this->textures[textureNumber]);
     341
     342  if (this->textures.size() <= textureNumber)
     343    this->textures.resize(textureNumber+1, NULL);
     344
     345  //! @todo check if RESOURCE MANAGER is availiable
     346  this->textures[textureNumber] = texture;
     347}
     348
     349
     350/**
     351 * @brief Sets the Materials Diffuse Map
    337352 * @param dMap the Name of the Image to Use
    338353*/
  • branches/water/src/lib/graphics/importer/material.h

    r7687 r7700  
    5353
    5454    // MAPPING //
     55    void setDiffuseMap(Texture* texture, unsigned int textureNumber = 0);
    5556    void setDiffuseMap(const std::string& dMap, GLenum target = GL_TEXTURE_2D, unsigned int textureNumber = 0);
    5657    void setSDLDiffuseMap(SDL_Surface *surface, GLenum target = GL_TEXTURE_2D, unsigned int textureNumber = 0);
  • branches/water/src/lib/graphics/importer/texture.cc

    r7687 r7700  
    2929#endif
    3030
     31
     32
     33
     34Texture::Texture(GLenum target)
     35{
     36  this->init();
     37  this->generateTexture(texture, target);
     38}
     39
    3140/**
    3241 *  Constructor for a Texture
     
    4251  }
    4352}
     53
     54
    4455
    4556Texture::Texture(SDL_Surface* surface, GLenum target)
     
    150161
    151162/**
    152  * rebuilds the texture.
     163 * @brief rebuilds the texture.
    153164 * reloads the Texture from Memory to OpenGL.
    154165 */
     
    171182
    172183/**
    173  * set the surface this Texture handles
     184 * @brief set the surface this Texture handles
    174185 * @param newSurface the new Surface to set as the image for this Texture.
    175186 *
     
    191202
    192203/**
    193  * enables, disables textures
     204 * @brief enables, disables textures
    194205 * @param texturesEnabled true if the textures should be enabled
    195206 */
     
    204215//////////////////////////////////////
    205216/**
    206  * converts surface to a new SDL_Surface, that is loadable by openGL
     217 * @brief converts surface to a new SDL_Surface, that is loadable by openGL
    207218 * @param surface the Surface to convert
    208219 * @param hasAlpha if the newly created Surface has an alpha channel, true is returned otherwise false.
     
    266277
    267278/**
    268  * Loads a Texture to the openGL-environment.
     279 * @brief Loads a Texture to the openGL-environment.
    269280 * @param surface the Image to load to openGL
    270281 * @returns The ID of the texture.
     
    277288
    278289  int      errorCode = 0;           //!< the error code for the texture loading functions
    279   GLuint   texture;                 //!< the OpenGL texture handle
     290  GLuint   texture = 0;             //!< the OpenGL texture handle
    280291  int      mipmapLevel = 0;         //!< the maximum mipmap level for this texture
    281292  int      mipmapWidth = 0;         //!< the width of the mipmap
     
    287298
    288299  /* Create an OpenGL texture for the image */
    289   glGenTextures(1, &texture);
    290   glBindTexture(target, texture);
    291 
    292   glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT);
    293   glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_REPEAT);
    294 
    295   glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    296   glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    297 
     300  this->generateTexture(texture, target);
    298301  glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_PRIORITY, this->priority);
    299 
    300 
    301   /* control the mipmap levels */
    302   glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_MIN_LOD, 5);
    303   glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_MAX_LOD, 0);
    304302
    305303  /* build the Texture  OpenGL V >= 1.1 */
     
    330328}
    331329
     330void Texture::generateTexture(GLuint& texture, GLenum target)
     331{
     332  if (!glIsTexture(texture))
     333  {
     334    glGenTextures(1, &texture);
     335  }
     336  glBindTexture(target, texture);
     337
     338  glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT);
     339  glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_REPEAT);
     340
     341  glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
     342  glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     343
     344  /* control the mipmap levels */
     345  glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_MIN_LOD, 5);
     346  glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_MAX_LOD, 0);
     347}
     348
  • branches/water/src/lib/graphics/importer/texture.h

    r7687 r7700  
    1818  {
    1919    public:
    20       Texture(const std::string& imageName = "", GLenum target = GL_TEXTURE_2D);
     20      Texture(GLenum target = GL_TEXTURE_2D);
     21      Texture(const std::string& imageName, GLenum target = GL_TEXTURE_2D);
    2122      Texture(SDL_Surface* surface, GLenum target = GL_TEXTURE_2D);
    2223      virtual ~Texture();
     
    5051    private:
    5152      void init();
     53      static void generateTexture(GLuint& texture, GLenum target);
    5254
    5355    private:
  • branches/water/src/world_entities/environments/mapped_water.cc

    r7687 r7700  
    2424
    2525MappedWater::MappedWater(const TiXmlElement* root)
     26 : texture(GL_TEXTURE_2D)
    2627{
    2728  this->setClassID(CL_MAPPED_WATER, "MappedWater");
     
    3031  if (root != NULL)
    3132    this->loadParams(root);
     33   
     34    mat.setDiffuseMap(&this->texture, 0);
    3235}
    3336
     
    5861  //glEnable(GL_LIGHTING);
    5962
    60   Material mat;
    61   mat.setDiffuseMap("pictures/ground.tga", GL_TEXTURE_2D, 0);
     63 
    6264  //mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 1);
    6365  //mat.setTransparency(1.0);
    6466  //mat.setDiffuse(1.0, 0, .1);
     67 
     68 
     69  // HACK
     70
     71  //glDisable(GL_BLEND);
     72  //glActiveTexture(GL_TEXTURE0);
     73  //glBindTexture(GL_TEXTURE_2D, this->texture);
     74
    6575  mat.select();
    6676
     
    94104}
    95105
    96 void MappedWater::activateReflection() {}
    97 void MappedWater::deactivateReflection() {}
     106void MappedWater::activateReflection()
     107{
     108  // Change the view port to be the size of the texture we will render to
     109  // HACK
     110  int textureSize = 512;
     111  glPushAttrib(GL_VIEWPORT_BIT);
     112  glViewport(0,0, textureSize, textureSize);
    98113
    99 void MappedWater::activateRefraction() {}
    100 void MappedWater::deactivateRefraction() {}
     114  // Clear the color and depth bits, reset the matrix and position our camera.
     115//  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     116//  glLoadIdentity();
     117  //g_Camera.Look();
     118
     119  // So we don't affect any other objects in the world we push on a new matrix
     120  //glPushMatrix();
     121
     122  // If our camera is above the water we will render the scene flipped upside down.
     123  // In order to line up the reflection nicely with the world we have to translate
     124  // the world to the position of our reflected surface, multiplied by two.
     125  //if(g_Camera.Position().y > waterHeight)
     126  //{
     127      // Translate the world, then flip it upside down
     128   //   glTranslatef(0.0f, waterHeight*2.0f, 0.0f);
     129    //  glScalef(1.0, -1.0, 1.0);
     130
     131      // Since the world is updside down we need to change the culling to FRONT
     132      //glCullFace(GL_FRONT);
     133
     134      // Set our plane equation and turn clipping on
     135     // double plane[4] = {0.0, 1.0, 0.0, -waterHeight};
     136   //   glEnable(GL_CLIP_PLANE0);
     137     // glClipPlane(GL_CLIP_PLANE0, plane);
     138
     139      // Render the world upside down and clipped (only render the top flipped).
     140      // If we don't turn OFF caustics for the reflection texture we get horrible
     141      // artifacts in the water.  That is why we set bRenderCaustics to FALSE.
     142      //RenderWorld(false);
     143
     144      // Turn clipping off
     145     // glDisable(GL_CLIP_PLANE0);
     146
     147      // Restore back-face culling
     148    //  glCullFace(GL_BACK);
     149  //}
     150  /*else
     151  {
     152      // If the camera is below the water we don't want to flip the world,
     153      // but just render it clipped so only the top is drawn.
     154      double plane[4] = {0.0, 1.0, 0.0, waterHeight};
     155      glEnable(GL_CLIP_PLANE0);
     156      glClipPlane(GL_CLIP_PLANE0, plane);
     157      RenderWorld(true);
     158      glDisable(GL_CLIP_PLANE0);
     159  }*/
     160
     161  // Restore the previous matrix
     162  //glPopMatrix();
     163
     164    // Bind the current scene to our reflection texture
     165  //glBindTexture(GL_TEXTURE_2D, g_Texture[REFLECTION_ID]);
     166 
     167 
     168 
     169 glBindTexture(GL_TEXTURE_2D, texture.getTexture());
     170 // ;
     171 // mat.setDiffuseMap(&texture, 0);
     172 glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
     173 
     174  glPopAttrib();
     175}
     176
     177void MappedWater::deactivateReflection()
     178{
     179
     180}
     181
     182void MappedWater::activateRefraction()
     183{
     184
     185}
     186
     187void MappedWater::deactivateRefraction()
     188{
     189
     190}
  • branches/water/src/world_entities/environments/mapped_water.h

    r7687 r7700  
    1010#include "world_entity.h"
    1111#include "material.h"
     12#include "texture.h"
    1213
    1314
     
    3435  private:
    3536    float           waterHeight;       //!< y-coord of the Water
     37    Material        mat;
     38   
     39    Texture         texture;
    3640
    3741};
Note: See TracChangeset for help on using the changeset viewer.