Testers wanted: perspective mode (early stages)

Tags: #<Tag:0x00007f14c38a7d28> #<Tag:0x00007f14c38a7be8> #<Tag:0x00007f14c38a7aa8> #<Tag:0x00007f14c38a7968> #<Tag:0x00007f14c38a7828>


Awesome, I’ve been wanting this feature forever.
Saw this link and it reminded me of that.

I’ll download source and try it in a minute. ty guys


Changes added in last week:

  • automatic creation of measurement points. Function works for any vanishing point, create two measure points on same hierarchy level as source point. Position of measure point update automatically after moving its source point.
  • inheritance of visibility and lock in groups of points. Now it works like in layer groups.
  • return of angles in point list.

Next feature that I plan to implement will be presenting names of point while drawing line.


This is awesome! It took me a minute to realize how the measuring points worked. I was frankly confused as to why there were TWO of them, until I realized you might need either one depending on which side of the CV your point is on. It is really cool how they are linked together, as you move them it helps you understand what is happening.

I have couple more ideas that might be useful:

  • Highlight the currently selected VP from list. So, if you click on VP in the list, its color changes to bright green or something. Otherwise you have to hide and show the VP in order to figure out where it is. Bonus if you click on a group it highlights all the VPs in that group?
  • Button to create 90 Degree linked VP counterparts for the selected VP. Similar to the Measuring Points button. So, if I create a VP at 30 degrees to the right of CV, and I select it and click the 90 degree button, it should create 2 VPs (one at 60 degrees on the opposite side of the CV, and at 120 degrees to the right). I think it’d be identical to the MP Button except 90 instead of 45?

Awesome work!


I plan to add configurable colors to VPs. This can be done as change of saturation or intensity of color.

Adding other types of generated points is in plans. I thought about horizontal mirroring of VPs, it could be useful for drawing roofs and similar shapes.

Thanks for suggestions.


Very cool idea with the mirroring VPs. I just tried your latest commit for displaying the names of active VP: perfect!

Couple more ideas for you:

I notice I typically add VPs and immediately lock them 99% of the time. Why not have them locked by default, and use a modifier key to unlock them (like CTRL or ALT). You could even get rid of the lock button (or make it a “hard lock”). This would streamline the workflow a bit, avoid the frustration of moving a VP by accident, AND open the door for clickable VPs. . .

Clickable VPs… it’d be great if I could click on a VP on the canvas (without it moving!) and have it selected in the sidebar list. That way I can quickly identify a VP on the canvas and name it, group it, hide it, etc.

I plan to add configurable colors to VPs. This can be done as change of saturation or intensity of color.

This sounds cool for visually organizing your VPs, but I’m not sure if it makes finding a VP easier than toggling visibility. It’d be nice to have a one-click solution: I select a VP from list and the VP gets highlighted on canvas. Maybe a bold outline or inverted color, etc.

Any thoughts on ellipses? I’ve found a technique that works fairly well but it’s not automatic. 1. Squish ellipse so it is a flat line. 2. rotate until it points to the minor axis VP. 3. Expand the ellipse until it fills the square shape you are drawing on.

Couple issues with this is that 1) you have to guess the center of the ellipse, which is not the center of the box (you can’t just draw an X and find the center). 2) you can’t move the ellipse once you’ve started drawing it, so you have to start over if it isn’t placed in the right spot. It might help to create the ellipse on a new layer and then move the layer, but that’s still far from ideal.

Do you think if you were able to select one VP that the ellipse tool could snap to this VP in such a way that all you have to do is click on the “center” of your square and MyPaint will draw the ellipse offset from that location in the appropriate spot? Maybe this workflow makes sense?

  1. Click and hold at center of where the circle exists in 3D (the X of your box)
  2. Drag out a perfect circle-- hold Ctrl to constrain to circle (or maybe pick any ratio?)
  3. Hold Shift and move cursor towards a VP. The ellipse rotates to align minor axis with this VP.
  4. Release modifier keys and drag normally to resize while constrained to selected ratio from step 2 and selected minor axis angle from step 3.

Clear as mud, right? I hate ellipses! :slight_smile:


Locking new points by default can be added.
Using modifier keys with VPs and clickable VPs can be part of changes in handling of VPs.
Currently there are three kinds of special points:

  • “Center” - controls position of all points
  • “Left” and “Right” - controls rotation and scale
  • “Side” and “Forward” - controls rotation in 2 point perspective group

For 3 point perspective there could be needed for additional controls.
I think, it need to be simplified. Some of these controls could be changed with modifier keys.

Yes, I plan to add support of ellipses and maybe rectangles. But before that I want to add save and load, 3P perspective and 5P perspective.
I planed this workflow:

  1. Select 2 VPs, they define “horizon” for drawing ellipses.
  2. Use ellipse drawing tool
  3. Draw ellipse like in normal ellipse drawing tool, but on plane defined by 2 selected VPs

If I correctly understand, your workflow is more flexible? Second VP is chosen while drawing ellipse.
But I don’t know what decide about orientation of ellipse in space.


As a Mechanical Engineer who had to take Discrete Geometry this is an excellent book and one I hope in your endeavor you can reference when developing True projections, fully labeled with TL, etc.

3 new photos · Album by Marc Driftmeyer


I added some new features in perspective mode:

  • Save and load of perspective data using JSON files. Some additional data are not saved (visibility, lock, color). Also image after saving can change its coordinates and after loading perspective data point can appear in different places.
  • Initial implementation of 3 point perspective. Points are defined by passing “up” vector and rotation. Points can be dragged to adjust rotation around “up” axis. This need some improvements to be more user friendly.
  • Possibility to set color for vanishing point.


New features added since last comment:

  • right click menu - some functions are accessible only by right click
  • horizontal mirroring of points
  • now perspective projection is controlled by points: size, rotation and center.
    New way of definition of configuration points is more flexible. It is base on relations between points instead of special properties of points.
    Similar changes will be done to definition of 2P and 3P perspective.
  • drawing circles, triangles and squares in perspective projection.
    Working depends on number of selected vanishing points:
    0 or more than 2 - shapes will be drawn on ground plane.
    1 - shapes will be drawn on plane perpendicular to direction of vanishing point.
    2 - plane parallel to direction of both vanishing points


Hallo Gwojcik

My first experience with Perspective

I’m just learning to draw the perspective

To understand all this, I use the Book of Ernest R. Norling (perspective made easy) and some Youtube videos.

I am happy that I can use this in Mypaint .

Many thanks, I continue to gain experience

Lg peter