#include "Primitives.h" #include "ImageShader.h" #include "Resource.h" #include "MediaPlayer.h" #include "Visitor.h" #include "Log.h" #include #include #include #include #include #include #include TexturedRectangle::TexturedRectangle(const std::string& resourcepath) : Primitive() { texturepath_ = resourcepath; float ar = 1.0; textureindex_ = Resource::getTextureImage(texturepath_, &ar); transform_ = glm::scale(glm::identity(), glm::vec3(ar, 1.f, 1.f)); // point 0 points_.push_back( glm::vec3( -ar, -1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 0.f, 1.f ) ); // point 1 points_.push_back( glm::vec3( -ar, 1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 0.f, 0.f ) ); // point 2 points_.push_back( glm::vec3( ar, -1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 1.f, 1.f ) ); // point 3 points_.push_back( glm::vec3( ar, 1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 1.f, 0.f ) ); // indices indices_.push_back ( 0 ); indices_.push_back ( 1 ); indices_.push_back ( 2 ); indices_.push_back ( 3 ); // setup shader for textured image shader_ = new ImageShader(); drawingPrimitive_ = GL_TRIANGLE_STRIP; } void TexturedRectangle::draw(glm::mat4 modelview, glm::mat4 projection) { glBindTexture(GL_TEXTURE_2D, textureindex_); Primitive::draw(modelview, projection); glBindTexture(GL_TEXTURE_2D, 0); } void TexturedRectangle::accept(Visitor& v) { Primitive::accept(v); v.visit(*this); } MediaRectangle::MediaRectangle(const std::string& mediapath) : Primitive() { mediapath_ = mediapath; mediaplayer_ = new MediaPlayer; mediaplayer_->Open(mediapath_); mediaplayer_->Play(true); // point 0 points_.push_back( glm::vec3( -1.f, -1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 0.f, 1.f ) ); // point 1 points_.push_back( glm::vec3( -1.f, 1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 0.f, 0.f ) ); // point 2 points_.push_back( glm::vec3( 1.f, -1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 1.f, 1.f ) ); // point 3 points_.push_back( glm::vec3( 1.f, 1.f, 0.f ) ); colors_.push_back( glm::vec3( 1.f, 1.f, 1.f ) ); texCoords_.push_back( glm::vec2( 1.f, 0.f ) ); // indices indices_.push_back ( 0 ); indices_.push_back ( 1 ); indices_.push_back ( 2 ); indices_.push_back ( 3 ); // setup shader for textured image shader_ = new ImageShader(); drawingPrimitive_ = GL_TRIANGLE_STRIP; } MediaRectangle::~MediaRectangle() { delete mediaplayer_; } void MediaRectangle::draw(glm::mat4 modelview, glm::mat4 projection) { mediaplayer_->Bind(); Primitive::draw(modelview, projection); glBindTexture(GL_TEXTURE_2D, 0); } void MediaRectangle::update( float dt ) { if ( mediaplayer_->isOpen() ) mediaplayer_->Update(); transform_ = glm::scale(glm::identity(), glm::vec3(mediaplayer_->AspectRatio(), 1.f, 1.f)); Primitive::update( dt ); } void MediaRectangle::accept(Visitor& v) { Primitive::accept(v); v.visit(*this); } LineStrip::LineStrip(std::vector points, glm::vec3 color) : Primitive() { for(size_t i = 0; i < points.size(); ++i) { points_.push_back( points[i] ); colors_.push_back( color ); indices_.push_back ( i ); } shader_ = new Shader(); drawingPrimitive_ = GL_LINE_LOOP; linewidth_ = 2; } void LineStrip::draw(glm::mat4 modelview, glm::mat4 projection) { glLineWidth(linewidth_); Primitive::draw(modelview, projection); } void LineStrip::accept(Visitor& v) { Primitive::accept(v); v.visit(*this); }