Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

pge::GPUWater Class Reference

#include <GPUWater.h>

Inheritance diagram for pge::GPUWater:

Inheritance graph
[legend]
Collaboration diagram for pge::GPUWater:

Collaboration graph
[legend]

Public Member Functions

 GPUWater (Vector3f startCorner, float width, float height)
 Constructor.

virtual ~GPUWater (void)
 Destructor.

bool init (void)
void render (void)
 Called when the object should render itself.

void timer (unsigned int delay)
 Called when the timer event comes.


Private Attributes

Vector3f m_backLeft
Vector3f m_frontLeft
Vector3f m_frontRight
Vector3f m_backRight
float m_width
float m_height
GPUProgramm_waterProgram
unsigned int m_cubemap
Texturem_noise
float m_time

Constructor & Destructor Documentation

pge::GPUWater::GPUWater Vector3f  startCorner,
float  width,
float  height
[inline]
 

Constructor.

Definition at line 33 of file GPUWater.h.

References m_backLeft, m_backRight, m_cubemap, m_frontLeft, m_frontRight, m_height, m_noise, m_time, pge::Vector3f::m_v, m_waterProgram, m_width, and TEXTURE_PREFIX.

00033                                                                           {
00034                         m_width = width;
00035                         m_height = height;
00036                         m_time = 0.0f;
00037 
00038                         m_backLeft = Vector3f(startCorner.m_v[0], startCorner.m_v[1], startCorner.m_v[2] + m_height);
00039                         m_frontLeft = startCorner;
00040                         m_frontRight = Vector3f(startCorner.m_v[0] + m_width, startCorner.m_v[1], startCorner.m_v[2]);
00041                         m_backRight = Vector3f(startCorner.m_v[0] + m_width, startCorner.m_v[1], startCorner.m_v[2] + m_height);
00042 
00043                         m_cubemap = TextureFactory::createCubemapTexture(TEXTURE_PREFIX.append("water"));
00044                         m_noise = TextureDatabase::getInstance()->addTexture("noise_0.jpg");
00045                         m_waterProgram = new GPUProgram("../data/shader/water_vs.txt", "../data/shader/water_fs.txt");
00046                 }

virtual pge::GPUWater::~GPUWater void   )  [inline, virtual]
 

Destructor.

Definition at line 55 of file GPUWater.h.

References m_cubemap.

00055                                         {
00056                         glDeleteTextures(1, &m_cubemap);
00057                 }


Member Function Documentation

bool pge::GPUWater::init void   )  [inline, virtual]
 

Implements pge::IRenderableObject.

Definition at line 65 of file GPUWater.h.

00065                                 {
00066                         return true;
00067                 }

void pge::GPUWater::render void   )  [inline, virtual]
 

Called when the object should render itself.

Implements pge::IRenderableObject.

Definition at line 69 of file GPUWater.h.

References pge::GPUProgram::bind(), pge::Texture::getDescriptor(), m_backLeft, m_backRight, m_cubemap, m_frontLeft, m_frontRight, m_noise, m_time, m_waterProgram, pge::GPUProgram::passUniform1f(), pge::GPUProgram::passUniform1i(), pge::GPUProgram::passUniform3f(), and pge::GPUProgram::release().

00069                                   {
00070                         // Cubemap.
00071                         glActiveTexture(GL_TEXTURE0);
00072                         glEnable(GL_TEXTURE_CUBE_MAP);
00073                         glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubemap);
00074 
00075                         // Noise texture.
00076                         glActiveTexture(GL_TEXTURE1);
00077                         glEnable(GL_TEXTURE_2D);
00078                         glBindTexture(GL_TEXTURE_2D, m_noise->getDescriptor());
00079 
00080                         m_waterProgram->bind();
00081 
00082                         m_waterProgram->passUniform1f("dayNightCycle", DayNightCycle::getInstance()->getDayNightCycle());
00083 
00084                         m_waterProgram->passUniform3f("cameraPosition", CoreEngine::getInstance()->getCurrentWorld()->getCamera()->getPosition());
00085                         m_waterProgram->passUniform3f("cameraLightColor", Vector3f(1.0f, 1.0f, 0.6f));
00086 
00087                         m_waterProgram->passUniform1f("waveSpeed", 0.5f);
00088                         m_waterProgram->passUniform1f("noiseSpeed", 0.5f);
00089                         m_waterProgram->passUniform1f("time", m_time);
00090 
00091                         m_waterProgram->passUniform1i("cubemap", 0);
00092                         m_waterProgram->passUniform1i("noise", 1);
00093 
00094                         glBegin(GL_QUADS);
00095                         renderer::normal3f(Vector3f(0.0f, 1.0f, 0.0f));
00096                         renderer::vertex3f(m_frontLeft, 0.0f, 0.0f);
00097                         renderer::vertex3f(m_backLeft, 0.0f, 1.0f);
00098                         renderer::vertex3f(m_backRight, 1.0f, 1.0f);
00099                         renderer::vertex3f(m_frontRight, 1.0f, 0.0f);
00100                         glEnd();
00101 
00102                         // Cleanup
00103                         m_waterProgram->release();
00104 
00105                         glActiveTexture(GL_TEXTURE1);
00106                         glDisable(GL_TEXTURE_2D);
00107 
00108                         glActiveTexture(GL_TEXTURE0);
00109                         glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
00110                         glDisable(GL_TEXTURE_CUBE_MAP);
00111                 }

Here is the call graph for this function:

void pge::GPUWater::timer unsigned int  delay  )  [inline, virtual]
 

Called when the timer event comes.

Implements pge::IRenderableObject.

Definition at line 113 of file GPUWater.h.

References m_time.

00113                                                {
00114                         m_time += 0.01f;
00115                         if (m_time >= 100000.0f - 1.0f) {
00116                                 m_time = 0.0f;
00117                         }
00118                 }


Field Documentation

Vector3f pge::GPUWater::m_backLeft [private]
 

Definition at line 127 of file GPUWater.h.

Referenced by GPUWater(), and render().

Vector3f pge::GPUWater::m_backRight [private]
 

Definition at line 130 of file GPUWater.h.

Referenced by GPUWater(), and render().

unsigned int pge::GPUWater::m_cubemap [private]
 

Definition at line 135 of file GPUWater.h.

Referenced by GPUWater(), render(), and ~GPUWater().

Vector3f pge::GPUWater::m_frontLeft [private]
 

Definition at line 128 of file GPUWater.h.

Referenced by GPUWater(), and render().

Vector3f pge::GPUWater::m_frontRight [private]
 

Definition at line 129 of file GPUWater.h.

Referenced by GPUWater(), and render().

float pge::GPUWater::m_height [private]
 

Definition at line 133 of file GPUWater.h.

Referenced by GPUWater().

Texture* pge::GPUWater::m_noise [private]
 

Definition at line 136 of file GPUWater.h.

Referenced by GPUWater(), and render().

float pge::GPUWater::m_time [private]
 

Definition at line 137 of file GPUWater.h.

Referenced by GPUWater(), render(), and timer().

GPUProgram* pge::GPUWater::m_waterProgram [private]
 

Definition at line 134 of file GPUWater.h.

Referenced by GPUWater(), and render().

float pge::GPUWater::m_width [private]
 

Definition at line 132 of file GPUWater.h.

Referenced by GPUWater().


The documentation for this class was generated from the following file:
Generated on Mon Oct 16 12:09:11 2006 for Phobosengine by doxygen 1.3.4