Catmull–Clark subdivision surface/Tcl Test Code: Difference between revisions
Content added Content deleted
Line 42: | Line 42: | ||
(Using the utility functions from above, plus the code from the main solution page.) |
(Using the utility functions from above, plus the code from the main solution page.) |
||
<lang tcl># Make a display surface |
<lang tcl># Make a display surface |
||
pack [canvas .c] |
pack [canvas .c -width 400 -height 400 -background #7f7f7f] |
||
# Points to define the unit cube |
# Points to define the unit cube |
||
set points { |
set points { |
||
Line 55: | Line 55: | ||
{0.0 1.0 1.0} |
{0.0 1.0 1.0} |
||
} |
} |
||
foreach pt $points { |
|||
⚫ | |||
lassign $pt x y z |
|||
lappend points [list [expr {0.25 + 0.5*$x}] [expr {0.25 + 0.5*$y}] $z] |
|||
} |
|||
⚫ | |||
set faces { |
set faces { |
||
{0 |
{0 8 9 1} |
||
{ |
{1 9 10 2} |
||
{2 10 11 3} |
|||
{3 11 8 0} |
|||
{0 1 5 4} |
{0 1 5 4} |
||
{ |
{1 2 6 5} |
||
{ |
{2 3 7 6} |
||
{ |
{3 0 4 7} |
||
{4 5 13 12} |
|||
{5 6 14 13} |
|||
{6 7 15 14} |
|||
{7 4 12 15} |
|||
{8 9 13 12} |
|||
{9 10 14 13} |
|||
{10 11 15 14} |
|||
{11 8 12 15} |
|||
} |
} |
||
# Show the initial layout |
# Show the initial layout |
||
visualizeNet .c $points $faces -outline |
visualizeNet .c $points $faces -outline white -fill {} |
||
# Apply the Catmull-Clark algorithm to generate a new surface |
# Apply the Catmull-Clark algorithm to generate a new surface |
||
lassign [CatmullClark $points $faces] points2 faces2 |
lassign [CatmullClark $points $faces] points2 faces2 |
||
## Uncomment the next line to get the second level of subdivision |
## Uncomment the next line to get the second level of subdivision |
||
lassign [CatmullClark $points2 $faces2] points2 faces2 |
|||
lassign [CatmullClark $points2 $faces2] points2 faces2 |
|||
# Visualize the new surface |
# Visualize the new surface |
||
visualizeNet .c $points2 $faces2 -outline |
visualizeNet .c $points2 $faces2 -outline #0000cc</lang> |