mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-07 08:20:01 +01:00
Preliminary implementation of source locking and layer stage levels
This commit is contained in:
@@ -351,6 +351,8 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/border_large_sharp.ply
|
||||
./rsc/mesh/border_vertical_overlay.ply
|
||||
./rsc/mesh/perspective_layer.ply
|
||||
./rsc/mesh/perspective_axis_left.ply
|
||||
./rsc/mesh/perspective_axis_right.ply
|
||||
./rsc/mesh/shadow_perspective.ply
|
||||
./rsc/mesh/point.ply
|
||||
./rsc/mesh/square_point.ply
|
||||
|
||||
@@ -403,6 +403,7 @@ void ImGuiVisitor::visit (Source& s)
|
||||
|
||||
ImVec2 pos = ImGui::GetCursorPos(); // remember where we were...
|
||||
|
||||
// inform on visibility status
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height ) );
|
||||
if (s.active()) {
|
||||
if (s.blendingShader()->color.a > 0.f)
|
||||
@@ -413,6 +414,13 @@ void ImGuiVisitor::visit (Source& s)
|
||||
else
|
||||
ImGuiToolkit::HelpMarker("Inactive", ICON_FA_SNOWFLAKE);
|
||||
|
||||
// Inform on status of lock
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height + ImGui::GetFrameHeight()) );
|
||||
if (s.locked())
|
||||
ImGuiToolkit::HelpMarker("Locked", ICON_FA_LOCK);
|
||||
else
|
||||
ImGuiToolkit::HelpMarker("Unlocked", ICON_FA_LOCK_OPEN);
|
||||
|
||||
// toggle enable/disable image processing
|
||||
bool on = s.imageProcessingEnabled();
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 15, pos.y -ImGui::GetFrameHeight() ) );
|
||||
|
||||
60
Source.cpp
60
Source.cpp
@@ -17,7 +17,7 @@
|
||||
#include "Log.h"
|
||||
#include "Mixer.h"
|
||||
|
||||
Source::Source() : initialized_(false), active_(true), need_update_(true), symbol_(nullptr)
|
||||
Source::Source() : initialized_(false), active_(true), locked_(false), need_update_(true), symbol_(nullptr)
|
||||
{
|
||||
// create unique id
|
||||
id_ = GlmToolkit::uniqueId();
|
||||
@@ -177,6 +177,23 @@ Source::Source() : initialized_(false), active_(true), need_update_(true), symbo
|
||||
// empty transition node
|
||||
groups_[View::TRANSITION] = new Group;
|
||||
|
||||
//
|
||||
// shared locker symbol
|
||||
//
|
||||
locker_ = new Symbol(Symbol::LOCK, glm::vec3(0.8f, -0.8f, 0.01f));
|
||||
locker_->color = glm::vec4(1.f, 1.f, 1.f, 0.6f);
|
||||
|
||||
// add semi transparent icon statically to mixing and layer views
|
||||
Group *lockgroup = new Group;
|
||||
lockgroup->translation_.z = 0.1;
|
||||
lockgroup->attach( locker_ );
|
||||
groups_[View::LAYER]->attach(lockgroup);
|
||||
groups_[View::MIXING]->attach(lockgroup);
|
||||
|
||||
// add semi transparent icon dynamically with overlay
|
||||
overlays_[View::LAYER]->attach( locker_ );
|
||||
overlays_[View::MIXING]->attach( locker_ );
|
||||
|
||||
// create objects
|
||||
stored_status_ = new Group;
|
||||
|
||||
@@ -206,7 +223,7 @@ Source::Source() : initialized_(false), active_(true), need_update_(true), symbo
|
||||
rendersurface_ = nullptr;
|
||||
mixingsurface_ = nullptr;
|
||||
maskbuffer_ = nullptr;
|
||||
maskimage_ = nullptr;
|
||||
maskimage_ = nullptr;
|
||||
mask_need_update_ = false;
|
||||
}
|
||||
|
||||
@@ -344,7 +361,7 @@ void Source::attach(FrameBuffer *renderbuffer)
|
||||
{
|
||||
renderbuffer_ = renderbuffer;
|
||||
|
||||
// if a symbol is available, add it to icons
|
||||
// if a symbol is available, add it to overlay
|
||||
if (symbol_) {
|
||||
overlays_[View::MIXING]->attach( symbol_ );
|
||||
overlays_[View::LAYER]->attach( symbol_ );
|
||||
@@ -381,6 +398,10 @@ void Source::attach(FrameBuffer *renderbuffer)
|
||||
}
|
||||
}
|
||||
|
||||
// hack to place the symbols in the corner independently of aspect ratio
|
||||
symbol_->translation_.x += 0.1f * (renderbuffer_->aspectRatio()-1.f);
|
||||
locker_->translation_.x += 0.1f * (renderbuffer_->aspectRatio()-1.f);
|
||||
|
||||
// (re) create the masking buffer
|
||||
if (maskbuffer_)
|
||||
delete maskbuffer_;
|
||||
@@ -399,16 +420,32 @@ void Source::setActive (bool on)
|
||||
{
|
||||
active_ = on;
|
||||
|
||||
// do not disactivate if a clone depends on it
|
||||
for(auto clone = clones_.begin(); clone != clones_.end(); clone++) {
|
||||
if ( (*clone)->active() )
|
||||
active_ = true;
|
||||
}
|
||||
|
||||
// an inactive source is visible only in the MIXING view
|
||||
groups_[View::RENDERING]->visible_ = active_;
|
||||
groups_[View::GEOMETRY]->visible_ = active_;
|
||||
groups_[View::LAYER]->visible_ = active_;
|
||||
|
||||
}
|
||||
|
||||
void Source::setLocked (bool on)
|
||||
{
|
||||
locked_ = on;
|
||||
|
||||
// the lock icon is visible when locked
|
||||
locker_->visible_ = on;
|
||||
|
||||
// a locked source is not visible in the GEOMETRY view (that's the whole point of it!)
|
||||
groups_[View::GEOMETRY]->visible_ = !locked_;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Transfer functions from coordinates to alpha (1 - transparency)
|
||||
float linear_(float x, float y) {
|
||||
return 1.f - CLAMP( sqrt( ( x * x ) + ( y * y ) ), 0.f, 1.f );
|
||||
@@ -440,8 +477,9 @@ void Source::update(float dt)
|
||||
mixingshader_->color = blendingshader_->color;
|
||||
|
||||
// CHANGE update status based on limbo
|
||||
bool a = glm::length(dist) < 1.3f;
|
||||
bool a = glm::length(dist) < MIXING_LIMBO_SCALE;
|
||||
setActive( a );
|
||||
// adjust scale of mixing icon : smaller if not active
|
||||
groups_[View::MIXING]->scale_ = glm::vec3(MIXING_ICON_SCALE) - ( a ? glm::vec3(0.f, 0.f, 0.f) : glm::vec3(0.03f, 0.03f, 0.f) );
|
||||
|
||||
// MODIFY geometry based on GEOMETRY node
|
||||
@@ -463,6 +501,20 @@ void Source::update(float dt)
|
||||
mixingsurface_->scale_.x *= renderbuffer_->aspectRatio();
|
||||
mixingsurface_->update(dt_);
|
||||
|
||||
// Layers icons are displayed in Perspective (diagonal)
|
||||
groups_[View::LAYER]->translation_.y = groups_[View::LAYER]->translation_.x / LAYER_PERSPECTIVE;
|
||||
|
||||
// CHANGE lock based on range of layers stage
|
||||
bool l = (groups_[View::LAYER]->translation_.x < -FOREGROUND_DEPTH)
|
||||
|| (groups_[View::LAYER]->translation_.x > -BACKGROUND_DEPTH);
|
||||
setLocked( l );
|
||||
|
||||
// adjust position of layer icon: step up when on stage
|
||||
if (groups_[View::LAYER]->translation_.x < -FOREGROUND_DEPTH)
|
||||
groups_[View::LAYER]->translation_.y -= 0.3f;
|
||||
else if (groups_[View::LAYER]->translation_.x < -BACKGROUND_DEPTH)
|
||||
groups_[View::LAYER]->translation_.y -= 0.15f;
|
||||
|
||||
// MODIFY depth based on LAYER node
|
||||
groups_[View::MIXING]->translation_.z = groups_[View::LAYER]->translation_.z;
|
||||
groups_[View::GEOMETRY]->translation_.z = groups_[View::LAYER]->translation_.z;
|
||||
|
||||
7
Source.h
7
Source.h
@@ -99,6 +99,10 @@ public:
|
||||
virtual void setActive (bool on);
|
||||
inline bool active () { return active_; }
|
||||
|
||||
// lock mode
|
||||
virtual void setLocked (bool on);
|
||||
inline bool locked () { return locked_; }
|
||||
|
||||
// a Source shall informs if the source failed (i.e. shall be deleted)
|
||||
virtual bool failed () const = 0;
|
||||
|
||||
@@ -196,10 +200,11 @@ protected:
|
||||
std::map<View::Mode, Group*> overlays_;
|
||||
std::map<View::Mode, Switch*> frames_;
|
||||
std::map<View::Mode, Handles*[7]> handles_;
|
||||
Symbol *symbol_;
|
||||
Symbol *symbol_, *locker_;
|
||||
|
||||
// update
|
||||
bool active_;
|
||||
bool locked_;
|
||||
bool need_update_;
|
||||
float dt_;
|
||||
Group *stored_status_;
|
||||
|
||||
116
View.cpp
116
View.cpp
@@ -505,13 +505,8 @@ View::Cursor MixingView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pai
|
||||
|
||||
std::ostringstream info;
|
||||
if (s->active()) {
|
||||
info << "Alpha " << std::fixed << std::setprecision(3) << s->blendingShader()->color.a;
|
||||
// else if ( Mixer::manager().concealed(s) )
|
||||
// info << "Stashed";q
|
||||
if (s->blendingShader()->color.a > 0.f)
|
||||
info << " " << ICON_FA_EYE;
|
||||
else
|
||||
info << " " << ICON_FA_EYE_SLASH;
|
||||
info << "Alpha " << std::fixed << std::setprecision(3) << s->blendingShader()->color.a << " ";
|
||||
info << ( (s->blendingShader()->color.a > 0.f) ? ICON_FA_EYE : ICON_FA_EYE_SLASH);
|
||||
}
|
||||
else
|
||||
info << "Inactive " << ICON_FA_SNOWFLAKE;
|
||||
@@ -711,11 +706,10 @@ GeometryView::GeometryView() : View(GEOMETRY)
|
||||
else
|
||||
restoreSettings();
|
||||
|
||||
// Geometry Scene background
|
||||
Surface *rect = new Surface;
|
||||
scene.bg()->attach(rect);
|
||||
|
||||
// Geometry Scene foreground
|
||||
output_surface_ = new Surface;
|
||||
output_surface_->visible_ = false;
|
||||
scene.fg()->attach(output_surface_);
|
||||
Frame *border = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||
border->color = glm::vec4( COLOR_FRAME, 1.f );
|
||||
scene.fg()->attach(border);
|
||||
@@ -812,6 +806,7 @@ void GeometryView::update(float dt)
|
||||
for (NodeSet::iterator node = scene.fg()->begin(); node != scene.fg()->end(); node++) {
|
||||
(*node)->scale_.x = aspect_ratio;
|
||||
}
|
||||
output_surface_->setTextureIndex( output->texture() );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -892,11 +887,17 @@ void GeometryView::draw()
|
||||
// draw scene of this view
|
||||
View::draw();
|
||||
|
||||
glm::mat4 projection = Rendering::manager().Projection();
|
||||
|
||||
// draw scene rendered on top
|
||||
DrawVisitor draw_rendering(output_surface_, projection, true);
|
||||
scene.accept(draw_rendering);
|
||||
|
||||
// re-draw frames of all sources on top
|
||||
// (otherwise hidden in stack of sources)
|
||||
for (auto source_iter = Mixer::manager().session()->begin(); source_iter != Mixer::manager().session()->end(); source_iter++)
|
||||
{
|
||||
DrawVisitor dv((*source_iter)->frames_[mode_], Rendering::manager().Projection());
|
||||
for (auto source_iter = Mixer::manager().session()->begin();
|
||||
source_iter != Mixer::manager().session()->end(); source_iter++) {
|
||||
DrawVisitor dv((*source_iter)->frames_[mode_], projection);
|
||||
scene.accept(dv);
|
||||
}
|
||||
|
||||
@@ -904,12 +905,13 @@ void GeometryView::draw()
|
||||
// (allows manipulation current source even when hidden below others)
|
||||
if (s != nullptr) {
|
||||
s->setMode(Source::CURRENT);
|
||||
DrawVisitor dv(s->overlays_[mode_], Rendering::manager().Projection());
|
||||
DrawVisitor dv(s->overlays_[mode_], projection);
|
||||
scene.accept(dv);
|
||||
}
|
||||
|
||||
DrawVisitor dv(scene.fg(), Rendering::manager().Projection());
|
||||
scene.accept(dv);
|
||||
// draw overlays of view
|
||||
DrawVisitor draw_overlay(scene.fg(), projection);
|
||||
scene.accept(draw_overlay);
|
||||
|
||||
// display popup menu
|
||||
if (show_context_menu_) {
|
||||
@@ -1417,17 +1419,33 @@ LayerView::LayerView() : View(LAYER), aspect_ratio(1.f)
|
||||
restoreSettings();
|
||||
|
||||
// Geometry Scene background
|
||||
frame_ = new Group;
|
||||
Surface *rect = new Surface;
|
||||
rect->shader()->color.a = 0.3f;
|
||||
scene.bg()->attach(rect);
|
||||
|
||||
Mesh *persp = new Mesh("mesh/perspective_layer.ply");
|
||||
persp->translation_.z = -0.1f;
|
||||
scene.bg()->attach(persp);
|
||||
frame_->attach(rect);
|
||||
|
||||
Frame *border = new Frame(Frame::ROUND, Frame::THIN, Frame::PERSPECTIVE);
|
||||
border->color = glm::vec4( COLOR_FRAME, 0.7f );
|
||||
scene.bg()->attach(border);
|
||||
border->color = glm::vec4( COLOR_FRAME, 0.95f );
|
||||
frame_->attach(border);
|
||||
scene.bg()->attach(frame_);
|
||||
|
||||
// persp_layer_ = new Mesh("mesh/perspective_layer.ply");
|
||||
// persp_layer_->shader()->color = glm::vec4( COLOR_FRAME, 0.8f );
|
||||
// persp_layer_->scale_.x = LAYER_PERSPECTIVE;
|
||||
// persp_layer_->translation_.z = -0.1f;
|
||||
// scene.bg()->attach(persp_layer_);
|
||||
|
||||
persp_left_ = new Mesh("mesh/perspective_axis_left.ply");
|
||||
persp_left_->shader()->color = glm::vec4( COLOR_FRAME, 0.9f );
|
||||
persp_left_->scale_.x = LAYER_PERSPECTIVE;
|
||||
persp_left_->translation_.z = -0.1f;
|
||||
scene.bg()->attach(persp_left_);
|
||||
|
||||
persp_right_ = new Mesh("mesh/perspective_axis_right.ply");
|
||||
persp_right_->shader()->color = glm::vec4( COLOR_FRAME, 0.9f );
|
||||
persp_right_->scale_.x = LAYER_PERSPECTIVE;
|
||||
persp_right_->translation_.z = -0.1f;
|
||||
scene.bg()->attach(persp_right_);
|
||||
}
|
||||
|
||||
void LayerView::update(float dt)
|
||||
@@ -1441,12 +1459,17 @@ void LayerView::update(float dt)
|
||||
FrameBuffer *output = Mixer::manager().session()->frame();
|
||||
if (output){
|
||||
aspect_ratio = output->aspectRatio();
|
||||
for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) {
|
||||
(*node)->scale_.x = aspect_ratio;
|
||||
}
|
||||
for (NodeSet::iterator node = scene.fg()->begin(); node != scene.fg()->end(); node++) {
|
||||
(*node)->scale_.x = aspect_ratio;
|
||||
}
|
||||
frame_->scale_.x = aspect_ratio;
|
||||
|
||||
persp_left_->translation_.x = -aspect_ratio;
|
||||
persp_right_->translation_.x = aspect_ratio + 0.06;
|
||||
// for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) {
|
||||
// (*node)->scale_.x = aspect_ratio;
|
||||
// }
|
||||
// for (NodeSet::iterator node = scene.fg()->begin(); node != scene.fg()->end(); node++) {
|
||||
// (*node)->scale_.x = aspect_ratio;
|
||||
// }
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1461,8 +1484,9 @@ void LayerView::resize ( int scale )
|
||||
scene.root()->scale_.y = z;
|
||||
|
||||
// Clamp translation to acceptable area
|
||||
glm::vec3 border(scene.root()->scale_.x * 1.f, scene.root()->scale_.y * 1.f, 0.f);
|
||||
scene.root()->translation_ = glm::clamp(scene.root()->translation_, -border, 3.f * border);
|
||||
glm::vec3 border_left(scene.root()->scale_.x * -2.f, scene.root()->scale_.y * -1.f, 0.f);
|
||||
glm::vec3 border_right(scene.root()->scale_.x * 8.f, scene.root()->scale_.y * 8.f, 0.f);
|
||||
scene.root()->translation_ = glm::clamp(scene.root()->translation_, border_left, border_right);
|
||||
}
|
||||
|
||||
int LayerView::size ()
|
||||
@@ -1483,21 +1507,25 @@ float LayerView::setDepth(Source *s, float d)
|
||||
|
||||
// negative or no depth given; find the front most depth
|
||||
if ( depth < 0.f ) {
|
||||
Node *front = scene.ws()->front();
|
||||
if (front)
|
||||
depth = front->translation_.z + 0.5f;
|
||||
else
|
||||
depth = 0.5f;
|
||||
// default to place visible in front of background
|
||||
depth = BACKGROUND_DEPTH + 0.25f;
|
||||
|
||||
// find the front-most souce in the workspace (behind FOREGROUND)
|
||||
for (NodeSet::iterator node = scene.ws()->begin(); node != scene.ws()->end(); node++) {
|
||||
if ( (*node)->translation_.z > FOREGROUND_DEPTH )
|
||||
break;
|
||||
depth = MAX(depth, (*node)->translation_.z + 0.25f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// move on x
|
||||
sourceNode->translation_.x = CLAMP( -depth, -(SCENE_DEPTH - 2.f), 0.f);
|
||||
sourceNode->translation_.x = CLAMP( -depth, -MAX_DEPTH, -MIN_DEPTH);
|
||||
|
||||
// discretized translation with ALT
|
||||
if (UserInterface::manager().altModifier()) {
|
||||
if (UserInterface::manager().altModifier())
|
||||
sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 5.f);
|
||||
}
|
||||
// diagonal movement only
|
||||
sourceNode->translation_.y = sourceNode->translation_.x / aspect_ratio;
|
||||
|
||||
// change depth
|
||||
sourceNode->translation_.z = -sourceNode->translation_.x;
|
||||
|
||||
@@ -1526,7 +1554,8 @@ View::Cursor LayerView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair
|
||||
float d = setDepth( s, MAX( -dest_translation.x, 0.f) );
|
||||
|
||||
std::ostringstream info;
|
||||
info << "Depth " << std::fixed << std::setprecision(2) << d;
|
||||
info << "Depth " << std::fixed << std::setprecision(2) << d << " ";
|
||||
info << (s->locked() ? ICON_FA_LOCK : ICON_FA_LOCK_OPEN);
|
||||
|
||||
// store action in history
|
||||
current_action_ = s->name() + ": " + info.str();
|
||||
@@ -1600,7 +1629,6 @@ TransitionView::TransitionView() : View(TRANSITION), transition_source_(nullptr)
|
||||
scene.fg()->translation_ = glm::vec3(0.f, -0.11f, 0.0f);
|
||||
|
||||
output_surface_ = new Surface;
|
||||
output_surface_->shader()->color.a = 0.9f;
|
||||
scene.bg()->attach(output_surface_);
|
||||
|
||||
Frame *border = new Frame(Frame::ROUND, Frame::THIN, Frame::GLOW);
|
||||
|
||||
4
View.h
4
View.h
@@ -164,6 +164,7 @@ public:
|
||||
void arrow (glm::vec2) override;
|
||||
|
||||
private:
|
||||
Surface *output_surface_;
|
||||
Node *overlay_position_;
|
||||
Node *overlay_position_cross_;
|
||||
Node *overlay_rotation_;
|
||||
@@ -193,6 +194,9 @@ public:
|
||||
|
||||
private:
|
||||
float aspect_ratio;
|
||||
Mesh *persp_layer_;
|
||||
Mesh *persp_left_, *persp_right_;
|
||||
Group *frame_;
|
||||
};
|
||||
|
||||
class TransitionView : public View
|
||||
|
||||
@@ -24,14 +24,19 @@
|
||||
#define ROUND(val, factor) float( int( val * factor ) ) / factor;
|
||||
|
||||
#define SCENE_UNIT 5.f
|
||||
#define SCENE_DEPTH 12.f
|
||||
#define CIRCLE_SQUARE_DIST(x,y) ( (x*x + y*y) / (SCENE_UNIT * SCENE_UNIT * SCENE_UNIT * SCENE_UNIT) )
|
||||
#define MIN_SCALE 0.01f
|
||||
#define MAX_SCALE 10.f
|
||||
#define CLAMP_SCALE(x) SIGN(x) * CLAMP( ABS(x), MIN_SCALE, MAX_SCALE)
|
||||
#define SCENE_DEPTH 14.f
|
||||
#define MIN_DEPTH 0.f
|
||||
#define MAX_DEPTH 12.f
|
||||
#define BACKGROUND_DEPTH 2.f
|
||||
#define FOREGROUND_DEPTH 10.f
|
||||
#define MIXING_DEFAULT_SCALE 2.4f
|
||||
#define MIXING_MIN_SCALE 0.8f
|
||||
#define MIXING_MAX_SCALE 7.0f
|
||||
#define MIXING_LIMBO_SCALE 1.3f
|
||||
#define MIXING_ICON_SCALE 0.15f, 0.15f, 1.f
|
||||
#define GEOMETRY_DEFAULT_SCALE 1.2f
|
||||
#define GEOMETRY_MIN_SCALE 0.4f
|
||||
@@ -39,6 +44,7 @@
|
||||
#define LAYER_DEFAULT_SCALE 0.8f
|
||||
#define LAYER_MIN_SCALE 0.4f
|
||||
#define LAYER_MAX_SCALE 1.7f
|
||||
#define LAYER_PERSPECTIVE 2.0f
|
||||
#define APPEARANCE_DEFAULT_SCALE 2.f
|
||||
#define APPEARANCE_MIN_SCALE 0.4f
|
||||
#define APPEARANCE_MAX_SCALE 7.0f
|
||||
|
||||
180
rsc/mesh/perspective_axis_left.ply
Normal file
180
rsc/mesh/perspective_axis_left.ply
Normal file
@@ -0,0 +1,180 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.0 - www.blender.org
|
||||
element vertex 76
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 94
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-1.005000 -2.010402 0.000000
|
||||
-0.997299 -2.010402 0.000000
|
||||
-1.016821 -2.006961 0.000000
|
||||
-1.012701 -2.042907 0.000000
|
||||
-1.012701 -2.010402 0.000000
|
||||
-1.005000 -2.140421 0.000000
|
||||
-1.012701 -2.140421 0.000000
|
||||
-0.993243 -2.143901 0.000000
|
||||
-5.016935 -6.136959 0.000000
|
||||
-5.012702 -6.172815 0.000000
|
||||
-5.012702 -6.140421 0.000000
|
||||
-5.005000 -6.269996 0.000000
|
||||
-5.012702 -6.269996 0.000000
|
||||
-4.993124 -6.273297 0.000000
|
||||
-0.993107 -2.015248 0.000000
|
||||
-0.009598 -1.029598 0.000000
|
||||
-0.040402 -1.029598 0.000000
|
||||
-1.016843 -2.042907 0.000000
|
||||
-4.997299 -6.140421 0.000000
|
||||
-4.992839 -6.143410 0.000000
|
||||
-1.016888 -2.136960 0.000000
|
||||
-5.017002 -6.172815 0.000000
|
||||
-5.016947 -6.266515 0.000000
|
||||
-6.060402 -7.309995 0.000000
|
||||
-6.029597 -7.309995 0.000000
|
||||
-0.030402 -1.019598 0.000000
|
||||
-0.019598 -1.019598 0.000000
|
||||
-5.005000 -6.205208 0.000000
|
||||
-5.005000 -6.237602 0.000000
|
||||
-4.997299 -6.237602 0.000000
|
||||
-5.012702 -6.205208 0.000000
|
||||
-5.017002 -6.205208 0.000000
|
||||
-5.017002 -6.237602 0.000000
|
||||
-5.012702 -6.237602 0.000000
|
||||
-5.005000 -6.140421 0.000000
|
||||
-4.997299 -6.172815 0.000000
|
||||
-5.005000 -6.172815 0.000000
|
||||
-4.997299 -6.205208 0.000000
|
||||
-4.992999 -6.237602 0.000000
|
||||
-4.992999 -6.205208 0.000000
|
||||
-4.992999 -6.172815 0.000000
|
||||
-4.997299 -6.269996 0.000000
|
||||
-1.005000 -2.075412 0.000000
|
||||
-1.005000 -2.107916 0.000000
|
||||
-0.997299 -2.107916 0.000000
|
||||
-1.012701 -2.075412 0.000000
|
||||
-1.016843 -2.075412 0.000000
|
||||
-1.016843 -2.107916 0.000000
|
||||
-1.012701 -2.107916 0.000000
|
||||
-0.997299 -2.042907 0.000000
|
||||
-1.005000 -2.042907 0.000000
|
||||
-0.997299 -2.075412 0.000000
|
||||
-0.993157 -2.107916 0.000000
|
||||
-0.993157 -2.075412 0.000000
|
||||
-0.993157 -2.042907 0.000000
|
||||
-0.997299 -2.140421 0.000000
|
||||
-4.771169 -7.309363 0.000000
|
||||
-6.041811 -7.295620 0.000000
|
||||
-6.041811 -7.309363 0.000000
|
||||
-4.771169 -7.295620 0.000000
|
||||
-3.725413 -6.272977 0.000000
|
||||
-5.004570 -6.259233 0.000000
|
||||
-5.004570 -6.272977 0.000000
|
||||
-3.725413 -6.259233 0.000000
|
||||
-3.722498 -6.150967 0.000000
|
||||
-5.003956 -6.137224 0.000000
|
||||
-5.003956 -6.150967 0.000000
|
||||
-3.722498 -6.137224 0.000000
|
||||
0.262578 -2.143717 0.000000
|
||||
-1.004861 -2.129973 0.000000
|
||||
-1.004861 -2.143717 0.000000
|
||||
0.262578 -2.129973 0.000000
|
||||
0.268543 -2.021173 0.000000
|
||||
-1.004861 -2.007429 0.000000
|
||||
-1.004861 -2.021173 0.000000
|
||||
0.268543 -2.007429 0.000000
|
||||
3 0 1 2
|
||||
3 2 3 4
|
||||
3 5 6 7
|
||||
3 8 9 10
|
||||
3 11 12 13
|
||||
3 14 15 16
|
||||
3 2 17 3
|
||||
3 18 19 20
|
||||
3 8 21 9
|
||||
3 22 23 24
|
||||
3 15 25 16
|
||||
3 15 26 25
|
||||
3 27 28 29
|
||||
3 27 30 28
|
||||
3 31 32 33
|
||||
3 34 35 18
|
||||
3 34 36 35
|
||||
3 27 29 37
|
||||
3 37 38 39
|
||||
3 37 29 38
|
||||
3 29 13 38
|
||||
3 35 37 39
|
||||
3 35 36 37
|
||||
3 36 27 37
|
||||
3 18 40 19
|
||||
3 18 35 40
|
||||
3 35 39 40
|
||||
3 33 12 11
|
||||
3 33 32 12
|
||||
3 32 22 12
|
||||
3 28 33 11
|
||||
3 28 30 33
|
||||
3 30 31 33
|
||||
3 29 41 13
|
||||
3 29 28 41
|
||||
3 28 11 41
|
||||
3 9 30 27
|
||||
3 9 21 30
|
||||
3 21 31 30
|
||||
3 10 36 34
|
||||
3 10 9 36
|
||||
3 9 27 36
|
||||
3 42 43 44
|
||||
3 42 45 43
|
||||
3 46 47 48
|
||||
3 0 49 1
|
||||
3 0 50 49
|
||||
3 42 44 51
|
||||
3 51 52 53
|
||||
3 51 44 52
|
||||
3 44 7 52
|
||||
3 49 51 53
|
||||
3 49 50 51
|
||||
3 50 42 51
|
||||
3 1 54 14
|
||||
3 1 49 54
|
||||
3 49 53 54
|
||||
3 48 6 5
|
||||
3 48 47 6
|
||||
3 47 20 6
|
||||
3 43 48 5
|
||||
3 43 45 48
|
||||
3 45 46 48
|
||||
3 44 55 7
|
||||
3 44 43 55
|
||||
3 43 5 55
|
||||
3 3 45 42
|
||||
3 3 17 45
|
||||
3 17 46 45
|
||||
3 4 50 0
|
||||
3 4 3 50
|
||||
3 3 42 50
|
||||
3 1 14 16
|
||||
3 16 2 1
|
||||
3 2 4 0
|
||||
3 6 20 19
|
||||
3 19 7 6
|
||||
3 7 55 5
|
||||
3 12 22 24
|
||||
3 24 13 12
|
||||
3 13 41 11
|
||||
3 20 8 18
|
||||
3 8 10 34
|
||||
3 34 18 8
|
||||
3 56 57 58
|
||||
3 56 59 57
|
||||
3 60 61 62
|
||||
3 60 63 61
|
||||
3 64 65 66
|
||||
3 64 67 65
|
||||
3 68 69 70
|
||||
3 68 71 69
|
||||
3 72 73 74
|
||||
3 72 75 73
|
||||
180
rsc/mesh/perspective_axis_right.ply
Normal file
180
rsc/mesh/perspective_axis_right.ply
Normal file
@@ -0,0 +1,180 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.0 - www.blender.org
|
||||
element vertex 76
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 94
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-1.005000 -2.010402 0.000000
|
||||
-0.997299 -2.010402 0.000000
|
||||
-1.016821 -2.006961 0.000000
|
||||
-1.012701 -2.042907 0.000000
|
||||
-1.012701 -2.010402 0.000000
|
||||
-1.005000 -2.140421 0.000000
|
||||
-1.012701 -2.140421 0.000000
|
||||
-0.993243 -2.143901 0.000000
|
||||
-5.016935 -6.136959 0.000000
|
||||
-5.012702 -6.172815 0.000000
|
||||
-5.012702 -6.140421 0.000000
|
||||
-5.005000 -6.269996 0.000000
|
||||
-5.012702 -6.269996 0.000000
|
||||
-4.993124 -6.273297 0.000000
|
||||
-0.993107 -2.015248 0.000000
|
||||
-0.009598 -1.029598 0.000000
|
||||
-0.040402 -1.029598 0.000000
|
||||
-1.016843 -2.042907 0.000000
|
||||
-4.997299 -6.140421 0.000000
|
||||
-4.992839 -6.143410 0.000000
|
||||
-1.016888 -2.136960 0.000000
|
||||
-5.017002 -6.172815 0.000000
|
||||
-5.016947 -6.266515 0.000000
|
||||
-6.060402 -7.309995 0.000000
|
||||
-6.029597 -7.309995 0.000000
|
||||
-0.030402 -1.019598 0.000000
|
||||
-0.019598 -1.019598 0.000000
|
||||
-5.005000 -6.205208 0.000000
|
||||
-5.005000 -6.237602 0.000000
|
||||
-4.997299 -6.237602 0.000000
|
||||
-5.012702 -6.205208 0.000000
|
||||
-5.017002 -6.205208 0.000000
|
||||
-5.017002 -6.237602 0.000000
|
||||
-5.012702 -6.237602 0.000000
|
||||
-5.005000 -6.140421 0.000000
|
||||
-4.997299 -6.172815 0.000000
|
||||
-5.005000 -6.172815 0.000000
|
||||
-4.997299 -6.205208 0.000000
|
||||
-4.992999 -6.237602 0.000000
|
||||
-4.992999 -6.205208 0.000000
|
||||
-4.992999 -6.172815 0.000000
|
||||
-4.997299 -6.269996 0.000000
|
||||
-1.005000 -2.075412 0.000000
|
||||
-1.005000 -2.107916 0.000000
|
||||
-0.997299 -2.107916 0.000000
|
||||
-1.012701 -2.075412 0.000000
|
||||
-1.016843 -2.075412 0.000000
|
||||
-1.016843 -2.107916 0.000000
|
||||
-1.012701 -2.107916 0.000000
|
||||
-0.997299 -2.042907 0.000000
|
||||
-1.005000 -2.042907 0.000000
|
||||
-0.997299 -2.075412 0.000000
|
||||
-0.993157 -2.107916 0.000000
|
||||
-0.993157 -2.075412 0.000000
|
||||
-0.993157 -2.042907 0.000000
|
||||
-0.997299 -2.140421 0.000000
|
||||
-6.040137 -7.309363 0.000000
|
||||
-7.312284 -7.295620 0.000000
|
||||
-7.312284 -7.309363 0.000000
|
||||
-6.040137 -7.295620 0.000000
|
||||
-5.002896 -6.272977 0.000000
|
||||
-6.277344 -6.259233 0.000000
|
||||
-6.277344 -6.272977 0.000000
|
||||
-5.002896 -6.259233 0.000000
|
||||
-5.002282 -6.150967 0.000000
|
||||
-6.272128 -6.137224 0.000000
|
||||
-6.272128 -6.150967 0.000000
|
||||
-5.002282 -6.137224 0.000000
|
||||
-1.003187 -2.143717 0.000000
|
||||
-2.274690 -2.129973 0.000000
|
||||
-2.274690 -2.143717 0.000000
|
||||
-1.003187 -2.129973 0.000000
|
||||
-1.003187 -2.021173 0.000000
|
||||
-2.282642 -2.007429 0.000000
|
||||
-2.282642 -2.021173 0.000000
|
||||
-1.003187 -2.007429 0.000000
|
||||
3 0 1 2
|
||||
3 2 3 4
|
||||
3 5 6 7
|
||||
3 8 9 10
|
||||
3 11 12 13
|
||||
3 14 15 16
|
||||
3 2 17 3
|
||||
3 18 19 20
|
||||
3 8 21 9
|
||||
3 22 23 24
|
||||
3 15 25 16
|
||||
3 15 26 25
|
||||
3 27 28 29
|
||||
3 27 30 28
|
||||
3 31 32 33
|
||||
3 34 35 18
|
||||
3 34 36 35
|
||||
3 27 29 37
|
||||
3 37 38 39
|
||||
3 37 29 38
|
||||
3 29 13 38
|
||||
3 35 37 39
|
||||
3 35 36 37
|
||||
3 36 27 37
|
||||
3 18 40 19
|
||||
3 18 35 40
|
||||
3 35 39 40
|
||||
3 33 12 11
|
||||
3 33 32 12
|
||||
3 32 22 12
|
||||
3 28 33 11
|
||||
3 28 30 33
|
||||
3 30 31 33
|
||||
3 29 41 13
|
||||
3 29 28 41
|
||||
3 28 11 41
|
||||
3 9 30 27
|
||||
3 9 21 30
|
||||
3 21 31 30
|
||||
3 10 36 34
|
||||
3 10 9 36
|
||||
3 9 27 36
|
||||
3 42 43 44
|
||||
3 42 45 43
|
||||
3 46 47 48
|
||||
3 0 49 1
|
||||
3 0 50 49
|
||||
3 42 44 51
|
||||
3 51 52 53
|
||||
3 51 44 52
|
||||
3 44 7 52
|
||||
3 49 51 53
|
||||
3 49 50 51
|
||||
3 50 42 51
|
||||
3 1 54 14
|
||||
3 1 49 54
|
||||
3 49 53 54
|
||||
3 48 6 5
|
||||
3 48 47 6
|
||||
3 47 20 6
|
||||
3 43 48 5
|
||||
3 43 45 48
|
||||
3 45 46 48
|
||||
3 44 55 7
|
||||
3 44 43 55
|
||||
3 43 5 55
|
||||
3 3 45 42
|
||||
3 3 17 45
|
||||
3 17 46 45
|
||||
3 4 50 0
|
||||
3 4 3 50
|
||||
3 3 42 50
|
||||
3 1 14 16
|
||||
3 16 2 1
|
||||
3 2 4 0
|
||||
3 6 20 19
|
||||
3 19 7 6
|
||||
3 7 55 5
|
||||
3 12 22 24
|
||||
3 24 13 12
|
||||
3 13 41 11
|
||||
3 20 8 18
|
||||
3 8 10 34
|
||||
3 34 18 8
|
||||
3 56 57 58
|
||||
3 56 59 57
|
||||
3 60 61 62
|
||||
3 60 63 61
|
||||
3 64 65 66
|
||||
3 64 67 65
|
||||
3 68 69 70
|
||||
3 68 71 69
|
||||
3 72 73 74
|
||||
3 72 75 73
|
||||
@@ -1,42 +1,40 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'perspective_layer.blend'
|
||||
element vertex 16
|
||||
comment Created by Blender 2.91.0 - www.blender.org
|
||||
element vertex 20
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 12
|
||||
element face 10
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-6.690000 -6.700000 0.000000 255 0 255 100
|
||||
-1.010000 -1.000000 0.000000 255 0 255 100
|
||||
-6.710000 -6.700000 0.000000 255 0 255 100
|
||||
-0.990000 -1.000000 0.000000 255 0 255 100
|
||||
-6.610000 -6.710000 0.000000 255 0 255 100
|
||||
-6.500000 -6.700000 0.000000 255 0 255 100
|
||||
-6.705731 -6.710000 0.000000 255 0 255 100
|
||||
-6.510000 -6.710000 0.000000 255 0 255 100
|
||||
-4.690000 -6.700000 0.000000 255 0 255 100
|
||||
0.990000 -1.000000 0.000000 255 0 255 100
|
||||
-4.710000 -6.700000 0.000000 255 0 255 100
|
||||
1.010000 -1.000000 0.000000 255 0 255 100
|
||||
-4.706754 -6.710000 0.000000 255 0 255 100
|
||||
-4.910000 -6.710000 0.000000 255 0 255 100
|
||||
-4.810000 -6.710000 0.000000 255 0 255 100
|
||||
-4.900000 -6.700000 0.000000 255 0 255 100
|
||||
1.001107 -2.119227 0.000000
|
||||
-0.998893 -2.105483 0.000000
|
||||
-0.998893 -2.119227 0.000000
|
||||
1.001107 -2.105483 0.000000
|
||||
-2.998893 -6.127666 0.000000
|
||||
-4.998893 -6.113922 0.000000
|
||||
-4.998893 -6.127666 0.000000
|
||||
-2.998893 -6.113922 0.000000
|
||||
-2.998893 -6.247665 0.000000
|
||||
-4.998893 -6.233922 0.000000
|
||||
-4.998893 -6.247665 0.000000
|
||||
-2.998893 -6.233922 0.000000
|
||||
-4.028101 -7.298446 0.000000
|
||||
-6.029685 -7.284703 0.000000
|
||||
-6.029685 -7.298446 0.000000
|
||||
-4.028101 -7.284703 0.000000
|
||||
1.001107 -2.008962 0.000000
|
||||
-0.998893 -1.995219 0.000000
|
||||
-0.998893 -2.008962 0.000000
|
||||
1.001107 -1.995219 0.000000
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 2 4 0
|
||||
3 4 5 0
|
||||
3 2 6 4
|
||||
3 4 5 6
|
||||
3 4 7 5
|
||||
3 8 9 10
|
||||
3 8 11 9
|
||||
3 10 12 8
|
||||
3 10 13 14
|
||||
3 10 14 12
|
||||
3 10 15 13
|
||||
3 12 13 14
|
||||
3 12 15 13
|
||||
3 16 17 18
|
||||
3 16 19 17
|
||||
|
||||
Reference in New Issue
Block a user