Created
April 23, 2010 05:21
-
-
Save pklaus/376217 to your computer and use it in GitHub Desktop.
Povray: Mug_and_Torus_morph http://de.wikipedia.org/wiki/Datei:Mug_and_Torus_morph.gif
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Torus to mug morphing animation, by Lucas V. Barbosa - January 17, 2007 - Coded in: POV-Ray 3.6 | |
| License: | |
| Info | |
| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | |
| Author user page: http://en.wikipedia.org/wiki/User:Kieff | |
| The final animation at Wikimedia Commons: http://commons.wikimedia.org/wiki/Image:Mug__morph.gif | |
| Notes | |
| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | |
| Several modifications were done for each part of the animation and I didn't keep them all here. | |
| So if you wish to reproduce the animation, you'll have to play with this code quite a bit. :) | |
| */ | |
| background { color rgb 1 } | |
| global_settings { assumed_gamma 1.5 } | |
| camera { | |
| orthographic | |
| location <0,4,-5>*0.8 | |
| look_at <0,0,0> | |
| //rotate -45*y | |
| } | |
| #declare dist = 0.2; | |
| light_source { | |
| <0,0,0>, 1 | |
| //translate <-3,5,-5>*1 | |
| translate 5*y | |
| translate -5*z | |
| translate 2*x | |
| } | |
| #declare a = 1; | |
| // Cylinders for the mug shape | |
| #declare C_a = function { pow(x / a,2) + pow(z / a,2)-1.5 } | |
| #declare C_b = function { pow(x / a,2) + pow(z / a,2)-1.2 } | |
| #declare B_b = function { (y+1.3) } | |
| // Torus (handle and the morphing target) | |
| #declare R = 1; #declare r = 0.22; | |
| #declare T_a = function { pow(R - sqrt(pow(x,2) + pow(y,2)),2) + pow(z,2) - pow(r,2) } | |
| #declare R2 = 1; #declare r2 = 0.5; | |
| #declare T_b = function { pow(R2 - sqrt(pow(x,2) + pow(y,2)),2) + pow(z,2) - pow(r2,2) } | |
| // Hollow mug (concave) | |
| #declare Mug = function { min(min(max(C_a(x,y,z),B_b(x,y,z)),max(C_a(x,y,z),-C_b(x,y,z))),max(T_a(x-1,y,z),-C_a(x,y,z))) } | |
| // Solid mug (cylinder with handle, convex) | |
| #declare Mug2 = function { min(C_a(x,y,z),max(T_a(x-1,y,z),-C_a(x,y,z))) } | |
| #declare c = 0.5; | |
| // Linear to smooth interpolation | |
| #declare Int = pow(sin(clock*pi/2),2); | |
| // Functions for the mug parts, left as backups. | |
| // max(C_a(x,y,z),B_b(x,y,z)) bottom | |
| // max(C_a(x,y,z),-C_b(x,y,z)) sides | |
| // min(max(C_a(x,y,z),B_b(x,y,z)),max(C_a(x,y,z),-C_b(x,y,z))) bottom+sides | |
| // max(T_a(x-1,y,z),-C_a(x,y,z)) handle | |
| // min(min(max(C_a(x,y,z),B_b(x,y,z)),max(C_a(x,y,z),-C_b(x,y,z))),max(T_a(x-1,y,z),-C_a(x,y,z))) full mug | |
| // Render as isosurface or CSG. | |
| // Isosurface is used in the transitional states. | |
| #declare RenderIsosurface = 0; | |
| #if (RenderIsosurface) | |
| union { | |
| isosurface { | |
| function { | |
| // Add previously defined object functions using Int and (1-Int) as to generate the smooth transition | |
| //Mug2(x,y,z)*(1-Int) + | |
| Mug(x,y,z) | |
| //T_b(x-1,y,z)*Int | |
| } | |
| contained_by { box { -<3,1.5,3>, <3,1.5,3> } } | |
| accuracy 0.001 | |
| max_gradient 5 // 10 | |
| //rotate -90*x | |
| } | |
| cylinder { | |
| <0,-1.3+Int*2.8,0>, <0,-1.5,0>, sqrt(1.5) | |
| } | |
| pigment { | |
| color rgb <0.6,0.8,1> transmit 0.1 | |
| } | |
| finish { | |
| specular 0.5 | |
| roughness 0.01 | |
| ambient 0.2 | |
| } | |
| } | |
| #else | |
| union { | |
| difference { | |
| cylinder { | |
| -1.5*y, 1.5*y, sqrt(1.5) | |
| } | |
| cylinder { | |
| -2*y, 2*y, sqrt(1.2) | |
| } | |
| } | |
| difference { | |
| torus { | |
| R, r | |
| rotate 90*x | |
| translate x | |
| } | |
| cylinder { | |
| -1.5*y, 1.5*y, sqrt(1.5) | |
| } | |
| } | |
| cylinder { | |
| <0,0-0.25+Int*(1.5+0.25),0>, <0,-1.5,0>, sqrt(1.5) | |
| } | |
| pigment { | |
| color rgb <0.6,0.8,1> transmit 0.1 | |
| } | |
| finish { | |
| specular 0.5 | |
| roughness 0.01 | |
| ambient 0.2 | |
| } | |
| } | |
| #end | |
| /* END OF FILE */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment