diff --git a/CMakeLists.txt b/CMakeLists.txt index b6b5192..b59673d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,6 +206,9 @@ set(VMIX_SRCS Primitives.cpp Mesh.cpp SessionVisitor.cpp + View.cpp + Source.cpp + Mixer.cpp Settings.cpp Screenshot.cpp Resource.cpp diff --git a/FrameBuffer.cpp b/FrameBuffer.cpp index 7cae562..6ca98c7 100644 --- a/FrameBuffer.cpp +++ b/FrameBuffer.cpp @@ -1,22 +1,26 @@ #include "FrameBuffer.h" #include "ImageShader.h" +#include "Resource.h" #include "Log.h" #include -FrameBuffer::FrameBuffer(uint width, uint height, bool useDepthBuffer) +FrameBuffer::FrameBuffer(uint width, uint height, bool useDepthBuffer): textureid_(0), framebufferid_(0), usedepth_(useDepthBuffer) { attrib_.viewport.x = width; attrib_.viewport.y = height; attrib_.clear_color = glm::vec3(0.f); +} +void FrameBuffer::init() +{ // create a renderbuffer object to store depth info GLuint rboId; - if (useDepthBuffer){ + if (usedepth_){ glGenRenderbuffers(1, &rboId); glBindRenderbuffer(GL_RENDERBUFFER, rboId); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, attrib_.viewport.x, attrib_.viewport.y); glBindRenderbuffer(GL_RENDERBUFFER, 0); } @@ -27,7 +31,7 @@ FrameBuffer::FrameBuffer(uint width, uint height, bool useDepthBuffer) // generate texture glGenTextures(1, &textureid_); glBindTexture(GL_TEXTURE_2D, textureid_); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, attrib_.viewport.x, attrib_.viewport.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); @@ -37,19 +41,26 @@ FrameBuffer::FrameBuffer(uint width, uint height, bool useDepthBuffer) GL_TEXTURE_2D, textureid_, 0); // attach the renderbuffer to depth attachment point - if (useDepthBuffer){ + if (usedepth_){ glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboId); } checkFramebufferStatus(); - - FrameBuffer::release(); } - FrameBuffer::~FrameBuffer() { - glDeleteFramebuffers(1, &framebufferid_); + if (framebufferid_) + glDeleteFramebuffers(1, &framebufferid_); +} + + +uint FrameBuffer::texture() const +{ + if (framebufferid_ == 0) + return Resource::getTextureBlack(); + + return textureid_; } float FrameBuffer::aspectRatio() const @@ -59,6 +70,9 @@ float FrameBuffer::aspectRatio() const void FrameBuffer::bind() { + if (!framebufferid_) + init(); + glBindFramebuffer(GL_FRAMEBUFFER, framebufferid_); } @@ -86,6 +100,9 @@ void FrameBuffer::release() bool FrameBuffer::blit(FrameBuffer *other) { + if (!framebufferid_) + return false; + if (attrib_.viewport.x != other->width() || attrib_.viewport.y != other->height()) return false; diff --git a/FrameBuffer.h b/FrameBuffer.h index 393dcab..858db32 100644 --- a/FrameBuffer.h +++ b/FrameBuffer.h @@ -23,14 +23,17 @@ public: inline uint width() const { return attrib_.viewport.x; } inline uint height() const { return attrib_.viewport.y; } - inline uint texture() const { return textureid_; } + uint texture() const; float aspectRatio() const; private: + void init(); void checkFramebufferStatus(); + RenderingAttrib attrib_; uint textureid_; uint framebufferid_; + bool usedepth_; }; diff --git a/ImGuiToolkit.h b/ImGuiToolkit.h index 40c8d83..caf70fd 100644 --- a/ImGuiToolkit.h +++ b/ImGuiToolkit.h @@ -9,6 +9,8 @@ namespace ImGuiToolkit { + + // Icons from resource icon.dds void Icon(int i, int j); bool ButtonIcon(int i, int j); diff --git a/ImGuiVisitor.cpp b/ImGuiVisitor.cpp index 01ab9ed..0f2cb35 100644 --- a/ImGuiVisitor.cpp +++ b/ImGuiVisitor.cpp @@ -77,7 +77,7 @@ void ImGuiVisitor::visit(Primitive &n) ImGui::PushID(n.id()); ImGui::Text("Primitive"); - n.getShader()->accept(*this); + n.shader()->accept(*this); ImGui::PopID(); } @@ -89,7 +89,7 @@ void ImGuiVisitor::visit(ImageSurface &n) void ImGuiVisitor::visit(MediaSurface &n) { - ImGui::Text("%s", n.getResource().c_str()); + ImGui::Text("%s", n.getUri().c_str()); if (n.getMediaPlayer()) n.getMediaPlayer()->accept(*this); @@ -152,7 +152,7 @@ void ImGuiVisitor::visit(Scene &n) ImGui::SetNextItemOpen(true, ImGuiCond_Once); if (ImGui::CollapsingHeader("Scene Property Tree")) { - n.getRoot()->accept(*this); + n.root()->accept(*this); } } diff --git a/MediaPlayer.cpp b/MediaPlayer.cpp index 1506488..52b256e 100644 --- a/MediaPlayer.cpp +++ b/MediaPlayer.cpp @@ -67,11 +67,6 @@ void MediaPlayer::accept(Visitor& v) { v.visit(*this); } -void MediaPlayer::bind() -{ - glBindTexture(GL_TEXTURE_2D, texture()); -} - guint MediaPlayer::texture() const { if (textureindex_ == 0) diff --git a/MediaPlayer.h b/MediaPlayer.h index 6054db5..5e17087 100644 --- a/MediaPlayer.h +++ b/MediaPlayer.h @@ -191,10 +191,9 @@ public: * */ double updateFrameRate() const; /** - * Bind / Get the OpenGL texture + * Get the OpenGL texture * Must be called in OpenGL context * */ - void bind(); guint texture() const; /** * Get Image properties diff --git a/Mesh.cpp b/Mesh.cpp index d3bbf86..8f31f1b 100644 --- a/Mesh.cpp +++ b/Mesh.cpp @@ -321,36 +321,31 @@ bool parsePLY(string ascii, } -Mesh::Mesh(const std::string& path, const std::string& texture) : Primitive(), resource_(path), texturefilename_(texture), textureindex_(0) +Mesh::Mesh(const std::string& ply_path, const std::string& tex_path) : Primitive(), mesh_resource_(ply_path), texture_resource_(tex_path), textureindex_(0) { - if ( !parsePLY( Resource::getText(resource_), points_, colors_, texCoords_, indices_, drawMode_) ) + if ( !parsePLY( Resource::getText(mesh_resource_), points_, colors_, texCoords_, indices_, drawMode_) ) { points_.clear(); colors_.clear(); texCoords_.clear(); indices_.clear(); - Log::Warning("Mesh could not be created from %s", path.c_str()); + Log::Warning("Mesh could not be created from %s", ply_path.c_str()); } + + // selective creation of the shader (deleted in Primitive) + if (texture_resource_.empty()) + shader_ = new Shader; + else + shader_ = new ImageShader; } -Mesh::~Mesh() -{ - delete shader_; -} void Mesh::init() { Primitive::init(); - if (!texturefilename_.empty()) - { - // create shader for textured image - textureindex_ = Resource::getTextureImage(texturefilename_); - shader_ = new ImageShader(); - } - else { - shader_ = new Shader(); - } + if (!texture_resource_.empty()) + textureindex_ = Resource::getTextureImage(texture_resource_); } @@ -372,3 +367,43 @@ void Mesh::accept(Visitor& v) Primitive::accept(v); v.visit(*this); } + +Frame::Frame() : Node() +{ + icon_ = new Mesh("mesh/icon_video.ply"); + border_ = new Mesh("mesh/border.ply"); + shadow_ = new Mesh("mesh/shadow.ply", "mesh/shadow.png"); + color = glm::vec4( 0.8f, 0.8f, 0.f, 1.f); +} + +void Frame::draw(glm::mat4 modelview, glm::mat4 projection) +{ + if ( !initialized() ) { + icon_->init(); + border_->init(); + shadow_->init(); + init(); + } + + // shadow + shadow_->draw( modelview * transform_, projection); + + // right side + float ar = scale_.x / scale_.y; + glm::vec3 s(scale_.y, scale_.y, 1.0); + glm::vec3 t(translation_.x - 1.0 +ar, translation_.y, translation_.z); + glm::mat4 ctm = modelview * transform(t, rotation_, s); + + border_->shader()->color = color; + border_->draw( ctm, projection ); + icon_->shader()->color = color; + icon_->draw( ctm, projection ); + + // left side + t.x = -t.x; + s.x = -s.x; + ctm = modelview * transform(t, rotation_, s); + border_->draw( ctm, projection ); + +} + diff --git a/Mesh.h b/Mesh.h index 73b2b63..8261a42 100644 --- a/Mesh.h +++ b/Mesh.h @@ -16,21 +16,34 @@ class Mesh : public Primitive { public: - Mesh(const std::string& path, const std::string& texture = ""); - ~Mesh(); + Mesh(const std::string& ply_path, const std::string& tex_path = ""); void init () override; void draw (glm::mat4 modelview, glm::mat4 projection) override; void accept (Visitor& v) override; - inline std::string getResource() const { return resource_; } - inline std::string getTexture() const { return texturefilename_; } + inline std::string meshPath() const { return mesh_resource_; } + inline std::string texturePath() const { return texture_resource_; } protected: - std::string resource_; - std::string texturefilename_; + std::string mesh_resource_; + std::string texture_resource_; uint textureindex_; }; +class Frame : public Node +{ + Mesh *border_; + Mesh *icon_; + Mesh *shadow_; + +public: + Frame(); + + void draw (glm::mat4 modelview, glm::mat4 projection) override; + + glm::vec4 color; +}; + #endif // MESH_H diff --git a/Mixer.cpp b/Mixer.cpp new file mode 100644 index 0000000..10e380d --- /dev/null +++ b/Mixer.cpp @@ -0,0 +1,102 @@ +#include + +#include "defines.h" +#include "View.h" +#include "Primitives.h" +#include "Mesh.h" +#include "FrameBuffer.h" +#include "Mixer.h" + +Mixer::Mixer() +{ + current_view_ = &mixing_; + current_source_ = Source::end(); + update_time_ = GST_CLOCK_TIME_NONE; +} + + +void Mixer::update() +{ + // compute dt + if (update_time_ == GST_CLOCK_TIME_NONE) + update_time_ = gst_util_get_timestamp (); + gint64 current_time = gst_util_get_timestamp (); + gint64 dt = current_time - update_time_; + update_time_ = current_time; + + // render of all sources + for( SourceList::iterator it = Source::begin(); it != Source::end(); it++){ + (*it)->render(); + } + + // recursive update of all views + mixing_.update( static_cast( GST_TIME_AS_MSECONDS(dt)) * 0.001f ); + // TODO other views + + +} + +// draw render view and current view +void Mixer::draw() +{ + // always draw render view + render_.draw(); + + // draw the current view in the window + current_view_->draw(); +} + +// manangement of sources +void Mixer::createSourceMedia(std::string uri) +{ + +} + +void Mixer::setCurrentSource(std::string namesource) +{ + current_source_ = std::find_if(Source::begin(), Source::end(), hasName(namesource)) ; +} + +void Mixer::setcurrentSource(Source *s) +{ +// current_source_ = Source:: +} + +Source *Mixer::currentSource() +{ + if ( current_source_ == Source::end() ) + return nullptr; + else { + return *(current_source_); + } +} + +// management of view +void Mixer::setCurrentView(viewMode m) +{ + switch (m) { + case MIXING: + current_view_ = &mixing_; + break; + default: + current_view_ = &mixing_; + break; + } +} + +View *Mixer::getView(viewMode m) +{ + switch (m) { + case RENDERING: + return &render_; + case MIXING: + return &mixing_; + default: + return nullptr; + } +} + +View *Mixer::currentView() +{ + return current_view_; +} diff --git a/Mixer.h b/Mixer.h new file mode 100644 index 0000000..f435425 --- /dev/null +++ b/Mixer.h @@ -0,0 +1,59 @@ +#ifndef MIXER_H +#define MIXER_H + +#include + +// GStreamer +#include + + +#include "View.h" +#include "Source.h" + +class Mixer +{ + // Private Constructor + Mixer(); + Mixer(Rendering const& copy); // Not Implemented + Mixer& operator=(Rendering const& copy); // Not Implemented + +public: + + static Mixer& manager() + { + // The only instance + static Mixer _instance; + return _instance; + } + + // update all sources and all views + void update(); + + // draw render view and current view + void draw(); + + // manangement of sources + void createSourceMedia(std::string uri); + + void setCurrentSource(std::string namesource); + void setcurrentSource(Source *s); + Source *currentSource(); + + // management of view + typedef enum {RENDERING = 0, MIXING=1, GEOMETRY=2, LAYER=3, INVALID=4 } viewMode; + View *getView(viewMode m); + void setCurrentView(viewMode m); + View *currentView(); + + inline FrameBuffer *frame() const { return render_.frameBuffer(); } + +protected: + RenderView render_; + MixingView mixing_; + View *current_view_; + gint64 update_time_; + + SourceList::iterator current_source_; +}; + +#endif // MIXER_H diff --git a/Primitives.cpp b/Primitives.cpp index ac80bb5..78fd7d4 100644 --- a/Primitives.cpp +++ b/Primitives.cpp @@ -1,6 +1,7 @@ #include "Primitives.h" #include "ImageShader.h" #include "Resource.h" +#include "FrameBuffer.h" #include "MediaPlayer.h" #include "Visitor.h" #include "Log.h" @@ -25,7 +26,7 @@ static const std::vector square_points { }; -ImageSurface::ImageSurface(const std::string& path) : Primitive(), resource_(path), textureindex_(0) +Surface::Surface(Shader *s) : Primitive(s) { // geometry points_ = std::vector { glm::vec3( -1.f, -1.f, 0.f ), glm::vec3( -1.f, 1.f, 0.f ), @@ -38,25 +39,9 @@ ImageSurface::ImageSurface(const std::string& path) : Primitive(), resource_(pat drawMode_ = GL_TRIANGLE_STRIP; } -ImageSurface::~ImageSurface() -{ - if (shader_) - delete shader_; -} -void ImageSurface::init() +void Surface::init() { - // load image if specified - if ( resource_.empty()) - textureindex_ = Resource::getTextureBlack(); - else { - float ar = 1.0; - textureindex_ = Resource::getTextureImage(resource_, &ar); - scale_.x = ar; - } - // a new shader for a new image - shader_ = new ImageShader(); - // use static unique vertex array object static uint unique_vao_ = 0; static uint unique_drawCount = 0; @@ -77,6 +62,34 @@ void ImageSurface::init() } } +void Surface::accept(Visitor& v) +{ + Primitive::accept(v); + v.visit(*this); +} + +ImageSurface::ImageSurface(const std::string& path, Shader *s) : Surface(s), resource_(path), textureindex_(0) +{ + +} + +void ImageSurface::init() +{ + Surface::init(); + + // load image if specified (should always be the case) + if ( resource_.empty()) + textureindex_ = Resource::getTextureBlack(); + else { + float ar = 1.0; + textureindex_ = Resource::getTextureImage(resource_, &ar); + scale_.x = ar; + } + + // a new shader for a new image + shader_ = new ImageShader(); +} + void ImageSurface::draw(glm::mat4 modelview, glm::mat4 projection) { if ( !initialized() ) @@ -95,9 +108,9 @@ void ImageSurface::accept(Visitor& v) v.visit(*this); } -MediaSurface::MediaSurface(const std::string& uri) : ImageSurface() +MediaSurface::MediaSurface(const std::string& uri, Shader *s) : Surface(s) { - resource_ = uri; + uri_ = uri; mediaplayer_ = new MediaPlayer; } @@ -108,12 +121,9 @@ MediaSurface::~MediaSurface() void MediaSurface::init() { - std::string tmp = resource_; - resource_ = ""; - ImageSurface::init(); - resource_ = tmp; + Surface::init(); - mediaplayer_->open(resource_); + mediaplayer_->open(uri_); mediaplayer_->play(true); } @@ -123,9 +133,9 @@ void MediaSurface::draw(glm::mat4 modelview, glm::mat4 projection) init(); if ( mediaplayer_->isOpen() ) - mediaplayer_->bind(); + glBindTexture(GL_TEXTURE_2D, mediaplayer_->texture()); else - glBindTexture(GL_TEXTURE_2D, textureindex_); + glBindTexture(GL_TEXTURE_2D, Resource::getTextureBlack()); Primitive::draw(modelview, projection); @@ -136,12 +146,6 @@ void MediaSurface::update( float dt ) { if ( mediaplayer_->isOpen() ) { mediaplayer_->update(); - -// if (parent_ != nullptr) { -// parent_->transform_ = parent_->transform_ * glm::scale(glm::identity(), glm::vec3(mediaplayer_->aspectRatio(), 1.f, 1.f)); -// scale_.x = 1.0; -// } -// else scale_.x = mediaplayer_->aspectRatio(); } @@ -150,12 +154,47 @@ void MediaSurface::update( float dt ) void MediaSurface::accept(Visitor& v) { - ImageSurface::accept(v); + Primitive::accept(v); v.visit(*this); } -Points::Points(std::vector points, glm::vec4 color, uint pointsize) : Primitive() +FrameBufferSurface::FrameBufferSurface(FrameBuffer *fb, Shader *s) : Surface(s), frame_buffer_(fb) +{ + +} + +void FrameBufferSurface::init() +{ + Surface::init(); + + // set aspect ratio + scale_.x = frame_buffer_->aspectRatio(); + + // a new shader for a new image + shader_ = new ImageShader(); +} + +void FrameBufferSurface::draw(glm::mat4 modelview, glm::mat4 projection) +{ + if ( !initialized() ) + init(); + + glBindTexture(GL_TEXTURE_2D, frame_buffer_->texture()); + + Primitive::draw(modelview, projection); + + glBindTexture(GL_TEXTURE_2D, 0); +} + +void FrameBufferSurface::accept(Visitor& v) +{ + Primitive::accept(v); + v.visit(*this); +} + + +Points::Points(std::vector points, glm::vec4 color, uint pointsize) : Primitive(new Shader) { for(size_t i = 0; i < points.size(); ++i) { @@ -168,17 +207,7 @@ Points::Points(std::vector points, glm::vec4 color, uint pointsize) : pointsize_ = pointsize; } -Points::~Points() -{ - if (shader_) - delete shader_; -} -void Points::init() -{ - Primitive::init(); - shader_ = new Shader(); -} void Points::draw(glm::mat4 modelview, glm::mat4 projection) { @@ -196,7 +225,7 @@ void Points::accept(Visitor& v) v.visit(*this); } -LineStrip::LineStrip(std::vector points, glm::vec4 color, uint linewidth) : Primitive(), linewidth_(linewidth) +LineStrip::LineStrip(std::vector points, glm::vec4 color, uint linewidth) : Primitive(new Shader), linewidth_(linewidth) { for(size_t i = 0; i < points.size(); ++i) { @@ -208,18 +237,6 @@ LineStrip::LineStrip(std::vector points, glm::vec4 color, uint linewi drawMode_ = GL_LINE_STRIP; } -LineStrip::~LineStrip() -{ - if (shader_) - delete shader_; -} - -void LineStrip::init() -{ - Primitive::init(); - shader_ = new Shader(); -} - void LineStrip::draw(glm::mat4 modelview, glm::mat4 projection) { if ( !initialized() ) @@ -243,9 +260,6 @@ LineSquare::LineSquare(glm::vec4 color, uint linewidth) : LineStrip(square_point void LineSquare::init() { - // a new shader for a new line - shader_ = new Shader(); - // use static unique vertex array object static uint unique_vao_ = 0; static uint unique_drawCount = 0; @@ -293,9 +307,6 @@ LineCircle::LineCircle(glm::vec4 color, uint linewidth) : LineStrip(std::vector< void LineCircle::init() { - // a new shader for a new line - shader_ = new Shader(); - // use static unique vertex array object static uint unique_vao_ = 0; static uint unique_drawCount = 0; diff --git a/Primitives.h b/Primitives.h index b1a6a49..c834c87 100644 --- a/Primitives.h +++ b/Primitives.h @@ -4,21 +4,43 @@ #include #include "Scene.h" +#include "ImageShader.h" + class MediaPlayer; +class FrameBuffer; + /** - * @brief The ImageSurface class is a Primitive to draw an image + * @brief The Surface class is a Primitive to draw an flat square + * surface with texture coordinates. + * + * It uses a unique vertex array object to draw all surfaces. * - * Image is read from the Ressouces (not an external file) - * Height = 1.0, Width is set by the aspect ratio of the image */ -class ImageSurface : public Primitive { +class Surface : public Primitive { void deleteGLBuffers_() override {} public: - ImageSurface(const std::string& path = "" ); - ~ImageSurface(); + Surface(Shader *s = new ImageShader); + + void init () override; + void accept (Visitor& v) override; +}; + + +/** + * @brief The ImageSurface class is a Surface to draw an image + * + * It creates an ImageShader for rendering. + * + * Image is read from the Ressouces (not an external file) + * Height = 1.0, Width is set by the aspect ratio of the image + */ +class ImageSurface : public Surface { + +public: + ImageSurface(const std::string& path, Shader *s = new ImageShader); void init () override; void draw (glm::mat4 modelview, glm::mat4 projection) override; @@ -33,17 +55,15 @@ protected: /** - * @brief The MediaSurface class is an ImageSurface to draw a video + * @brief The MediaSurface class is a Surface to draw a video * * URI is passed to a Media Player to handle the video playback * Height = 1.0, Width is set by the aspect ratio of the image */ -class MediaSurface : public ImageSurface { - - MediaPlayer *mediaplayer_; +class MediaSurface : public Surface { public: - MediaSurface(const std::string& uri); + MediaSurface(const std::string& uri, Shader *s = new ImageShader); ~MediaSurface(); void init () override; @@ -51,9 +71,34 @@ public: void accept (Visitor& v) override; void update (float dt) override; + inline std::string getUri() const { return uri_; } MediaPlayer *getMediaPlayer() { return mediaplayer_; } + +protected: + std::string uri_; + MediaPlayer *mediaplayer_; }; +/** + * @brief The FrameBufferSurface class is a Surface to draw a framebuffer + * + * URI is passed to a Media Player to handle the video playback + * Height = 1.0, Width is set by the aspect ratio of the image + */ +class FrameBufferSurface : public Surface { + +public: + FrameBufferSurface(FrameBuffer *fb, Shader *s = new ImageShader); + + void init () override; + void draw (glm::mat4 modelview, glm::mat4 projection) override; + void accept (Visitor& v) override; + + inline FrameBuffer *getFrameBuffer() const { return frame_buffer_; } + +protected: + FrameBuffer *frame_buffer_; +}; /** * @brief The Points class is a Primitive to draw Points @@ -64,9 +109,7 @@ class Points : public Primitive { public: Points(std::vector points, glm::vec4 color, uint pointsize = 10); - ~Points(); - virtual void init() override; virtual void draw(glm::mat4 modelview, glm::mat4 projection) override; virtual void accept(Visitor& v) override; @@ -87,9 +130,7 @@ class LineStrip : public Primitive { public: LineStrip(std::vector points, glm::vec4 color, uint linewidth = 1); - ~LineStrip(); - virtual void init() override; virtual void draw(glm::mat4 modelview, glm::mat4 projection) override; virtual void accept(Visitor& v) override; diff --git a/RenderingManager.cpp b/RenderingManager.cpp index 490a5a0..42f92de 100644 --- a/RenderingManager.cpp +++ b/RenderingManager.cpp @@ -328,8 +328,8 @@ RenderingAttrib Rendering::currentAttrib() glm::mat4 Rendering::Projection() { - glm::mat4 projection = glm::ortho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); - glm::mat4 scale = glm::scale(glm::mat4(1.0f), glm::vec3(1.f, AspectRatio(), 1.f)); + static glm::mat4 projection = glm::ortho(-SCENE_UNIT, SCENE_UNIT, -SCENE_UNIT, SCENE_UNIT, SCENE_DEPTH, 0.f); + glm::mat4 scale = glm::scale(glm::identity(), glm::vec3(1.f, AspectRatio(), 1.f)); return projection * scale; } @@ -337,11 +337,12 @@ glm::mat4 Rendering::Projection() glm::vec3 Rendering::unProject(glm::vec2 screen_coordinate, glm::mat4 modelview) { - glm::vec3 point; - glm::vec3 coordinates = glm::vec3( glm::vec2(screen_coordinate), 0.f); + glm::vec3 coordinates = glm::vec3( screen_coordinate.x, -screen_coordinate.y, 0.f); glm::vec4 viewport = glm::vec4( 0.f, 0.f, main_window_attributes_.viewport.x, main_window_attributes_.viewport.y); - point = glm::unProject(coordinates, modelview, Projection(), viewport); +// glm::mat4 mv = glm::scale(modelview, glm::vec3(1.f, -1.f, 1.f)); +// glm::mat4 mv = glm::inverse(modelview); + glm::vec3 point = glm::unProject(coordinates, modelview, Projection(), viewport); return point; } diff --git a/RenderingManager.h b/RenderingManager.h index b684cb8..6657b79 100644 --- a/RenderingManager.h +++ b/RenderingManager.h @@ -77,7 +77,7 @@ public: // get projection matrix (for sharers) => Views glm::mat4 Projection(); // unproject from window coordinate - glm::vec3 unProject(glm::vec2 screen_coordinate, glm::mat4 modelview); + glm::vec3 unProject(glm::vec2 screen_coordinate, glm::mat4 modelview = glm::mat4(1.f)); // for opengl pipeline in gstreamer void LinkPipeline( GstPipeline *pipeline ); diff --git a/Scene.cpp b/Scene.cpp index 172eb06..d802d96 100644 --- a/Scene.cpp +++ b/Scene.cpp @@ -57,6 +57,8 @@ void Node::accept(Visitor& v) Primitive::~Primitive() { deleteGLBuffers_(); + if (shader_) + delete shader_; } void Primitive::init() @@ -153,6 +155,14 @@ void Primitive::accept(Visitor& v) v.visit(*this); } +void Primitive::replaceShader( Shader *newshader ) +{ + if (newshader) { + if (shader_) + delete shader_; + shader_ = newshader; + } +} void Primitive::deleteGLBuffers_() { diff --git a/Scene.h b/Scene.h index cece07a..d314e34 100644 --- a/Scene.h +++ b/Scene.h @@ -6,6 +6,7 @@ #ifdef __APPLE__ #include #endif + #include #include #include @@ -89,15 +90,15 @@ public: class Primitive : public Node { public: - Primitive() : Node(), shader_(nullptr), vao_(0), drawMode_(0), drawCount_(0) {} + Primitive(Shader *s = nullptr) : Node(), shader_(s), vao_(0), drawMode_(0), drawCount_(0) {} virtual ~Primitive(); virtual void init () override; virtual void accept (Visitor& v) override; virtual void draw (glm::mat4 modelview, glm::mat4 projection) override; - inline Shader *getShader() const { return shader_; } - inline void setShader( Shader* e ) { shader_ = e; } + inline Shader *shader () const { return shader_; } + void replaceShader (Shader* newshader); protected: Shader* shader_; @@ -120,6 +121,8 @@ struct z_comparator return (a && b && a->translation_.z < b->translation_.z); } }; +typedef std::multiset NodeSet; + struct hasId: public std::unary_function { inline bool operator()(const Node* e) const @@ -130,7 +133,6 @@ struct hasId: public std::unary_function private: int _id; }; -typedef std::multiset NodeSet; /** * @brief The Group class contains a list of pointers to Nodes. @@ -227,14 +229,18 @@ protected: // A scene contains a root node and gives a simplified API to add nodes class Scene { + Group root_; + public: Scene() {} - Group *getRoot() { return &root_; } + void accept (Visitor& v); - void accept(Visitor& v); + Group *root() { return &root_; } - Group root_; + // Node *find(int id); + // void remove(Node *n); + // }; diff --git a/SessionVisitor.cpp b/SessionVisitor.cpp index 5c2031d..dda7128 100644 --- a/SessionVisitor.cpp +++ b/SessionVisitor.cpp @@ -69,7 +69,7 @@ void SessionVisitor::visit(Primitive &n) XMLElement *Primitive = xmlCurrent_; xmlCurrent_ = xmlDoc_->NewElement("Shader"); - n.getShader()->accept(*this); + n.shader()->accept(*this); Primitive->InsertEndChild(xmlCurrent_); // revert to primitive as current @@ -172,12 +172,12 @@ void SessionVisitor::visit(Mesh &n) // Node of a different type xmlCurrent_->SetAttribute("type", "Mesh"); - XMLText *filename = xmlDoc_->NewText( n.getResource().c_str() ); + XMLText *filename = xmlDoc_->NewText( n.meshPath().c_str() ); XMLElement *obj = xmlDoc_->NewElement("resource"); obj->InsertEndChild(filename); xmlCurrent_->InsertEndChild(obj); - filename = xmlDoc_->NewText( n.getTexture().c_str() ); + filename = xmlDoc_->NewText( n.texturePath().c_str() ); XMLElement *tex = xmlDoc_->NewElement("texture"); tex->InsertEndChild(filename); xmlCurrent_->InsertEndChild(tex); @@ -194,7 +194,7 @@ void SessionVisitor::visit(Scene &n) // start recursive traverse from root node xmlCurrent_ = xmlRoot_; - n.getRoot()->accept(*this); + n.root()->accept(*this); } void SessionVisitor::save(std::string filename) diff --git a/Source.cpp b/Source.cpp new file mode 100644 index 0000000..f339f6f --- /dev/null +++ b/Source.cpp @@ -0,0 +1,63 @@ + +#include + +#include "Source.h" + +// gobal static list of all sources +SourceList Source::sources_; + + +Source::Source(std::string name = "") : name_(""), buffer_(nullptr), shader_(nullptr), surface_(nullptr) +{ + // set a name + rename(name); + + // add source to the list + sources_.push_back(this); +} + +Source::~Source() +{ + sources_.remove(this); +} + +std::string Source::rename (std::string newname) +{ + // tentative new name + std::string tentativename = newname; + + // refuse to rename to an empty name + if ( newname.empty() ) + tentativename = "source"; + + // trivial case : same name as current + if ( tentativename == name_ ) + return name_; + + // search for a source of the name 'tentativename' + std::string basename = tentativename; + int count = 1; + while ( std::find_if(sources_.begin(), sources_.end(), hasName(tentativename)) != sources_.end() ) { + tentativename = basename + std::to_string(++count); + } + + // ok to rename + name_ = tentativename; + return name_; +} + + +SourceList::iterator Source::begin() +{ + return sources_.begin(); +} + +SourceList::iterator Source::end() +{ + return sources_.end(); +} + +uint Source::numSource() +{ + return sources_.size(); +} diff --git a/Source.h b/Source.h new file mode 100644 index 0000000..95e2bc3 --- /dev/null +++ b/Source.h @@ -0,0 +1,71 @@ +#ifndef SOURCE_H +#define SOURCE_H + +#include +#include + +#include "FrameBuffer.h" +#include "ImageShader.h" +#include "Primitives.h" + +class Source; +// TODO : source set sorted by shader +// so that the render loop avoid switching +typedef std::list SourceList; + +class Source +{ +public: + // create a source and add it to the list + Source(std::string name); + virtual ~Source(); + + // manipulate name of source + inline std::string name () const { return name_; } + std::string rename (std::string newname); + + // void setCustomShader(); + inline Shader *shader() const { return shader_; } + + // for scene + inline FrameBufferSurface *surface() const { return surface_; } + + // only subclasses of sources can actually be instanciated + virtual void render() = 0; + + // global management of list of sources + static SourceList::iterator begin(); + static SourceList::iterator end(); + static uint numSource(); + +protected: + // name + std::string name_; + + // a source draws in a frame buffer an input using a given shader + FrameBuffer *buffer_; + ImageShader *shader_; + + // a surface is used to draw in the scenes + FrameBufferSurface *surface_; + + // static global list of sources + static SourceList sources_; +}; + + +struct hasName: public std::unary_function +{ + inline bool operator()(const Source* elem) const + { + return (elem && elem->name() == _n); + } + + hasName(std::string n) : _n(n) { } + +private: + std::string _n; + +}; + +#endif // SOURCE_H diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index 3b5763f..79ee6c6 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -38,6 +38,7 @@ #include "FileDialog.h" #include "ImGuiToolkit.h" #include "GstToolkit.h" +#include "Mixer.h" static std::thread loadThread; static bool loadThreadDone = false; @@ -161,9 +162,25 @@ void UserInterface::handleMouse() if ( !ImGui::IsAnyWindowHovered() && !ImGui::IsAnyWindowFocused() ) { // Mouse wheel over background - if ( io.MouseWheel > 0) { + if ( io.MouseWheel != 0) { + Mixer::manager().currentView()->zoom( io.MouseWheel ); + Log::Info(" wheel %.1f", io.MouseWheel); + } + + if ( ImGui::IsMouseDragging(ImGuiMouseButton_Right, 10.0f) ) + { +// Log::Info("Mouse drag (%.1f,%.1f)(%.1f,%.1f)", io.MouseDelta.x, io.MouseDelta.y, io.MousePos.x, io.MousePos.y); + + Mixer::manager().currentView()->drag( glm::vec2(io.MouseClickedPos[ImGuiMouseButton_Right].x, io.MouseClickedPos[ImGuiMouseButton_Right].y), glm::vec2(io.MousePos.x, io.MousePos.y)); + + ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeAll); + + } + else { + + ImGui::SetMouseCursor(ImGuiMouseCursor_Arrow); } if ( ImGui::IsMouseDown(ImGuiMouseButton_Left)) { diff --git a/View.cpp b/View.cpp new file mode 100644 index 0000000..434a2b2 --- /dev/null +++ b/View.cpp @@ -0,0 +1,112 @@ +// Opengl +#include +#include +#include + +#include "defines.h" +#include "View.h" +#include "Primitives.h" +#include "Mesh.h" +#include "FrameBuffer.h" +#include "Log.h" + + +View::View() +{ +} + +void View::update(float dt) +{ + // recursive update from root of scene + scene.root()->update( dt ); +} + +MixingView::MixingView() : View() +{ + Mesh *disk = new Mesh("mesh/disk.ply", "images/transparencygrid.png"); + backgound_.addChild(disk); + + glm::vec4 pink( 0.8f, 0.f, 0.8f, 1.f ); + LineCircle *circle = new LineCircle(pink, 5); + backgound_.addChild(circle); + + + scene.root()->addChild(&backgound_); + scene.root()->addChild(&foreground_); + + // make sure there is no depth fight +// foreground.translation_ = glm::vec3(0.f, 0.f, 0.1f); +} + +MixingView::~MixingView() +{ + // delete background + for (NodeSet::iterator node = backgound_.begin(); node != backgound_.end(); node++) { + delete (*node); + } + +} + +void MixingView::draw() +{ + // draw in main view + scene.root()->draw(glm::identity(), Rendering::manager().Projection()); +} + +void MixingView::zoom( float factor ) +{ + float z = scene.root()->scale_.x; + z = CLAMP( z + 0.1f * factor, 0.2f, 10.f); + scene.root()->scale_.x = z; + scene.root()->scale_.y = z; + +} + +void MixingView::drag (glm::vec2 from, glm::vec2 to) +{ + static glm::vec3 start_translation = glm::vec3(0.f); + static glm::vec2 start_position = glm::vec2(0.f); + + if ( start_position != from ) { + start_position = from; + start_translation = scene.root()->translation_; + } + + // unproject + glm::vec3 gl_Position_from = Rendering::manager().unProject(from); + glm::vec3 gl_Position_to = Rendering::manager().unProject(to); + + // compute delta translation + scene.root()->translation_ = start_translation + gl_Position_to - gl_Position_from; + +} + +RenderView::RenderView() : View(), frame_buffer_(nullptr) +{ + setResolution(1280, 720); +} + +RenderView::~RenderView() +{ + if (frame_buffer_) + delete frame_buffer_; +} + + +void RenderView::setResolution(uint width, uint height) +{ + if (frame_buffer_) + delete frame_buffer_; + + frame_buffer_ = new FrameBuffer(width, height); +} + +void RenderView::draw() +{ + static glm::mat4 projection = glm::ortho(-SCENE_UNIT, SCENE_UNIT, -SCENE_UNIT, SCENE_UNIT, SCENE_DEPTH, 0.f); + glm::mat4 P = glm::scale( projection, glm::vec3(1.f, frame_buffer_->aspectRatio(), 1.f)); + frame_buffer_->begin(); + scene.root()->draw(glm::identity(), P); + frame_buffer_->end(); +} + diff --git a/View.h b/View.h new file mode 100644 index 0000000..f4a22e8 --- /dev/null +++ b/View.h @@ -0,0 +1,52 @@ +#ifndef VIEW_H +#define VIEW_H + +#include + +#include "Scene.h" +class FrameBuffer; + +class View +{ +public: + View(); + + virtual void update (float dt); + virtual void draw () = 0; + virtual void zoom (float) {} + virtual void drag (glm::vec2, glm::vec2) {} + + Scene scene; + +protected: + Group backgound_; + Group foreground_; +}; + + +class MixingView : public View +{ +public: + MixingView(); + ~MixingView(); + + void draw () override; + void zoom (float factor); + void drag (glm::vec2 from, glm::vec2 to); +}; + +class RenderView : public View +{ + FrameBuffer *frame_buffer_; + +public: + RenderView (); + ~RenderView (); + + void draw () override; + + void setResolution (uint width, uint height); + inline FrameBuffer *frameBuffer () const { return frame_buffer_; } + +}; +#endif // VIEW_H diff --git a/defines.h b/defines.h index 3b82525..1c2d214 100644 --- a/defines.h +++ b/defines.h @@ -16,7 +16,8 @@ #define EXP100(val) (exp(log(10.0)/50.0*(float)(val))-1.0) #define EUCLIDEAN(P1, P2) sqrt((P1.x() - P2.x()) * (P1.x() - P2.x()) + (P1.y() - P2.y()) * (P1.y() - P2.y())) -#define SCENE_UNIT 10.0 +#define SCENE_UNIT 5.f +#define SCENE_DEPTH -10.f #define CIRCLE_SQUARE_DIST(x,y) ( (x*x + y*y) / (SCENE_UNIT * SCENE_UNIT * SCENE_UNIT * SCENE_UNIT) ) #define IMGUI_TITLE_MAINWINDOW ICON_FA_CIRCLE_NOTCH " v-mix" diff --git a/main.cpp b/main.cpp index 0b0ea3b..a8b3949 100644 --- a/main.cpp +++ b/main.cpp @@ -16,24 +16,27 @@ #include #include #include +#include "GstToolkit.h" + +// imgui +#include "imgui.h" +#include "ImGuiToolkit.h" +#include "ImGuiVisitor.h" // vmix #include "defines.h" -#include "ImageShader.h" #include "Settings.h" -#include "Resource.h" -#include "FrameBuffer.h" + +// mixing +#include "Mixer.h" #include "RenderingManager.h" #include "UserInterfaceManager.h" -#include "imgui.h" -#include "ImGuiToolkit.h" -#include "GstToolkit.h" + #include "MediaPlayer.h" #include "Scene.h" #include "Primitives.h" #include "Mesh.h" -#include "ImGuiVisitor.h" #include "SessionVisitor.h" #define PI 3.14159265358979323846 @@ -50,9 +53,8 @@ //// ("file:///home/bhbn/Videos/iss.mov"); //// ("file:///home/bhbn/Videos//iss.mov"); //// ("file:///Users/Herbelin/Movies/mp2test.mpg"); -/// -Scene scene; -FrameBuffer *output; + + MediaSurface testnode1("file:///home/bhbn/Videos/iss.mov"); MediaSurface testnode2("file:///home/bhbn/Videos/fish.mp4"); ImageSurface testnode3("images/seed_512.jpg"); @@ -170,35 +172,42 @@ void drawMediaPlayer() void drawScene() { - // compute dt - static gint64 last_time = gst_util_get_timestamp (); - gint64 current_time = gst_util_get_timestamp (); - gint64 dt = current_time - last_time; - last_time = current_time; +// // compute dt +// static gint64 last_time = gst_util_get_timestamp (); +// gint64 current_time = gst_util_get_timestamp (); +// gint64 dt = current_time - last_time; +// last_time = current_time; - // recursive update from root of scene - scene.root_.update( static_cast( GST_TIME_AS_MSECONDS(dt)) * 0.001f ); +// // recursive update from root of scene +// scene.root()->update( static_cast( GST_TIME_AS_MSECONDS(dt)) * 0.001f ); - // draw in output frame buffer - glm::mat4 MV = glm::identity(); - glm::mat4 P = glm::scale( glm::ortho(-5.f, 5.f, -5.f, 5.f), glm::vec3(1.f, output->aspectRatio(), 1.f)); - output->begin(); - scene.root_.draw(MV, P); - output->end(); +// // draw in output frame buffer +// glm::mat4 MV = glm::identity(); - // draw in main view - scene.root_.draw(MV, Rendering::manager().Projection()); +// static glm::mat4 projection = glm::ortho(-SCENE_UNIT, SCENE_UNIT, -SCENE_UNIT, SCENE_UNIT, SCENE_DEPTH, 0.f); +// glm::mat4 P = glm::scale( projection, glm::vec3(1.f, output->aspectRatio(), 1.f)); +// output->begin(); +// scene.root()->draw(MV, P); +// output->end(); + +// // draw in main view +// scene.root()->draw(MV, Rendering::manager().Projection()); + + Mixer::manager().update(); + + Mixer::manager().draw(); // draw GUI tree scene ImGui::Begin(IMGUI_TITLE_MAINWINDOW); static ImGuiVisitor v; - scene.accept(v); + Mixer::manager().currentView()->scene.accept(v); ImGui::End(); } void drawPreview() { + FrameBuffer *output = Mixer::manager().frame(); if (output) { ImGui::SetNextWindowPos(ImVec2(100, 300), ImGuiCond_FirstUseEver); @@ -246,6 +255,7 @@ int main(int, char**) // UserInterface::manager().OpenTextEditor( Resource::getText("shaders/texture-shader.fs") ); // init the scene + Mixer::manager().setCurrentView(Mixer::MIXING); Rendering::manager().PushFrontDrawCallback(drawScene); // init elements to the scene @@ -256,53 +266,51 @@ int main(int, char**) glm::vec4 pink( 0.8f, 0.f, 0.8f, 1.f ); LineCircle circle(pink, 5); - glm::vec4 color( 0.8f, 0.8f, 0.f, 1.f); - LineSquare border(color, 5); - Mesh shadow("mesh/shadow.ply", "mesh/shadow.png"); +// glm::vec4 color( 0.8f, 0.8f, 0.f, 1.f); +// LineSquare border(color, 5); +// Mesh shadow("mesh/shadow.ply", "mesh/shadow.png"); +// Mesh meshicon("mesh/icon_video.ply"); + + Frame frame; + frame.scale_ = glm::vec3(1.7777778f, 1.f, 1.f); Group g1; - g1.translation_ = glm::vec3(1.f, 1.f, 0.2f); + g1.translation_ = glm::vec3(1.f, 1.f, 1.f); g1.scale_ = glm::vec3(0.8f, 0.8f, 1.f); Group g2; - g2.translation_ = glm::vec3(-1.f, -1.f, 0.4f); + g2.translation_ = glm::vec3(-1.f, -1.f, 2.f); Animation A; - A.speed_ = 0.05f; + A.translation_ = glm::vec3(0.f, 0.f, 3.f); + A.speed_ = 0.1f; A.axis_ = glm::vec3(1.f, 1.f, 1.f); // std::vector pts = std::vector { glm::vec3( 0.f, 0.f, 0.f ) }; // Points P(pts, pink); // P.setPointSize(60); - Mesh P("mesh/target.ply"); + Mesh P("mesh/point.ply"); P.scale_ = glm::vec3(0.15f); - Mesh meshicon("mesh/icon_video.ply"); - // build tree - scene.root_.addChild(&disk); - scene.root_.addChild(&circle); + Mixer::manager().currentView()->scene.root()->addChild(&disk); + Mixer::manager().currentView()->scene.root()->addChild(&circle); g1.addChild(&testnode3); - g1.addChild(&border); - g1.addChild(&shadow); - scene.root_.addChild(&g1); + Mixer::manager().currentView()->scene.root()->addChild(&g1); g2.addChild(&testnode1); - g2.addChild(&border); - g2.addChild(&shadow); - g2.addChild(&meshicon); - scene.root_.addChild(&g2); + g2.addChild(&frame); + Mixer::manager().currentView()->scene.root()->addChild(&g2); A.addChild(&P); - scene.root_.addChild(&A); + Mixer::manager().currentView()->scene.root()->addChild(&A); // init output FBO - output = new FrameBuffer(1280, 720); Rendering::manager().PushBackDrawCallback(drawPreview); // add media player - Rendering::manager().PushBackDrawCallback(drawMediaPlayer); +// Rendering::manager().PushBackDrawCallback(drawMediaPlayer); /// /// Main LOOP @@ -313,10 +321,6 @@ int main(int, char**) } - SessionVisitor savetoxml; - scene.accept(savetoxml); - savetoxml.save("/home/bhbn/test.vmx"); - UserInterface::manager().Terminate(); Rendering::manager().Terminate(); diff --git a/rsc/mesh/border.ply b/rsc/mesh/border.ply index d5b85d9..2a68fe9 100644 --- a/rsc/mesh/border.ply +++ b/rsc/mesh/border.ply @@ -1,7 +1,7 @@ ply format ascii 1.0 comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border.blend' -element vertex 72 +element vertex 45 property float x property float y property float z @@ -9,174 +9,107 @@ property uchar red property uchar green property uchar blue property uchar alpha -element face 96 +element face 56 property list uchar uint vertex_indices end_header --1.026677 0.976163 0.000000 255 255 255 255 --1.011723 0.988680 0.000000 255 255 255 255 --1.013049 0.963196 0.000000 255 255 255 255 --1.025333 1.001990 0.000000 255 255 255 255 --1.002709 1.003049 0.000000 255 255 255 255 --0.991672 0.992002 0.000000 255 255 255 255 --1.000587 0.977791 0.000000 255 255 255 255 --0.986586 1.010839 0.000000 255 255 255 255 --0.962045 1.013040 0.000000 255 255 255 255 --0.975727 0.999706 0.000000 255 255 255 255 --0.950140 1.000495 0.000000 255 255 255 255 --0.000007 1.013040 0.000000 255 255 255 255 --0.000013 1.000495 0.000000 255 255 255 255 -0.000000 1.026677 0.000000 255 255 255 255 -0.962791 1.013040 0.000000 255 255 255 255 -0.950865 1.000495 0.000000 255 255 255 255 -0.971288 0.999918 0.000000 255 255 255 255 -0.982108 1.011054 0.000000 255 255 255 255 -0.991471 0.991066 0.000000 255 255 255 255 -1.010913 0.981270 0.000000 255 255 255 255 -1.002515 1.002103 0.000000 255 255 255 255 -1.013035 0.962582 0.000000 255 255 255 255 -0.999776 0.970463 0.000000 255 255 255 255 -1.026677 0.975541 0.000000 255 255 255 255 -1.024526 0.994481 0.000000 255 255 255 255 -1.016015 1.015594 0.000000 255 255 255 255 -0.995334 1.024665 0.000000 255 255 255 255 -0.975757 1.026677 0.000000 255 255 255 255 --0.974986 1.026677 0.000000 255 255 255 255 --0.999859 1.024447 0.000000 255 255 255 255 --1.016198 1.016553 0.000000 255 255 255 255 -1.026677 0.000000 0.000000 255 255 255 255 -1.013035 -0.962588 0.000000 255 255 255 255 -1.013035 -0.000003 0.000000 255 255 255 255 -1.026677 -0.975541 0.000000 255 255 255 255 -1.010751 -0.987179 0.000000 255 255 255 255 -0.999616 -0.976310 0.000000 255 255 255 255 -1.000487 -0.950672 0.000000 255 255 255 255 -0.991132 -0.991616 0.000000 255 255 255 255 -0.984074 -1.010769 0.000000 255 255 255 255 -1.002173 -1.002655 0.000000 255 255 255 255 -0.961848 -1.013045 0.000000 255 255 255 255 -0.973233 -0.999640 0.000000 255 255 255 255 -0.974801 -1.026677 0.000000 255 255 255 255 -0.997326 -1.024371 0.000000 255 255 255 255 -1.015669 -1.016148 0.000000 255 255 255 255 -1.024362 -1.000464 0.000000 255 255 255 255 -1.000487 0.950662 0.000000 255 255 255 255 --1.026677 -0.974622 0.000000 255 255 255 255 --1.011117 -0.987925 0.000000 255 255 255 255 --1.024719 -1.001219 0.000000 255 255 255 255 --1.013049 -0.961680 0.000000 255 255 255 255 --0.999987 -0.977048 0.000000 255 255 255 255 --0.992284 -0.992011 0.000000 255 255 255 255 --1.003327 -1.003055 0.000000 255 255 255 255 --1.002193 -1.025218 0.000000 255 255 255 255 --1.016824 -1.016553 0.000000 255 255 255 255 --0.988890 -1.011604 0.000000 255 255 255 255 --0.978005 -1.000466 0.000000 255 255 255 255 --0.963002 -1.013045 0.000000 255 255 255 255 --0.951086 -1.000505 0.000000 255 255 255 255 --0.000007 -1.013045 0.000000 255 255 255 255 -0.949933 -1.000505 0.000000 255 255 255 255 -0.000000 -1.026677 0.000000 255 255 255 255 --0.975957 -1.026677 0.000000 255 255 255 255 --1.026677 0.000000 0.000000 255 255 255 255 --1.013049 -0.000003 0.000000 255 255 255 255 --1.000513 0.951268 0.000000 255 255 255 255 --1.000513 -0.000005 0.000000 255 255 255 255 --1.000513 -0.949776 0.000000 255 255 255 255 -1.000487 -0.000005 0.000000 255 255 255 255 --0.000013 -1.000505 0.000000 255 255 255 255 +-0.950647 -1.000000 0.000000 255 255 255 255 +-0.000071 -1.013523 0.000000 255 255 255 255 +-0.000077 -1.000000 0.000000 255 255 255 255 +-0.962557 -1.013523 0.000000 255 255 255 255 +-0.000064 -1.027167 0.000000 255 255 255 255 +0.963176 -1.013523 0.000000 255 255 255 255 +0.951244 -1.000000 0.000000 255 255 255 255 +0.971677 -1.000395 0.000000 255 255 255 255 +0.982502 -1.011536 0.000000 255 255 255 255 +0.991868 -0.991539 0.000000 255 255 255 255 +1.011320 -0.981739 0.000000 255 255 255 255 +1.002918 -1.002581 0.000000 255 255 255 255 +1.013443 -0.963042 0.000000 255 255 255 255 +1.000178 -0.970926 0.000000 255 255 255 255 +1.027092 -0.976006 0.000000 255 255 255 255 +1.024939 -0.994955 0.000000 255 255 255 255 +1.016425 -1.016078 0.000000 255 255 255 255 +0.995733 -1.025153 0.000000 255 255 255 255 +0.976147 -1.027167 0.000000 255 255 255 255 +1.027092 -0.000011 0.000000 255 255 255 255 +1.013443 0.963025 0.000000 255 255 255 255 +1.013443 -0.000008 0.000000 255 255 255 255 +1.027092 0.975985 0.000000 255 255 255 255 +1.011158 0.987628 0.000000 255 255 255 255 +1.000017 0.976754 0.000000 255 255 255 255 +1.000000 0.951104 0.000000 255 255 255 255 +0.991530 0.992067 0.000000 255 255 255 255 +0.984469 1.011229 0.000000 255 255 255 255 +1.002576 1.003111 0.000000 255 255 255 255 +0.962232 1.013506 0.000000 255 255 255 255 +0.973622 1.000095 0.000000 255 255 255 255 +0.975191 1.027145 0.000000 255 255 255 255 +0.997727 1.024837 0.000000 255 255 255 255 +1.016078 1.016610 0.000000 255 255 255 255 +1.024775 1.000919 0.000000 255 255 255 255 +1.000889 -0.951116 0.000000 255 255 255 255 +-0.951593 1.000000 0.000000 255 255 255 255 +-0.000071 1.013506 0.000000 255 255 255 255 +-0.963515 1.013506 0.000000 255 255 255 255 +0.950312 1.000000 0.000000 255 255 255 255 +-0.000064 1.027145 0.000000 255 255 255 255 +-0.975505 -1.027167 0.000000 255 255 255 255 +1.000000 0.000000 0.000000 255 255 255 255 +-0.000064 1.000000 0.000000 255 255 255 255 +-0.976476 1.027145 0.000000 255 255 255 255 3 0 1 2 3 3 4 1 -3 1 5 6 -3 7 5 4 +3 4 5 1 +3 1 6 2 +3 5 7 6 3 8 9 7 -3 10 11 12 -3 8 13 11 -3 13 14 11 -3 11 15 12 -3 14 16 15 -3 17 18 16 -3 19 18 20 -3 21 22 19 -3 19 23 21 -3 24 20 25 -3 20 26 25 -3 17 27 26 -3 28 7 29 -3 29 4 30 -3 6 2 1 -3 31 21 23 -3 31 32 33 -3 34 35 32 -3 32 36 37 -3 35 38 36 -3 39 38 40 -3 41 42 39 -3 39 43 41 -3 44 40 45 -3 40 46 45 -3 37 33 32 -3 33 47 21 -3 48 49 50 -3 51 52 49 -3 53 49 52 -3 54 50 49 -3 54 55 56 -3 57 53 58 -3 58 59 57 -3 60 61 59 -3 61 62 41 -3 41 63 61 -3 63 59 61 -3 64 57 59 -3 65 51 48 -3 65 2 66 -3 66 67 68 -3 69 66 68 +3 10 9 11 +3 12 13 10 +3 10 14 12 +3 15 11 16 +3 11 17 16 +3 8 18 17 +3 19 12 14 +3 19 20 21 +3 22 23 20 +3 20 24 25 +3 23 26 24 +3 27 26 28 +3 29 30 27 +3 27 31 29 +3 32 28 33 +3 28 34 33 +3 25 21 20 +3 21 35 12 +3 36 37 38 +3 37 39 29 +3 29 40 37 +3 40 38 37 3 0 3 1 -3 3 30 4 -3 1 4 5 -3 7 9 5 -3 8 10 9 -3 10 8 11 -3 8 28 13 -3 13 27 14 -3 11 14 15 -3 14 17 16 -3 17 20 18 -3 19 22 18 -3 21 47 22 -3 19 24 23 -3 24 19 20 -3 20 17 26 -3 17 14 27 -3 28 8 7 -3 29 7 4 -3 6 67 2 -3 31 33 21 -3 31 34 32 -3 34 46 35 -3 32 35 36 -3 35 40 38 -3 39 42 38 -3 41 62 42 -3 39 44 43 -3 44 39 40 -3 40 35 46 -3 37 70 33 -3 33 70 47 -3 48 51 49 -3 51 69 52 -3 53 54 49 -3 54 56 50 -3 54 57 55 -3 57 54 53 -3 58 60 59 -3 60 71 61 -3 61 71 62 -3 41 43 63 -3 63 64 59 -3 64 55 57 -3 65 66 51 -3 65 0 2 -3 66 2 67 -3 69 51 66 +3 3 41 4 +3 4 18 5 +3 1 5 6 +3 5 8 7 +3 8 11 9 +3 10 13 9 +3 12 35 13 +3 10 15 14 +3 15 10 11 +3 11 8 17 +3 8 5 18 +3 19 21 12 +3 19 22 20 +3 22 34 23 +3 20 23 24 +3 23 28 26 +3 27 30 26 +3 29 39 30 +3 27 32 31 +3 32 27 28 +3 28 23 34 +3 25 42 21 +3 21 42 35 +3 36 43 37 +3 37 43 39 +3 29 31 40 +3 40 44 38 diff --git a/rsc/mesh/icon_image.ply b/rsc/mesh/icon_image.ply index 91bd762..5d7d9b7 100644 --- a/rsc/mesh/icon_image.ply +++ b/rsc/mesh/icon_image.ply @@ -12,67 +12,67 @@ property uchar alpha element face 57 property list uchar uint vertex_indices end_header --0.656711 -0.879600 0.000000 255 255 255 255 --0.677007 -0.717270 0.000000 255 255 255 255 --0.656711 -0.696979 0.000000 255 255 255 255 --0.900258 -0.696979 0.000000 255 255 255 255 --0.879962 -0.717270 0.000000 255 255 255 255 --0.900258 -0.879600 0.000000 255 255 255 255 --0.677007 -0.859309 0.000000 255 255 255 255 --0.879962 -0.859309 0.000000 255 255 255 255 --0.720607 -0.737700 0.000000 255 255 255 255 --0.724736 -0.737700 0.000000 255 255 255 255 --0.722672 -0.737561 0.000000 255 255 255 255 --0.726717 -0.738105 0.000000 255 255 255 255 --0.718627 -0.738105 0.000000 255 255 255 255 --0.728595 -0.738758 0.000000 255 255 255 255 --0.716749 -0.738758 0.000000 255 255 255 255 --0.730353 -0.739640 0.000000 255 255 255 255 --0.714991 -0.739640 0.000000 255 255 255 255 --0.731971 -0.740733 0.000000 255 255 255 255 --0.713372 -0.740733 0.000000 255 255 255 255 --0.733433 -0.742020 0.000000 255 255 255 255 --0.711910 -0.742020 0.000000 255 255 255 255 --0.734720 -0.743482 0.000000 255 255 255 255 --0.710623 -0.743482 0.000000 255 255 255 255 --0.735814 -0.745100 0.000000 255 255 255 255 --0.709529 -0.745100 0.000000 255 255 255 255 --0.736697 -0.746858 0.000000 255 255 255 255 --0.708647 -0.746858 0.000000 255 255 255 255 --0.737349 -0.748735 0.000000 255 255 255 255 --0.707994 -0.748735 0.000000 255 255 255 255 --0.737754 -0.750715 0.000000 255 255 255 255 --0.707589 -0.750715 0.000000 255 255 255 255 --0.737893 -0.752780 0.000000 255 255 255 255 --0.707450 -0.752780 0.000000 255 255 255 255 --0.707589 -0.754846 0.000000 255 255 255 255 --0.737754 -0.754846 0.000000 255 255 255 255 --0.707994 -0.756827 0.000000 255 255 255 255 --0.737349 -0.756827 0.000000 255 255 255 255 --0.708647 -0.758706 0.000000 255 255 255 255 --0.736697 -0.758706 0.000000 255 255 255 255 --0.773218 -0.798435 0.000000 255 255 255 255 --0.849519 -0.839018 0.000000 255 255 255 255 --0.798780 -0.757852 0.000000 255 255 255 255 --0.709529 -0.760463 0.000000 255 255 255 255 --0.735814 -0.760463 0.000000 255 255 255 255 --0.710623 -0.762082 0.000000 255 255 255 255 --0.734720 -0.762082 0.000000 255 255 255 255 --0.711910 -0.763543 0.000000 255 255 255 255 --0.733433 -0.763543 0.000000 255 255 255 255 --0.713372 -0.764829 0.000000 255 255 255 255 --0.731971 -0.764829 0.000000 255 255 255 255 --0.714991 -0.765922 0.000000 255 255 255 255 --0.730353 -0.765922 0.000000 255 255 255 255 --0.716749 -0.766803 0.000000 255 255 255 255 --0.728595 -0.766803 0.000000 255 255 255 255 --0.718627 -0.767455 0.000000 255 255 255 255 --0.726717 -0.767455 0.000000 255 255 255 255 --0.720607 -0.767859 0.000000 255 255 255 255 --0.724736 -0.767859 0.000000 255 255 255 255 --0.722672 -0.767998 0.000000 255 255 255 255 --0.707450 -0.839018 0.000000 255 255 255 255 --0.748041 -0.778550 0.000000 255 255 255 255 +0.640531 -0.899390 0.000000 255 255 255 255 +0.662011 -0.727588 0.000000 255 255 255 255 +0.640531 -0.706113 0.000000 255 255 255 255 +0.898289 -0.706113 0.000000 255 255 255 255 +0.876809 -0.727588 0.000000 255 255 255 255 +0.898289 -0.899390 0.000000 255 255 255 255 +0.662011 -0.877915 0.000000 255 255 255 255 +0.876809 -0.877915 0.000000 255 255 255 255 +0.708155 -0.749211 0.000000 255 255 255 255 +0.712525 -0.749211 0.000000 255 255 255 255 +0.710340 -0.749063 0.000000 255 255 255 255 +0.714621 -0.749639 0.000000 255 255 255 255 +0.706059 -0.749639 0.000000 255 255 255 255 +0.716609 -0.750330 0.000000 255 255 255 255 +0.704072 -0.750330 0.000000 255 255 255 255 +0.718469 -0.751263 0.000000 255 255 255 255 +0.702211 -0.751263 0.000000 255 255 255 255 +0.720183 -0.752421 0.000000 255 255 255 255 +0.700498 -0.752421 0.000000 255 255 255 255 +0.721730 -0.753783 0.000000 255 255 255 255 +0.698951 -0.753783 0.000000 255 255 255 255 +0.723092 -0.755330 0.000000 255 255 255 255 +0.697589 -0.755330 0.000000 255 255 255 255 +0.724250 -0.757043 0.000000 255 255 255 255 +0.696431 -0.757043 0.000000 255 255 255 255 +0.725183 -0.758902 0.000000 255 255 255 255 +0.695497 -0.758902 0.000000 255 255 255 255 +0.725874 -0.760890 0.000000 255 255 255 255 +0.694806 -0.760890 0.000000 255 255 255 255 +0.726303 -0.762985 0.000000 255 255 255 255 +0.694378 -0.762985 0.000000 255 255 255 255 +0.726450 -0.765170 0.000000 255 255 255 255 +0.694230 -0.765170 0.000000 255 255 255 255 +0.694378 -0.767357 0.000000 255 255 255 255 +0.726303 -0.767357 0.000000 255 255 255 255 +0.694806 -0.769454 0.000000 255 255 255 255 +0.725874 -0.769454 0.000000 255 255 255 255 +0.695497 -0.771442 0.000000 255 255 255 255 +0.725183 -0.771442 0.000000 255 255 255 255 +0.763836 -0.813489 0.000000 255 255 255 255 +0.844589 -0.856440 0.000000 255 255 255 255 +0.790890 -0.770539 0.000000 255 255 255 255 +0.696431 -0.773302 0.000000 255 255 255 255 +0.724250 -0.773302 0.000000 255 255 255 255 +0.697589 -0.775015 0.000000 255 255 255 255 +0.723092 -0.775015 0.000000 255 255 255 255 +0.698951 -0.776561 0.000000 255 255 255 255 +0.721730 -0.776561 0.000000 255 255 255 255 +0.700498 -0.777922 0.000000 255 255 255 255 +0.720183 -0.777922 0.000000 255 255 255 255 +0.702211 -0.779079 0.000000 255 255 255 255 +0.718469 -0.779079 0.000000 255 255 255 255 +0.704072 -0.780011 0.000000 255 255 255 255 +0.716609 -0.780011 0.000000 255 255 255 255 +0.706059 -0.780701 0.000000 255 255 255 255 +0.714621 -0.780701 0.000000 255 255 255 255 +0.708155 -0.781129 0.000000 255 255 255 255 +0.712525 -0.781129 0.000000 255 255 255 255 +0.710340 -0.781276 0.000000 255 255 255 255 +0.694230 -0.856440 0.000000 255 255 255 255 +0.737190 -0.792443 0.000000 255 255 255 255 3 0 1 2 3 1 3 2 3 1 4 3 diff --git a/rsc/mesh/icon_video.ply b/rsc/mesh/icon_video.ply index 337c6a1..c6d9089 100644 --- a/rsc/mesh/icon_video.ply +++ b/rsc/mesh/icon_video.ply @@ -1,7 +1,7 @@ ply format ascii 1.0 comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'icons.blend' -element vertex 61 +element vertex 64 property float x property float y property float z @@ -9,124 +9,150 @@ property uchar red property uchar green property uchar blue property uchar alpha -element face 57 +element face 80 property list uchar uint vertex_indices end_header -0.656711 -0.879600 0.000000 255 255 255 255 -0.677007 -0.717270 0.000000 255 255 255 255 -0.656711 -0.696979 0.000000 255 255 255 255 -0.900258 -0.696979 0.000000 255 255 255 255 -0.879962 -0.717270 0.000000 255 255 255 255 -0.900258 -0.879600 0.000000 255 255 255 255 -0.677007 -0.859309 0.000000 255 255 255 255 -0.879962 -0.859309 0.000000 255 255 255 255 -0.720607 -0.737700 0.000000 255 255 255 255 -0.724736 -0.737700 0.000000 255 255 255 255 -0.722672 -0.737561 0.000000 255 255 255 255 -0.726717 -0.738105 0.000000 255 255 255 255 -0.718627 -0.738105 0.000000 255 255 255 255 -0.728595 -0.738758 0.000000 255 255 255 255 -0.716749 -0.738758 0.000000 255 255 255 255 -0.730353 -0.739640 0.000000 255 255 255 255 -0.714991 -0.739640 0.000000 255 255 255 255 -0.731971 -0.740733 0.000000 255 255 255 255 -0.713372 -0.740733 0.000000 255 255 255 255 -0.733433 -0.742020 0.000000 255 255 255 255 -0.711910 -0.742020 0.000000 255 255 255 255 -0.734720 -0.743482 0.000000 255 255 255 255 -0.710623 -0.743482 0.000000 255 255 255 255 -0.735814 -0.745100 0.000000 255 255 255 255 -0.709529 -0.745100 0.000000 255 255 255 255 -0.736697 -0.746858 0.000000 255 255 255 255 -0.708647 -0.746858 0.000000 255 255 255 255 -0.737349 -0.748735 0.000000 255 255 255 255 -0.707994 -0.748735 0.000000 255 255 255 255 -0.737754 -0.750715 0.000000 255 255 255 255 -0.707589 -0.750715 0.000000 255 255 255 255 -0.737893 -0.752780 0.000000 255 255 255 255 -0.707450 -0.752780 0.000000 255 255 255 255 -0.707589 -0.754846 0.000000 255 255 255 255 -0.737754 -0.754846 0.000000 255 255 255 255 -0.707994 -0.756827 0.000000 255 255 255 255 -0.737349 -0.756827 0.000000 255 255 255 255 -0.708647 -0.758706 0.000000 255 255 255 255 -0.736697 -0.758706 0.000000 255 255 255 255 -0.773218 -0.798435 0.000000 255 255 255 255 -0.849519 -0.839018 0.000000 255 255 255 255 -0.798780 -0.757852 0.000000 255 255 255 255 -0.709529 -0.760463 0.000000 255 255 255 255 -0.735814 -0.760463 0.000000 255 255 255 255 -0.710623 -0.762082 0.000000 255 255 255 255 -0.734720 -0.762082 0.000000 255 255 255 255 -0.711910 -0.763543 0.000000 255 255 255 255 -0.733433 -0.763543 0.000000 255 255 255 255 -0.713372 -0.764829 0.000000 255 255 255 255 -0.731971 -0.764829 0.000000 255 255 255 255 -0.714991 -0.765922 0.000000 255 255 255 255 -0.730353 -0.765922 0.000000 255 255 255 255 -0.716749 -0.766803 0.000000 255 255 255 255 -0.728595 -0.766803 0.000000 255 255 255 255 -0.718627 -0.767455 0.000000 255 255 255 255 -0.726717 -0.767455 0.000000 255 255 255 255 -0.720607 -0.767859 0.000000 255 255 255 255 -0.724736 -0.767859 0.000000 255 255 255 255 -0.722672 -0.767998 0.000000 255 255 255 255 -0.707450 -0.839018 0.000000 255 255 255 255 -0.748041 -0.778550 0.000000 255 255 255 255 +0.658177 -0.900641 0.000000 255 255 255 255 +0.678184 -0.680614 0.000000 255 255 255 255 +0.658177 -0.680614 0.000000 255 255 255 255 +0.678184 -0.700617 0.000000 255 255 255 255 +0.698190 -0.700617 0.000000 255 255 255 255 +0.718197 -0.680614 0.000000 255 255 255 255 +0.698190 -0.680614 0.000000 255 255 255 255 +0.718197 -0.720619 0.000000 255 255 255 255 +0.838237 -0.720619 0.000000 255 255 255 255 +0.858243 -0.680614 0.000000 255 255 255 255 +0.838237 -0.680614 0.000000 255 255 255 255 +0.858243 -0.700617 0.000000 255 255 255 255 +0.878250 -0.700617 0.000000 255 255 255 255 +0.898256 -0.680614 0.000000 255 255 255 255 +0.878250 -0.680614 0.000000 255 255 255 255 +0.898256 -0.900641 0.000000 255 255 255 255 +0.678184 -0.720619 0.000000 255 255 255 255 +0.858243 -0.720619 0.000000 255 255 255 255 +0.878250 -0.720619 0.000000 255 255 255 255 +0.678184 -0.740622 0.000000 255 255 255 255 +0.698190 -0.720619 0.000000 255 255 255 255 +0.698190 -0.740622 0.000000 255 255 255 255 +0.858243 -0.740622 0.000000 255 255 255 255 +0.878250 -0.740622 0.000000 255 255 255 255 +0.678184 -0.760624 0.000000 255 255 255 255 +0.718197 -0.750623 0.000000 255 255 255 255 +0.838237 -0.750623 0.000000 255 255 255 255 +0.878250 -0.760624 0.000000 255 255 255 255 +0.698190 -0.760624 0.000000 255 255 255 255 +0.718197 -0.830632 0.000000 255 255 255 255 +0.838237 -0.830632 0.000000 255 255 255 255 +0.858243 -0.760624 0.000000 255 255 255 255 +0.678184 -0.780626 0.000000 255 255 255 255 +0.698190 -0.780626 0.000000 255 255 255 255 +0.858243 -0.780626 0.000000 255 255 255 255 +0.878250 -0.780626 0.000000 255 255 255 255 +0.678184 -0.800629 0.000000 255 255 255 255 +0.698190 -0.800629 0.000000 255 255 255 255 +0.858243 -0.800629 0.000000 255 255 255 255 +0.878250 -0.800629 0.000000 255 255 255 255 +0.678184 -0.820631 0.000000 255 255 255 255 +0.698190 -0.820631 0.000000 255 255 255 255 +0.858243 -0.820631 0.000000 255 255 255 255 +0.878250 -0.820631 0.000000 255 255 255 255 +0.678184 -0.840634 0.000000 255 255 255 255 +0.878250 -0.840634 0.000000 255 255 255 255 +0.678184 -0.860636 0.000000 255 255 255 255 +0.698190 -0.840634 0.000000 255 255 255 255 +0.698190 -0.860636 0.000000 255 255 255 255 +0.858243 -0.840634 0.000000 255 255 255 255 +0.858243 -0.860636 0.000000 255 255 255 255 +0.878250 -0.860636 0.000000 255 255 255 255 +0.678184 -0.880638 0.000000 255 255 255 255 +0.718197 -0.860636 0.000000 255 255 255 255 +0.698190 -0.880638 0.000000 255 255 255 255 +0.718197 -0.900641 0.000000 255 255 255 255 +0.838237 -0.860636 0.000000 255 255 255 255 +0.838237 -0.900641 0.000000 255 255 255 255 +0.858243 -0.880638 0.000000 255 255 255 255 +0.878250 -0.880638 0.000000 255 255 255 255 +0.678184 -0.900641 0.000000 255 255 255 255 +0.698190 -0.900641 0.000000 255 255 255 255 +0.858243 -0.900641 0.000000 255 255 255 255 +0.878250 -0.900641 0.000000 255 255 255 255 3 0 1 2 -3 1 3 2 -3 1 4 3 -3 4 5 3 -3 0 6 1 -3 7 5 4 +3 0 3 1 +3 4 5 6 +3 4 7 5 3 8 9 10 3 8 11 9 -3 12 11 8 -3 12 13 11 -3 14 13 12 -3 14 15 13 -3 16 15 14 -3 16 17 15 -3 18 17 16 -3 18 19 17 -3 20 19 18 -3 20 21 19 -3 22 21 20 -3 22 23 21 -3 24 23 22 -3 24 25 23 -3 26 25 24 -3 26 27 25 -3 28 27 26 -3 28 29 27 -3 30 29 28 -3 30 31 29 -3 32 31 30 -3 33 31 32 -3 33 34 31 -3 35 34 33 -3 35 36 34 -3 37 36 35 -3 37 38 36 -3 39 40 41 -3 42 38 37 -3 42 43 38 -3 44 43 42 -3 44 45 43 -3 46 45 44 -3 46 47 45 -3 48 47 46 +3 12 13 14 +3 12 15 13 +3 0 16 3 +3 16 4 3 +3 16 7 4 +3 8 12 11 +3 8 17 12 +3 17 18 12 +3 18 15 12 +3 0 19 16 +3 20 7 16 +3 21 7 20 +3 21 8 7 +3 21 17 8 +3 21 22 17 +3 23 15 18 +3 0 24 19 +3 24 21 19 +3 24 25 21 +3 25 22 21 +3 25 23 22 +3 25 26 23 +3 26 27 23 +3 27 15 23 +3 24 28 25 +3 28 29 25 +3 30 31 26 +3 31 27 26 +3 0 32 24 +3 33 29 28 +3 30 34 31 +3 35 15 27 +3 0 36 32 +3 36 33 32 +3 36 37 33 +3 37 29 33 +3 30 38 34 +3 38 35 34 +3 38 39 35 +3 39 15 35 +3 0 40 36 +3 41 29 37 +3 30 42 38 +3 43 15 39 +3 0 44 40 +3 44 41 40 +3 44 29 41 +3 30 43 42 +3 30 45 43 +3 45 15 43 +3 44 30 29 +3 44 45 30 +3 0 46 44 +3 47 45 44 3 48 49 47 -3 50 49 48 -3 50 51 49 -3 52 51 50 -3 52 53 51 -3 54 53 52 +3 49 45 47 +3 48 50 49 +3 51 15 45 +3 0 52 46 +3 52 48 46 +3 52 53 48 +3 53 50 48 +3 52 54 53 3 54 55 53 -3 56 55 54 -3 56 57 55 -3 58 57 56 -3 59 39 60 -3 59 40 39 -3 0 7 6 -3 0 5 7 +3 56 50 53 +3 57 50 56 +3 57 58 50 +3 58 51 50 +3 58 59 51 +3 59 15 51 +3 0 60 52 +3 61 55 54 +3 57 62 58 +3 63 15 59 diff --git a/rsc/mesh/point.ply b/rsc/mesh/point.ply index c1f68ae..a05a1df 100644 --- a/rsc/mesh/point.ply +++ b/rsc/mesh/point.ply @@ -5,6 +5,11 @@ element vertex 97 property float x property float y property float z +property float nx +property float ny +property float nz +property float s +property float t property uchar red property uchar green property uchar blue @@ -12,103 +17,103 @@ property uchar alpha element face 160 property list uchar uint vertex_indices end_header --0.828712 -0.553724 0.000000 255 255 255 255 --0.696734 -0.696731 0.000000 255 255 255 255 --0.819273 -0.547417 0.000000 255 255 255 255 -0.977535 0.194448 0.000000 255 255 255 255 -0.985334 0.000004 0.000000 255 255 255 255 -0.996686 0.000004 0.000000 255 255 255 255 --0.910327 -0.377066 0.000000 255 255 255 255 --0.920816 -0.381410 0.000000 255 255 255 255 -0.966401 -0.192225 0.000000 255 255 255 255 -0.977535 -0.194439 0.000000 255 255 255 255 --0.977532 -0.194439 0.000000 255 255 255 255 --0.966398 -0.192224 0.000000 255 255 255 255 -0.910330 -0.377066 0.000000 255 255 255 255 -0.920818 -0.381411 0.000000 255 255 255 255 --0.996683 0.000005 0.000000 255 255 255 255 --0.985331 0.000005 0.000000 255 255 255 255 -0.819275 -0.547417 0.000000 255 255 255 255 -0.828714 -0.553724 0.000000 255 255 255 255 --0.977532 0.194449 0.000000 255 255 255 255 --0.966398 0.192234 0.000000 255 255 255 255 -0.696737 -0.696731 0.000000 255 255 255 255 -0.704764 -0.704759 0.000000 255 255 255 255 --0.920815 0.381420 0.000000 255 255 255 255 --0.910327 0.377075 0.000000 255 255 255 255 -0.547423 -0.819270 0.000000 255 255 255 255 -0.553730 -0.828709 0.000000 255 255 255 255 --0.819272 0.547426 0.000000 255 255 255 255 --0.828711 0.553733 0.000000 255 255 255 255 -0.377072 -0.910325 0.000000 255 255 255 255 -0.381416 -0.920813 0.000000 255 255 255 255 -0.194445 0.977538 0.000000 255 255 255 255 -0.000002 0.985337 0.000000 255 255 255 255 -0.192230 0.966404 0.000000 255 255 255 255 --0.704760 0.704768 0.000000 255 255 255 255 --0.696733 0.696740 0.000000 255 255 255 255 -0.192230 -0.966396 0.000000 255 255 255 255 -0.194445 -0.977530 0.000000 255 255 255 255 -0.377072 0.910332 0.000000 255 255 255 255 -0.381416 0.920821 0.000000 255 255 255 255 --0.553726 0.828718 0.000000 255 255 255 255 --0.547419 0.819279 0.000000 255 255 255 255 -0.000001 -0.985329 0.000000 255 255 255 255 -0.000001 -0.996681 0.000000 255 255 255 255 -0.547423 0.819278 0.000000 255 255 255 255 -0.553730 0.828717 0.000000 255 255 255 255 --0.381412 0.920821 0.000000 255 255 255 255 --0.377068 0.910333 0.000000 255 255 255 255 --0.192228 -0.966396 0.000000 255 255 255 255 --0.194442 -0.977530 0.000000 255 255 255 255 -0.704764 0.704767 0.000000 255 255 255 255 -0.696737 0.696740 0.000000 255 255 255 255 --0.194441 0.977538 0.000000 255 255 255 255 --0.192226 0.966404 0.000000 255 255 255 255 --0.381414 -0.920812 0.000000 255 255 255 255 --0.377069 -0.910324 0.000000 255 255 255 255 -0.819275 0.547425 0.000000 255 255 255 255 -0.828714 0.553732 0.000000 255 255 255 255 -0.000001 0.996689 0.000000 255 255 255 255 --0.547421 -0.819269 0.000000 255 255 255 255 --0.553728 -0.828709 0.000000 255 255 255 255 -0.910330 0.377075 0.000000 255 255 255 255 -0.920818 0.381419 0.000000 255 255 255 255 --0.704762 -0.704758 0.000000 255 255 255 255 -0.966401 0.192233 0.000000 255 255 255 255 --0.802883 -0.536465 0.000000 255 255 255 64 --0.892116 -0.369522 0.000000 255 255 255 64 -0.947068 -0.188379 0.000000 255 255 255 64 --0.947065 -0.188378 0.000000 255 255 255 64 -0.892119 -0.369523 0.000000 255 255 255 64 --0.965619 0.000005 0.000000 255 255 255 64 -0.802886 -0.536466 0.000000 255 255 255 64 --0.947065 0.188388 0.000000 255 255 255 64 -0.682798 -0.682793 0.000000 255 255 255 64 --0.892115 0.369532 0.000000 255 255 255 64 -0.536471 -0.802880 0.000000 255 255 255 64 --0.802882 0.536475 0.000000 255 255 255 64 -0.369528 -0.892113 0.000000 255 255 255 64 -0.000002 0.965624 0.000000 255 255 255 64 -0.188385 0.947070 0.000000 255 255 255 64 --0.682795 0.682802 0.000000 255 255 255 64 -0.188385 -0.947062 0.000000 255 255 255 64 -0.369528 0.892121 0.000000 255 255 255 64 --0.536467 0.802889 0.000000 255 255 255 64 -0.000001 -0.965616 0.000000 255 255 255 64 -0.536472 0.802888 0.000000 255 255 255 64 --0.369524 0.892122 0.000000 255 255 255 64 --0.188382 -0.947062 0.000000 255 255 255 64 -0.682798 0.682801 0.000000 255 255 255 64 --0.188380 0.947071 0.000000 255 255 255 64 --0.369526 -0.892113 0.000000 255 255 255 64 -0.802886 0.536474 0.000000 255 255 255 64 --0.536469 -0.802880 0.000000 255 255 255 64 -0.892119 0.369531 0.000000 255 255 255 64 --0.682796 -0.682792 0.000000 255 255 255 64 -0.947068 0.188387 0.000000 255 255 255 64 -0.965622 0.000004 0.000000 255 255 255 64 -0.000002 0.000004 0.000000 255 255 255 64 +0.828712 -0.553724 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.681950 -0.681947 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.801889 -0.535801 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.977535 0.194448 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.964426 0.000004 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.996686 0.000004 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.891011 -0.369065 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.920816 -0.381410 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.945895 -0.188146 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.977535 -0.194439 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.977532 -0.194439 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.945892 -0.188145 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.891014 -0.369065 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.920818 -0.381411 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.996683 0.000005 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.964423 0.000005 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.801891 -0.535801 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.828714 -0.553724 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.977532 0.194449 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.945892 0.188155 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.681953 -0.681947 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.704764 -0.704759 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.920815 0.381420 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.891010 0.369074 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.535807 -0.801886 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.553730 -0.828709 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.801888 0.535811 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.828711 0.553733 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.369071 -0.891008 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.381416 -0.920813 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.194445 0.977538 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.000002 0.964428 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.188151 0.945897 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.704760 0.704768 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.681949 0.681956 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.188151 -0.945889 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.194445 -0.977530 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.369071 0.891016 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.381416 0.920821 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.553726 0.828718 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.535803 0.801894 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.000001 -0.964421 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.000001 -0.996681 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.535807 0.801894 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.553730 0.828717 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.381412 0.920821 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.369066 0.891017 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.188149 -0.945889 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.194442 -0.977530 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.704764 0.704767 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.681953 0.681955 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.194441 0.977538 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.188147 0.945897 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.381414 -0.920812 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.369068 -0.891008 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.801891 0.535810 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.828714 0.553732 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.000001 0.996689 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.535805 -0.801885 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.553728 -0.828709 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.891014 0.369073 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.920818 0.381419 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.704762 -0.704758 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +-0.945895 0.188154 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 255 +0.785846 -0.525082 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.873186 -0.361681 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.926972 -0.184382 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.926969 -0.184381 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.873189 -0.361682 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.945129 0.000005 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.785849 -0.525082 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.926968 0.184391 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.668310 -0.668304 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.873185 0.361691 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.525088 -0.785844 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.785845 0.525092 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.361687 -0.873183 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.000002 0.945134 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.184387 0.926974 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.668306 0.668313 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.184387 -0.926966 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.361687 0.873191 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.525084 0.785852 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.000001 -0.945127 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.525088 0.785852 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.361683 0.873192 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.184385 -0.926966 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.668310 0.668312 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.184383 0.926975 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.361685 -0.873183 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.785849 0.525090 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.525085 -0.785843 0.000000 -0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.873189 0.361690 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +0.668307 -0.668304 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.926972 0.184390 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.945132 0.000004 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 255 255 255 65 +-0.000002 0.000004 0.000000 0.000000 -0.000000 -1.000000 0.000000 0.000000 255 255 255 65 3 0 1 2 3 3 4 5 3 0 6 7