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

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/Sprite.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "Sprite.h"
00004 
00005 #include "Renderer.h"
00006 #include "Texture.h"
00007 
00008 
00009 namespace pge {
00010 
00011 
00012         //****************************************************************************
00013         //
00014         //
00015         //
00016         //****************************************************************************
00017         Sprite::Sprite(Vector3f topLeft, Vector3f topRight, Vector3f bottomRight, Vector3f bottomLeft) {
00018                 m_topLeft = topLeft;
00019                 m_topRight = topRight;
00020                 m_bottomLeft = bottomLeft;
00021                 m_bottomRight = bottomRight;
00022 
00023                 // TODO: Calculate center
00024                 m_center = topLeft;
00025 
00026                 m_forceBillboard = false;
00027                 m_billboardEnabled = false;
00028 
00029                 m_size = ((topLeft.subtract(topRight)).magnitude());
00030                 m_right = Vector3f();
00031                 m_up = Vector3f();
00032 
00033                 m_texRepeatU = 0.0f;
00034                 m_texRepeatV = 0.0f;
00035 
00036                 m_texture = NULL;
00037 
00038                 m_color = Vector4f(1.0f, 1.0f, 1.0f, 1.0f);
00039         }
00040 
00041 
00042         //****************************************************************************
00043         //
00044         //
00045         //
00046         //****************************************************************************
00047         Sprite::Sprite(Vector3f center, float size) {
00048                 m_topLeft = Vector3f();
00049                 m_topRight = Vector3f();
00050                 m_bottomLeft = Vector3f();
00051                 m_bottomRight = Vector3f();
00052 
00053                 m_center = center;
00054                 m_forceBillboard = true;
00055                 m_billboardEnabled = true;
00056 
00057                 m_size = size;
00058                 m_right = Vector3f();
00059                 m_up = Vector3f();
00060 
00061                 m_texRepeatU = 0.0f;
00062                 m_texRepeatV = 0.0f;
00063 
00064                 m_texture = NULL;
00065 
00066                 m_color = Vector4f(1.0f, 1.0f, 1.0f, 1.0f);
00067         }
00068 
00069 
00070         //****************************************************************************
00071         //
00072         //
00073         //
00074         //****************************************************************************
00075         Sprite::~Sprite(void) {
00076         }
00077 
00078 
00079         //****************************************************************************
00080         //
00081         //
00082         //
00083         //****************************************************************************
00084         Vector3f Sprite::getCenter(void) {
00085                 return m_center;
00086         }
00087 
00088 
00089         //****************************************************************************
00090         //
00091         //
00092         //
00093         //****************************************************************************
00094         void Sprite::setCenter(Vector3f center) {
00095                 m_center = center;
00096         }
00097         
00098         
00099         //****************************************************************************
00100         //
00101         //
00102         //
00103         //****************************************************************************
00104         void Sprite::setSize(float size) {
00105                 m_size = size;
00106         }
00107 
00108 
00109         //****************************************************************************
00110         //
00111         //
00112         //
00113         //****************************************************************************
00114         void Sprite::setTexture(Texture *texture) {
00115                 m_texture = texture;
00116         }
00117 
00118 
00119         //****************************************************************************
00120         //
00121         //
00122         //
00123         //****************************************************************************
00124         void Sprite::setColor(Vector4f color) {
00125                 m_color = color;
00126         }
00127 
00128 
00129         //****************************************************************************
00130         //
00131         //
00132         //
00133         //****************************************************************************
00134         bool Sprite::isBillboardEnabled(void) {
00135                 return (m_billboardEnabled || m_forceBillboard);
00136         }
00137 
00138 
00139         //****************************************************************************
00140         //
00141         //
00142         //
00143         //****************************************************************************
00144         void Sprite::setBillboardEnabled(bool enabled) {
00145                 m_billboardEnabled = enabled;
00146         }
00147 
00148 
00149         //****************************************************************************
00150         //
00151         //
00152         //
00153         //****************************************************************************
00154         bool Sprite::init(void) {
00155                 return true;
00156         }
00157 
00158 
00159         //****************************************************************************
00160         //
00161         //
00162         //
00163         //****************************************************************************
00164         void Sprite::render(void) {
00165                 // Use billboarding
00166                 if(m_forceBillboard || m_billboardEnabled) {
00167 
00168                         glGetFloatv(GL_MODELVIEW_MATRIX, m_mat);
00169 
00170                         m_right.m_v[0] = m_mat[0];
00171                         m_right.m_v[1] = m_mat[4];
00172                         m_right.m_v[2] = m_mat[8];
00173                         m_up.m_v[0] = m_mat[1];
00174                         m_up.m_v[1] = m_mat[5];
00175                         m_up.m_v[2] = m_mat[9];
00176 
00177                         m_bottomLeft = m_center.add((m_right.add(m_up)).multiply(-m_size));
00178                         m_bottomRight = m_center.add((m_right.subtract(m_up)).multiply(m_size));
00179                         m_topRight = m_center.add((m_right.add(m_up)).multiply(m_size));
00180                         m_topLeft = m_center.add((m_up.subtract(m_right)).multiply(m_size));
00181 
00182                         // Set texture and color.
00183                         if(m_texture != NULL) {
00184                                 if(m_texture->hasAlphaBlending()) {
00185                                         renderer::setTextureAlphaBlendEnabled(true);
00186                                 }
00187                                 renderer::setTexture(m_texture, GL_MODULATE);
00188                                 renderer::color4f(m_color);
00189                         }
00190 
00191                         glBegin(GL_QUADS);
00192                         // Bottom left
00193                         renderer::vertex3f(m_bottomLeft, 0.0f + m_texRepeatU, 1.0f + m_texRepeatV);
00194                         // Bottom right
00195                         renderer::vertex3f(m_bottomRight, 1.0f + m_texRepeatU, 1.0f + m_texRepeatV);
00196                         // Top right
00197                         renderer::vertex3f(m_topRight, 1.0f + m_texRepeatU, 0.0f + m_texRepeatV);
00198                         // Top left
00199                         renderer::vertex3f(m_topLeft, 0.0f + m_texRepeatU, 0.0f + m_texRepeatV);
00200                         glEnd();
00201                         
00202                         if(m_texture != NULL) {
00203                                 if(m_texture->hasAlphaBlending()) {
00204                                         renderer::setTextureAlphaBlendEnabled(false);
00205                                 }
00206                                 renderer::color4f(1.0f, 1.0f, 1.0f, 1.0f);
00207                         }
00208 
00209                 } else {
00210                         // Set texture and color.
00211                         if(m_texture != NULL) {
00212                                 if(m_texture->hasAlphaBlending()) {
00213                                         renderer::setTextureAlphaBlendEnabled(true);
00214                                 }
00215                                 renderer::setTexture(m_texture, GL_MODULATE);
00216                                 renderer::color4f(m_color);
00217                         }
00218 
00219                         glBegin(GL_QUADS);
00220                         // Bottom left
00221                         renderer::vertex3f(m_bottomLeft, 0.0f + m_texRepeatU, 1.0f + m_texRepeatV);
00222                         // Bottom right
00223                         renderer::vertex3f(m_bottomRight, 1.0f + m_texRepeatU, 1.0f + m_texRepeatV);
00224                         // Top right
00225                         renderer::vertex3f(m_topRight, 1.0f + m_texRepeatU, 0.0f + m_texRepeatV);
00226                         // Top left
00227                         renderer::vertex3f(m_topLeft, 0.0f + m_texRepeatU, 0.0f + m_texRepeatV);
00228                         glEnd();
00229 
00230                         if(m_texture != NULL) {
00231                                 if(m_texture->hasAlphaBlending()) {
00232                                         renderer::setTextureAlphaBlendEnabled(false);
00233                                 }
00234                                 renderer::color4f(1.0f, 1.0f, 1.0f, 1.0f);
00235                         }
00236                 }
00237         }
00238 
00239 
00240         //****************************************************************************
00241         //
00242         //
00243         //
00244         //****************************************************************************
00245         void Sprite::timer(unsigned int delay) {
00246         }
00247 };

Generated on Mon Oct 16 12:08:11 2006 for Phobosengine by doxygen 1.3.4