00001 #include "Plane.h"
00002 #include "Error.h"
00003 #include "Rendergroup.h"
00004 #include "Program.h"
00005 #include "Stateset.h"
00006 #include "Sampler.h"
00007 #include "Vertexbuffer.h"
00008
00009 namespace RenderTools {
00010
00011 Plane::Plane( void ):
00012 Rendernode( ){
00013
00014 }
00015
00016 PropertyPtr Plane::create( const XMLNodePtr & xml ){
00017 PlanePtr p( new Plane() );
00018 p->setName( xml );
00019 p->createProperties();
00020 p->setProperties( xml, false );
00021 return( dynamic_pointer_cast< AbstractProperty, Plane >( p ) );
00022 }
00023
00024 void Plane::createProperties( void ){
00025 Rendernode::createProperties();
00026 }
00027
00028 const string Plane::getTypeName( bool ofComponent ) const {
00029 return( "Plane" );
00030 }
00031
00032 Plane::~Plane( void ){
00033 }
00034
00035 void Plane::fromEquation( const Vec4 & equation, bool send ){
00036 m_local = Mat4::fromPlaneEquation( equation );
00037 if( send ){
00039 }
00040 }
00041
00042 void Plane::onInitialize( void ){
00043
00044 #ifndef RT_AS3
00045 Rendernode::removeVertexBuffers( false );
00046 #endif
00047
00048 VertexbufferPtr buffer( new Vertexbuffer() );
00049 buffer->addAttribute( 3, "vertex" );
00050 buffer->addAttribute( 2, "texcoord" );
00051 buffer->addAttribute( 3, "normal" );
00052 #ifdef GL_STATIC_DRAW
00053 buffer->setUsage( GL_STATIC_DRAW );
00054 #endif
00055 #ifdef GL_TRIANGLE_STRIP
00056 buffer->setMode( GL_TRIANGLE_STRIP );
00057 #endif
00058 buffer->setNumVertices( 4 );
00059 buffer->initialize();
00060 GLuint vertex = 0;
00061
00062 buffer->setVertexAttribute( vertex, 0, * Vec3( -1.0f, -1.0f, 0.0f ) );
00063 buffer->setVertexAttribute( vertex, 1, * Vec2( 0.0f, 0.0f ) );
00064 buffer->setVertexAttribute( vertex, 2, * Vec3( 0.0f, 0.0f, 1.0f ) );
00065 vertex++;
00066
00067 buffer->setVertexAttribute( vertex, 0, * Vec3( 1.0f, -1.0f, 0.0f ) );
00068 buffer->setVertexAttribute( vertex, 1, * Vec2( 1.0f, 0.0f ) );
00069 buffer->setVertexAttribute( vertex, 2, * Vec3( 0.0f, 0.0f, 1.0f ) );
00070 vertex++;
00071
00072 buffer->setVertexAttribute( vertex, 0, * Vec3( 1.0f, 1.0f, 0.0f ) );
00073 buffer->setVertexAttribute( vertex, 1, * Vec2( 1.0f, 1.0f ) );
00074 buffer->setVertexAttribute( vertex, 2, * Vec3( 0.0f, 0.0f, 1.0f ) );
00075 vertex++;
00076
00077 buffer->setVertexAttribute( vertex, 0, * Vec3( -1.0f, 1.0f, 0.0f ) );
00078 buffer->setVertexAttribute( vertex, 1, * Vec2( 0.0f, 1.0f ) );
00079 buffer->setVertexAttribute( vertex, 2, * Vec3( 0.0f, 0.0f, 1.0f ) );
00080 vertex++;
00081
00082 addVertexBuffer( buffer );
00083
00084 }
00085
00086 void Plane::render( void ){
00087 Rendernode::render( );
00088 }
00089
00090 Vec3 Plane::getNormal( void ) const {
00091 return( normalize( m_local.getCol(2).xyz() ) );
00092 }
00093
00094 };