Preliminary implementation of source locking and layer stage levels

This commit is contained in:
Bruno
2021-01-16 22:32:02 +01:00
parent e4da7de06f
commit 9e865b3677
10 changed files with 543 additions and 80 deletions

View File

@@ -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

View File

@@ -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() ) );

View File

@@ -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;

View File

@@ -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
View File

@@ -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
View File

@@ -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

View File

@@ -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

View 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

View 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

View File

@@ -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