#include "..\..\include\TextureMapping\OAGTriangleMapping.h"
#include "..\..\include\Texture\OAGTextureLoader.h"
oag::OAGTriangleMapping::OAGTriangleMapping(void)
{
m_enumTextureMapping = OAG_TEXTURE_MAP_TRIANGLE;
m_enumTextureObject = OAG_TEXTURE_OBJECT_TRIANGLE;
SetPolygonMode(GL_FILL);
}
oag::OAGTriangleMapping::~OAGTriangleMapping(void)
{
}
//Operations
void oag::OAGTriangleMapping::OnDraw()
{
if ( m_listTextureObjects.size() == 0)
return;
::glPushMatrix();
::glColor4ubv( m_Color.GetColor4ubv() );
::glPolygonMode(m_PolygonFace, m_PolygonMode);
::glTranslated( m_position.m_X, m_position.m_Y, m_position.m_Z);
::glScalef( m_scale.m_X, m_scale.m_Y, m_scale.m_Z);
::glRotatef( m_rotation.m_X, 1.0, 0, 0);
::glRotatef( m_rotation.m_Y, 0, 1.0, 0);
::glRotatef( m_rotation.m_Z, 0, 0, 1.0);
glEnable(GL_BLEND);
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
if ( m_listTextureObjects.size() == 1)
{
oag::OAGTextureMappingObjects* textObj = m_listTextureObjects[0];
::glEnable(GL_TEXTURE_2D);
::glBindTexture(GL_TEXTURE_2D, textObj->m_glTextureId);
glBegin(GL_TRIANGLES);
glTexCoord2d( textObj->m_nTextureCoordinates[0], textObj->m_nTextureCoordinates[1] );
glVertex2d(textObj->m_nTextureVertices[0].m_X , textObj->m_nTextureVertices[0].m_Y);
glTexCoord2d( textObj->m_nTextureCoordinates[2], textObj->m_nTextureCoordinates[3] );
glVertex2d(textObj->m_nTextureVertices[1].m_X , textObj->m_nTextureVertices[1].m_Y);
glTexCoord2d( textObj->m_nTextureCoordinates[4], textObj->m_nTextureCoordinates[5]);
glVertex2d(textObj->m_nTextureVertices[2].m_X , textObj->m_nTextureVertices[2].m_Y);
glEnd();
glDisable(GL_TEXTURE_2D);
}
else if ( m_listTextureObjects.size() == 2)
{
if ( __GLEW_ARB_multitexture )//m_pExtManagement != NULL && m_pExtManagement->IsSupported_GL_ARB_multitexture() )
{
BindListTexture();
oag::OAGTextureMappingObjects* textObj = m_listTextureObjects[0];
oag::OAGTextureMappingObjects* textObj1 = m_listTextureObjects[1];
glBegin(GL_TRIANGLES);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, textObj->m_nTextureCoordinates[0], textObj->m_nTextureCoordinates[1] );
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, textObj1->m_nTextureCoordinates[0], textObj1->m_nTextureCoordinates[1] );
glVertex2d(textObj->m_nTextureVertices[0].m_X, textObj->m_nTextureVertices[0].m_Y);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, textObj->m_nTextureCoordinates[2], textObj->m_nTextureCoordinates[3] );
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, textObj1->m_nTextureCoordinates[2], textObj1->m_nTextureCoordinates[3] );
glVertex2d(textObj->m_nTextureVertices[1].m_X, textObj->m_nTextureVertices[1].m_Y);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, textObj->m_nTextureCoordinates[4], textObj->m_nTextureCoordinates[5] );
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, textObj1->m_nTextureCoordinates[4], textObj1->m_nTextureCoordinates[5] );
glVertex2d(textObj->m_nTextureVertices[2].m_X, textObj->m_nTextureVertices[2].m_Y);
glEnd();
glDisable(GL_TEXTURE_2D);
__glewActiveTextureARB(GL_TEXTURE0_ARB);
}
}
glDisable(GL_BLEND);
::glPopMatrix();
}
void oag::OAGTriangleMapping::ReadNodeXML(CXmlNode *pNode)
{
oag::OAGTextureMapping::ReadNodeXML(pNode);
}
void oag::OAGTriangleMapping::SaveNodeXML(CXmlNode *pNode)
{
oag::OAGTextureMapping::SaveNodeXML(pNode);
}