---
title: Space and Perspective
url: https://doc.liz6.com/en/general-education/visual-foundations/04-perspective-and-space
locale: en
area: general-education
tags:
- General Education
- Visual Foundations
- General education
- Visual foundations
date: 2026-09-10
modified: 2026-09-10
description: A picture has no actual front-to-back distance, yet it can suggest a corridor, a row of trees or objects arranged on a table. Several visual cues support that reading.
---

# Space and Perspective

A picture has no actual front-to-back distance, yet it can suggest a corridor, a row of trees or objects arranged on a table. Several visual cues support that reading.

**Recognize overlap and relative size first, then connect perspective to the viewing position.** You do not need to draw complex architecture. The goal is to identify why an image suggests depth and what assumptions its cues require.

## Overlap establishes order

When a sphere covers a corner of a box, we usually read the sphere as nearer. The hidden object need not be completely visible for the relationship to make sense.

Overlap mainly suggests order, not a distance in centimeters. A flat collage can create the same cue. We are examining what the image communicates.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 210" width="400" height="210" role="img" aria-labelledby="vf-4-wide-title" data-diagram-layout="wide" data-diagram-theme="native">
<title id="vf-4-wide-title">A overlapping shapes; B equal objects appearing smaller with distance.</title>
<defs>
<radialGradient id="vf-4-wide-ball" cx="30%" cy="25%" r="80%">
<stop stop-color="#eee"/>
<stop offset=".5" stop-color="#aaa"/>
<stop offset="1" stop-color="#3f3f3f"/>
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#e8e4dc"/>
<g transform="translate(0 0) scale(1)">
<rect x="36" y="42" width="92" height="90" fill="#b7733e"/>
<rect x="81" y="78" width="92" height="90" fill="#536a78"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">A</text>
</g>
<g transform="translate(200 0) scale(1)">
<rect x="25" y="75" width="70" height="70" fill="#536a78"/>
<rect x="76" y="100" width="45" height="45" fill="#738162"/>
<rect x="127" y="118" width="27" height="27" fill="#b7733e"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">B</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 525" width="250" height="525" role="img" aria-labelledby="vf-4-compact-title" data-diagram-layout="compact" data-diagram-theme="native">
<title id="vf-4-compact-title">A overlapping shapes; B equal objects appearing smaller with distance.</title>
<defs>
<radialGradient id="vf-4-compact-ball" cx="30%" cy="25%" r="80%">
<stop stop-color="#eee"/>
<stop offset=".5" stop-color="#aaa"/>
<stop offset="1" stop-color="#3f3f3f"/>
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#e8e4dc"/>
<g transform="translate(0 0) scale(1.25)">
<rect x="36" y="42" width="92" height="90" fill="#b7733e"/>
<rect x="81" y="78" width="92" height="90" fill="#536a78"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">A</text>
</g>
<g transform="translate(0 262.5) scale(1.25)">
<rect x="25" y="75" width="70" height="70" fill="#536a78"/>
<rect x="76" y="100" width="45" height="45" fill="#738162"/>
<rect x="127" y="118" width="27" height="27" fill="#b7733e"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">B</text>
</g>
</svg>

Overlap in A clarifies front-to-back order. B uses the projected size of equal objects to suggest distance. The cues can work together, but they provide different information.

## Smaller does not always mean farther

Under the same viewing conditions, **objects of equal real size** generally appear smaller as distance increases. Identical streetlights along a road are a useful example.

If real sizes differ, a nearby coin may occupy more of the image than a distant building. “Small in the picture” cannot simply be translated as “far away.” Familiar sizes, overlap and ground relationships can provide additional evidence.

## Perspective begins at the viewpoint

Imagine the picture as a fixed window. Straight lines between the eye and objects intersect that window, locating their projections. Move the viewpoint and those intersections change.

In a familiar scene with level ground, the horizon corresponds to eye level. Parallel lines sharing one spatial direction can converge toward one vanishing point in the projection. **Different directions generally have different vanishing points. Edges parallel to the picture plane do not meet at a finite point in the image.**

## Check eye height with a box

In the one-point view below, the box's front face is parallel to the picture plane. Its depth edges head toward one vanishing point. The camera stays level and only its height changes.

**Three clues to depth**

Overlap establishes order. Size mode places equal-sized panels at different distances. Perspective mode raises a level camera and shows how the box and floor move relative to the horizon. Edges parallel to the picture plane remain parallel.


At the height of the box top, that top surface is almost compressed into a line. Raise the eye and more of the top becomes visible. Here the horizon remains in the same place within the image because the camera does not tilt and the projection settings remain fixed. Raising a phone while tilting it downward changes two things, so it is a different experiment.

Ground lines extending into depth approach each other. Lines running horizontally across the image remain parallel, although their projected lengths shrink with distance. Identify a line's **direction in space** instead of making every line head toward the image center.

## Read three kinds of depth evidence in a corridor

Doorways on the left and square columns on the right become smaller down a corridor; floor and ceiling edges recede toward a common distant region.

AI-generated observation reference. Compare visible evidence; use the authored diagrams for exact geometric relationships.


Before adding guide lines, identify visible evidence: nearer doorways are larger, later doorways become smaller, the right-hand columns overlap, and floor, wall and ceiling edges narrow into the distance. These cues support one another; none must establish the whole space alone.

Follow the upper edge and base of the left wall and the direction of the columns. They generally recede toward the same distant region. **The outline of a distant mountain is not the horizon line of a perspective construction.** Nor does a long horizontal mark automatically qualify. A perspective horizon relates to eye height and horizontal spatial directions; a mountain silhouette describes particular terrain.

This generated reference is useful for observation, not exact measurement. The next diagram uses a deliberate construction so the steps can be checked.

## Worked example: construct a room you can furnish

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="4" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-4-wide-title">
<title id="case-4-wide-title">Room construction: A horizon and back wall; B doors receding in depth; C incorrectly directed top edge of the right door.</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-4-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-4-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 45L162 112M10 195L162 112M310 45L162 112M310 195L162 112" stroke="#a97a38" stroke-width="2" stroke-dasharray="5 4"/>
<path d="M48 61.75V174.25L61 167.1513157894737V67.48026315789474Z" fill="#596e70"/>
<path d="M80 75.85526315789474V156.7763157894737L93 149.67763157894737V81.58552631578948Z" fill="#596e70"/>
<path d="M102 85.55263157894737V144.76315789473685L115 137.66447368421052V91.28289473684211Z" fill="#596e70"/>
<path d="M234 79.4054054054054L286 55.86486486486486V181.54054054054052L234 152.3783783783784Z" fill="#596e70"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-4-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 45L162 112M10 195L162 112M310 45L162 112M310 195L162 112" stroke="#a97a38" stroke-width="2" stroke-dasharray="5 4"/>
<path d="M48 61.75V174.25L61 167.1513157894737V67.48026315789474Z" fill="#596e70"/>
<path d="M80 75.85526315789474V156.7763157894737L93 149.67763157894737V81.58552631578948Z" fill="#596e70"/>
<path d="M102 85.55263157894737V144.76315789473685L115 137.66447368421052V91.28289473684211Z" fill="#596e70"/>
<path d="M234 79.4054054054054L286 109V181.54054054054052L234 152.3783783783784Z" fill="#ac5c48"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 780" width="320" height="780" data-vf-case="4" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-4-compact-title">
<title id="case-4-compact-title">Room construction: A horizon and back wall; B doors receding in depth; C incorrectly directed top edge of the right door.</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-4-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-4-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 45L162 112M10 195L162 112M310 45L162 112M310 195L162 112" stroke="#a97a38" stroke-width="2" stroke-dasharray="5 4"/>
<path d="M48 61.75V174.25L61 167.1513157894737V67.48026315789474Z" fill="#596e70"/>
<path d="M80 75.85526315789474V156.7763157894737L93 149.67763157894737V81.58552631578948Z" fill="#596e70"/>
<path d="M102 85.55263157894737V144.76315789473685L115 137.66447368421052V91.28289473684211Z" fill="#596e70"/>
<path d="M234 79.4054054054054L286 55.86486486486486V181.54054054054052L234 152.3783783783784Z" fill="#596e70"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-4-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-4-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#ece8df"/>
<rect x="118" y="82" width="88" height="64" fill="#d5d1c6"/>
<path d="M10 8L118 82V146L10 228Z" fill="#c4b7a4"/>
<path d="M310 8L206 82V146L310 228Z" fill="#ded5c6"/>
<path d="M10 228L118 146H206L310 228Z" fill="#b4afa3"/>
<path d="M10 45L162 112M10 195L162 112M310 45L162 112M310 195L162 112" stroke="#a97a38" stroke-width="2" stroke-dasharray="5 4"/>
<path d="M48 61.75V174.25L61 167.1513157894737V67.48026315789474Z" fill="#596e70"/>
<path d="M80 75.85526315789474V156.7763157894737L93 149.67763157894737V81.58552631578948Z" fill="#596e70"/>
<path d="M102 85.55263157894737V144.76315789473685L115 137.66447368421052V91.28289473684211Z" fill="#596e70"/>
<path d="M234 79.4054054054054L286 109V181.54054054054052L234 152.3783783783784Z" fill="#ac5c48"/>
<path d="M10 112H310" stroke="#4f7076" stroke-width="1" stroke-dasharray="4 4"/>
<circle cx="162" cy="112" r="4" fill="#4f7076"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

**A: choose the viewing conditions.** The camera is level and faces the back wall. Draw a horizon, place the depth-direction vanishing point on it, and add a rectangular back wall parallel to the picture plane. Extend its corner directions outward to the frame to establish walls, ceiling and floor. A vanishing point organizes directions; it does not order you to put the artistic focal point there.

**B: place objects in that space.** Add doors along the left wall. Their vertical edges remain vertical; their top and bottom edges recede in the wall's depth direction. More distant doors appear smaller and the gaps compress. Equal widths and gaps measured mechanically on the page would ignore their different depths.

**C: diagnose an inconsistent construction.** The top of the right-hand doorway heads in the wrong direction for its wall. Bricks, wood grain and shadows will not fix this structural error. Identify which spatial direction the edge belongs to before correcting it. Do not pull every edge toward one point.

## Construct equal depth: four floor tiles

Assume a level floor and a level camera facing the row. Crosswise edges remain horizontal; the sides recede toward V. A is the projection of a rectangular floor patch: AB is near, CD far. Divide its real depth into four equal parts, not its pixel height.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="steps-floor" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-steps-floor-wide-title">
<title id="case-steps-floor-wide-title">Construct equal depth: four floor tiles</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-steps-floor-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-steps-floor-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M30.0 165.0L186.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M290.0 165.0L134.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M116.66666666666666 78.33333333333334L203.33333333333334 78.33333333333334" stroke="#ad7131" stroke-width="2" fill="none"/>
<circle cx="160" cy="78.333333" r="4" fill="#ad7131"/>
<text x="164" y="99" font-size="18" font-family="sans-serif" fill="#293b43">M</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-steps-floor-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M30.0 165.0L186.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M290.0 165.0L134.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M116.66666666666666 78.33333333333334L203.33333333333334 78.33333333333334" stroke="#ad7131" stroke-width="2" fill="none"/>
<circle cx="160" cy="78.333333" r="4" fill="#ad7131"/>
<text x="164" y="99" font-size="18" font-family="sans-serif" fill="#293b43">M</text>
<path d="M95.0 100.0L225.0 100.0" stroke="#777c78" stroke-width="2" fill="none"/>
<path d="M127.5 67.5L192.5 67.5" stroke="#777c78" stroke-width="2" fill="none"/>
<path d="M30.0 165.0L203.33333333333334 78.33333333333334" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M290.0 165.0L116.66666666666666 78.33333333333334" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M116.66666666666666 78.33333333333334L186.0 61.0" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M203.33333333333334 78.33333333333334L134.0 61.0" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(320 260)">
<defs>
<clipPath id="case-steps-floor-wide-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-wide-3)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M108.0 87.0L212.0 87.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
<path d="M82.0 113.0L238.0 113.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
<path d="M56.0 139.0L264.0 139.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 1040" width="320" height="1040" data-vf-case="steps-floor" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-steps-floor-compact-title">
<title id="case-steps-floor-compact-title">Construct equal depth: four floor tiles</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-steps-floor-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-steps-floor-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M30.0 165.0L186.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M290.0 165.0L134.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M116.66666666666666 78.33333333333334L203.33333333333334 78.33333333333334" stroke="#ad7131" stroke-width="2" fill="none"/>
<circle cx="160" cy="78.333333" r="4" fill="#ad7131"/>
<text x="164" y="99" font-size="18" font-family="sans-serif" fill="#293b43">M</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-steps-floor-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M30.0 165.0L186.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M290.0 165.0L134.0 61.0" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M116.66666666666666 78.33333333333334L203.33333333333334 78.33333333333334" stroke="#ad7131" stroke-width="2" fill="none"/>
<circle cx="160" cy="78.333333" r="4" fill="#ad7131"/>
<text x="164" y="99" font-size="18" font-family="sans-serif" fill="#293b43">M</text>
<path d="M95.0 100.0L225.0 100.0" stroke="#777c78" stroke-width="2" fill="none"/>
<path d="M127.5 67.5L192.5 67.5" stroke="#777c78" stroke-width="2" fill="none"/>
<path d="M30.0 165.0L203.33333333333334 78.33333333333334" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M290.0 165.0L116.66666666666666 78.33333333333334" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M116.66666666666666 78.33333333333334L186.0 61.0" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M203.33333333333334 78.33333333333334L134.0 61.0" stroke="#9b9380" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(0 780)">
<defs>
<clipPath id="case-steps-floor-compact-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-floor-compact-3)">
<rect x="10" y="8" width="300" height="220" fill="#eee9df" />
<polygon points="30.0,165.0 290.0,165.0 186.0,61.0 134.0,61.0" fill="#c6c9bd" stroke="#526c70" stroke-width="2"/>
<text x="16.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">A</text>
<text x="292.0" y="184.0" font-size="18" font-family="sans-serif" fill="#293b43">B</text>
<text x="191.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">C</text>
<text x="117.0" y="57.0" font-size="18" font-family="sans-serif" fill="#293b43">D</text>
<text x="150" y="30" font-size="18" font-family="sans-serif" fill="#293b43">V</text>
<circle cx="160" cy="35" r="3" fill="#526c70"/>
<path d="M134.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M186.0 61.0L160 35" stroke="#829391" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<path d="M108.0 87.0L212.0 87.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
<path d="M82.0 113.0L238.0 113.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
<path d="M56.0 139.0L264.0 139.0" stroke="#a35f4d" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

B: join A to C and B to D. Their intersection M is the projected center of the rectangle. Draw a horizontal through M, parallel to AB, to halve the real depth. M is visibly closer to the far edge in the picture because depth is compressed.

C: repeat the diagonal-intersection construction inside each half to obtain four equal-depth tiles. The thin dashed diagonals show this second pass. D instead spaces the horizontal lines equally on screen; it cannot represent equal-depth tiles under these conditions.

The same construction works on a rectangular wall: find its center with diagonals, then split along the other edge direction. In two-point perspective, that split generally aims at the appropriate vanishing point rather than staying horizontal. This resolves repeated spacing; door width and height still need their own consistent directions.

## Why does a rotated box often need two vanishing points?

The previous back wall and box front are parallel to the picture, so their horizontal edges remain horizontal while depth edges recede. Rotate the box on the floor and both horizontal edge families usually recede, each toward its own vanishing point. With a level camera, the vertical edges remain vertical: the familiar two-point arrangement.

The points may be far outside the frame. Forcing both onto the paper often makes a near corner look unusually acute, with rapid recession on both sides. Check viewpoint and projection instead of counting visible dots. Looking upward at a tall building can make vertical edges converge as well; that changes the camera conditions.

## Depth does not always require ruler construction

| Cue | What it can support | Caution |
| --- | --- | --- |
| Overlap | Front-to-back order | It does not directly give a distance |
| Size change of known equal objects | Relative distance | An unknown small object need not be far away |
| Denser texture and compressed intervals | A surface receding in depth | Repeated objects still need consistent directions |
| Reduced distant detail and contrast | Distance under common atmospheric conditions | Air, lighting and material affect this; indoor distance need not turn everything blue |

For misty mountains, overlap, scale and weaker distant detail can organize depth without imposing straight architectural lines everywhere. Choose tools that match the subject's structure.

## Try a row of posts: what changed at the back?

The posts are equally tall on one level plane. The camera is level and its height equals theirs. A is the reference; B changes one post; C adds a guide to A. Does B still fit the conditions? Cite visible evidence, then name a condition under which it could work.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="practice-4" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-practice-4-wide-title">
<title id="case-practice-4-wide-title">Try a row of posts: what changed at the back?</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-practice-4-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="75" width="12" height="40" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-practice-4-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="27" width="12" height="88" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-practice-4-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="75" width="12" height="40" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
<path d="M60 75L299 75" stroke="#9e7445" stroke-width="2" fill="none"/>
<text x="245" y="69" font-size="18" font-family="sans-serif" fill="#293b43">H</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 780" width="320" height="780" data-vf-case="practice-4" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-practice-4-compact-title">
<title id="case-practice-4-compact-title">Try a row of posts: what changed at the back?</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-practice-4-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="75" width="12" height="40" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-practice-4-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="27" width="12" height="88" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-practice-4-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-4-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#dedfda" />
<path d="M10 75L310 75" stroke="#718387" stroke-width="2" fill="none" stroke-dasharray="4 4"/>
<rect x="55" y="75" width="12" height="128" fill="#536d77" />
<path d="M50 203L74 203" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="142" y="75" width="12" height="72" fill="#536d77" />
<path d="M137 147L161 147" stroke="#9e7445" stroke-width="2" fill="none"/>
<rect x="222" y="75" width="12" height="40" fill="#536d77" />
<path d="M217 115L241 115" stroke="#9e7445" stroke-width="2" fill="none"/>
<path d="M60 75L299 75" stroke="#9e7445" stroke-width="2" fill="none"/>
<text x="245" y="69" font-size="18" font-family="sans-serif" fill="#293b43">H</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

<details data-vf-practice="4"><summary>Decide first, then reveal the explanation</summary>

B lifts the distant post’s top above the shared horizon without moving its base. When post height equals eye height, every top projects onto the horizon, as in A and C. B could represent a taller post or a different support plane, but then the original equal-height, level-ground claim must change.

</details>

## Two common misreadings

**Situation one:** In a photograph, a nearby small cup is still smaller than a distant large jug. Does this violate perspective?

<details><summary>Show a possible explanation</summary><p>No. A direct near-versus-far size comparison requires equal real dimensions, or an allowance for their difference. Projected size depends on both size and distance.</p></details>

**Situation two:** The upper and lower edges on the front of a box do not converge in a one-point drawing. Should they be changed?

<details><summary>Show a possible explanation</summary><p>Not if that face is parallel to the picture plane. Its horizontal edges remain parallel. The separate group of edges extending into depth approaches its vanishing point. Identify which spatial direction each edge belongs to.</p></details>

Optional practice: look at a box from table height, then from above it. Keep your gaze level and compare the visible top, overlap and edge directions. Then tilt your gaze and notice which condition has changed.

Further reading: [Getty: From Foreground to Background](https://www.getty.edu/education/teachers/classroom_resources/curricula/landscapes/lesson02.html), [National Gallery: Vanishing Point](https://www.nationalgallery.org.uk/paintings/glossary/vanishing-point).
