tge/engine/dgl/lensFlare.cc
2025-02-17 23:17:30 -06:00

98 lines
2.6 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "dgl/lensFlare.h"
#include "dgl/dgl.h"
//**************************************************************************
// Lens Flare
//**************************************************************************
//--------------------------------------------------------------------------
// Clean up
//--------------------------------------------------------------------------
LensFlare::~LensFlare()
{
for( int i=0; i<mFlareList.size(); i++ )
{
delete mFlareList[i];
}
}
//--------------------------------------------------------------------------
// Add Flare
//--------------------------------------------------------------------------
void LensFlare::addFlare( LFlare &flare )
{
LFlare *newFlare = new LFlare;
*newFlare = flare;
mFlareList.push_back( newFlare );
}
//--------------------------------------------------------------------------
// Render
//--------------------------------------------------------------------------
void LensFlare::render( const MatrixF &camTrans, const Point3F &lightPos )
{
Point3F camPos = camTrans.getPosition();
Point3F camDir;
camTrans.getRow( 1, &camDir );
Point3F camAdjust = camPos + camDir;
Point3F lensFlareLine = lightPos - ( camAdjust );
lensFlareLine.normalize();
Point3F startPoint = camAdjust - lensFlareLine;
lensFlareLine *= 2.0;
for( int i=0; i<mFlareList.size(); i++ )
{
const LFlare *flare = mFlareList[i];
Point3F flarePos = startPoint + lensFlareLine * flare->offset;
renderFlare( flarePos, *flare );
}
}
//--------------------------------------------------------------------------
// Render flare
//--------------------------------------------------------------------------
void LensFlare::renderFlare( Point3F &pos, const LFlare &flare )
{
Point3F screenPoint;
if( !dglPointToScreen( pos, screenPoint ) )
{
return;
}
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
// set ortho mode
RectI viewport;
dglGetViewport(&viewport);
dglSetClipRect( viewport );
glColor4fv( flare.color );
glBindTexture(GL_TEXTURE_2D, flare.tex.getGLName());
dglDraw2DSquare( Point2F( screenPoint.x, screenPoint.y ), flare.size, 0 );
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
}