|
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.
|