From: <cn...@us...> - 2009-11-07 22:40:53
|
Revision: 606 http://hgengine.svn.sourceforge.net/hgengine/?rev=606&view=rev Author: cnlohr Date: 2009-11-07 22:40:43 +0000 (Sat, 07 Nov 2009) Log Message: ----------- add new utility for getting a point + ray equation for the camera / point and click ... plus enable diabling of clamping of textures. Modified Paths: -------------- Mercury2/src/GLHelpers.cpp Mercury2/src/GLHelpers.h Mercury2/src/Texture.cpp Mercury2/src/Texture.h Modified: Mercury2/src/GLHelpers.cpp =================================================================== --- Mercury2/src/GLHelpers.cpp 2009-11-07 08:37:17 UTC (rev 605) +++ Mercury2/src/GLHelpers.cpp 2009-11-07 22:40:43 UTC (rev 606) @@ -91,6 +91,41 @@ return pointFromScreenLoc( screen_x, screen_y, winZ ); } +void CameraPointAndRay(int screen_x, int screen_y, MercuryVertex & p, MercuryVertex & r) +{ + GLfloat winX, winY, winZ; + GLdouble dox = 0, doy = 0, doz = 0; + GLint viewport[4]; + GLdouble modelview[16]; + GLdouble projection[16]; + + GLCALL( glGetIntegerv(GL_VIEWPORT, viewport) ); + GLCALL( glGetDoublev(GL_MODELVIEW_MATRIX, modelview) ); + GLCALL( glGetDoublev(GL_PROJECTION_MATRIX, projection) ); + + winX = (float)screen_x; + winY = (float)viewport[3] - (float)screen_y; + + gluUnProject( + winX, winY, -1000, + modelview, projection, viewport, + &dox, &doy, &doz); + + p = MercuryVertex( dox, doy, doz ); + + gluUnProject( + winX, winY, 1, + modelview, projection, viewport, + &dox, &doy, &doz ); + r = MercuryVertex( dox, doy, doz ) - p; + + r.NormalizeSelf(); + + return; + +} + + unsigned int ToGLColorType(ColorByteType cbt) { switch (cbt) Modified: Mercury2/src/GLHelpers.h =================================================================== --- Mercury2/src/GLHelpers.h 2009-11-07 08:37:17 UTC (rev 605) +++ Mercury2/src/GLHelpers.h 2009-11-07 22:40:43 UTC (rev 606) @@ -19,6 +19,7 @@ MercuryMatrix glGetMatrix(unsigned int m); MercuryVertex pointFromScreenLoc(int screen_x, int screen_y); MercuryVertex pointFromScreenLoc(int screen_x, int screen_y, float fForceDepth); +void CameraPointAndRay(int screen_x, int screen_y, MercuryVertex & p, MercuryVertex & r); unsigned int ToGLColorType(ColorByteType cbt); #ifdef GL_PROFILE Modified: Mercury2/src/Texture.cpp =================================================================== --- Mercury2/src/Texture.cpp 2009-11-07 08:37:17 UTC (rev 605) +++ Mercury2/src/Texture.cpp 2009-11-07 22:40:43 UTC (rev 606) @@ -13,7 +13,7 @@ #define BUFFER_OFFSET(i) ((char*)NULL + (i)) Texture::Texture( const MString & key, bool bInstanced ) - :MercuryAsset( key, bInstanced ), m_raw(NULL),m_textureID(0),m_bDeleteRaw(true),m_dynamic(false) + :MercuryAsset( key, bInstanced ), m_raw(NULL),m_textureID(0),m_bDeleteRaw(true),m_dynamic(false), m_bClamp(true) { if (!m_initTextureSuccess) { @@ -72,8 +72,11 @@ // GLCALL( glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ); - GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) ); - GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP) ); + if( m_bClamp ) + { + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) ); + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP) ); + } // GLCALL( gluBuild2DMipmaps( GL_TEXTURE_2D, 3, m_raw->m_width, m_raw->m_height, ByteType, GL_UNSIGNED_BYTE, m_raw->m_data ) ); if( m_bDeleteRaw ) @@ -102,8 +105,10 @@ void Texture::LoadFromXML(const XMLNode& node) { if ( !node.Attribute("dynamic").empty() ) - m_dynamic = node.Attribute("dynamic")=="true"?true:false; - + m_dynamic = StrToBool( node.Attribute("dynamic") ); + if( !node.Attribute( "clamp" ).empty() ) + m_bClamp = StrToBool( node.Attribute("clamp" ) ); + MString file = node.Attribute("file"); ChangeKey( file ); Modified: Mercury2/src/Texture.h =================================================================== --- Mercury2/src/Texture.h 2009-11-07 08:37:17 UTC (rev 605) +++ Mercury2/src/Texture.h 2009-11-07 22:40:43 UTC (rev 606) @@ -64,6 +64,7 @@ bool m_bDeleteRaw; bool m_dynamic; + bool m_bClamp; // MString m_filename; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |