povray/distribution/include/screen.inc
2013-11-06 13:07:19 -05:00

153 lines
4.6 KiB
PHP

// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
// Persistence of Vision Raytracer Version 3.5
// Screen Include File
// Created by Christoph Hormann, Chris Huff and Rune S. Johansen.
// Screen.inc will enable you to place objects and textures right in front
// of the camera. One use of this is to place your signature or a logo in
// the corner of the image.
// You can only use screen.inc with the perspective camera. Screen.inc
// will automatically create the camera definition for you when it is
// included.
// Note that even though objects aligned using screen.inc follow the
// camera, they are still part of the scene. That means that they will be
// affected by perspective, lighting, the surroundings etc.
// For instructions of use, look in the POV-Ray manual, and for an example
// of use, see screen.pov.
#ifndef(Screen_Inc_Temp)
#declare Screen_Inc_Temp = version;
#version 3.5;
#ifdef(View_POV_Include_Stack)
#debug "including screen.inc\n"
#end
#macro Update_Camera()
#ifndef (Camera_Aspect_Ratio)
#declare Camera_Aspect_Ratio = image_width/image_height;
#end
#ifndef (Camera_Location) #declare Camera_Location = <0,0,0>; #end
#ifndef (Camera_Look_At) #declare Camera_Look_At = z; #end
#ifndef (Camera_Sky) #declare Camera_Sky = y; #end
#ifndef (Camera_Zoom) #declare Camera_Zoom = 1; #end
#declare CamL=Camera_Location; // wherever you're putting it
#declare CamD=vnormalize(Camera_Look_At-CamL); // direction of camera view
#declare CamR=vnormalize(vcross(Camera_Sky,CamD)); // to the right
#declare CamU=vnormalize(vcross(CamD,CamR)); // camera up
#declare Camera_Transform =
transform {
matrix <
CamR.x, CamR.y, CamR.z,
CamU.x, CamU.y, CamU.z,
CamD.x, CamD.y, CamD.z,
CamL.x, CamL.y, CamL.z
>
}
camera {
direction CamD*Camera_Zoom
right CamR*Camera_Aspect_Ratio
up CamU
sky Camera_Sky
location CamL
}
#end
Update_Camera()
#macro Set_Camera_Location(Loc)
#declare Camera_Location = Loc;
Update_Camera()
#end
#macro Set_Camera_Look_At(LookAt)
#declare Camera_Look_At = LookAt;
Update_Camera()
#end
#macro Set_Camera_Aspect_Ratio(Aspect)
#declare Camera_Aspect_Ratio = Aspect;
Update_Camera()
#end
#macro Set_Camera_Aspect(Width,Height)
#declare Camera_Aspect_Ratio = Width/Height;
Update_Camera()
#end
#macro Set_Camera_Sky(Sky)
#declare Camera_Sky = Sky;
Update_Camera()
#end
#macro Set_Camera_Zoom(Zoom)
#declare Camera_Zoom = Zoom;
Update_Camera()
#end
#macro Set_Camera_Angle(Angle)
#declare Camera_Zoom = 0.5/tan(radians(Angle/2))*Camera_Aspect_Ratio;
Update_Camera()
#end
#macro Set_Camera(Location, LookAt, Angle)
#declare Camera_Location = Location;
#declare Camera_Look_At = LookAt;
Set_Camera_Angle(Angle)
Update_Camera()
#end
#macro Reset_Camera()
#undef Camera_Location
#undef Camera_Aspect_Ratio
#undef Camera_Location
#undef Camera_Look_At
#undef Camera_Sky
#undef Camera_Zoom
Update_Camera()
#end
#macro Screen_Object (Object, Position, Spacing, Confine, Scaling)
#local Obj_Max = max_extent(Object);
#local Obj_Min = min_extent(Object);
#local Obj_Cen = (Obj_Max+Obj_Min)/2;
#local Obj_Dim = (Obj_Max-Obj_Min)/2;
#local Pos = (Position-0.5)*2;
#local Pos = (
+<Pos.x*Camera_Aspect_Ratio/2,Pos.y/2,Camera_Zoom>
+( -Obj_Cen -Pos*(Obj_Dim+Spacing) ) * Confine
);
object {
Object
no_shadow // shouldn't cast shadows in the scene
no_reflection // shouldn't be reflected in scene elements
no_radiosity // also make the object invisible to radiosity rays
translate Pos
scale Scaling
transform {Camera_Transform}
}
#end
#macro Screen_Plane (Texture, Scaling, BLCorner, TRCorner)
box {
<-0.000001,-0.000001,0>, <+1.000001,+1.000001,0>
texture {Texture}
scale TRCorner*<1,1,0>-BLCorner*<1,1,0>+z
translate BLCorner*<1,1,0>+<-0.5,-0.5,0>
scale <Camera_Aspect_Ratio,1,1>
no_shadow // shouldn't cast shadows in the scene
no_reflection // shouldn't be reflected in scene elements
hollow on // for media/fog
translate Camera_Zoom*z
scale Scaling
transform {Camera_Transform}
}
#end
#version Screen_Inc_Temp;
#end