  | 
  | 
 
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
I want share three macros to manipulate vectors on screen. I know there is
already Screen_Object in screen.inc include file but I can't use it to
manipulate selected vertices in mesh.
// screen.inc extension by ABX
// 12/04/2002
// Calculate 3D vector equivalent for specified camera parameters and
// screen coordinates. Put it in specified Distance from camera. For
// Distance_Type = yes use Distance as distance between result and
// camera location (placing on sphere around camera location).
// For Distance_Type = no use Distance as distance between camera
// location and plane contaning result and parallel to camera plane
// (placing on plane in front of camera). Input vector is 2D from
// <-.5,-.5> to <.5,.5>
#macro Screen_To_Vector( V2 )
  #local V = V2 * <Camera_Aspect_Ratio,1,0> ;
  vtransform( V , transform{ Camera_Transform translate CamD } )
#end
#macro Screen_To_Vector_At_Distance( V2 , Distance , Distance_Type )
  #local V = Screen_To_Vector( V2 ) ;
  ( CamL + Distance * ( Distance_Type ? vnormalize( V - CamL ) : ( V - CamL ) /
vlength( CamD ) ) )
#end
// Calculate coordinates on screen for specified 3D vector )
// Screen itself is from <-.5,-.5> to <.5,.5>
#macro Vector_To_Screen( V2 )
  #local Dir = vnormalize( V2 - CamL ) ;
  #local VD = vdot( vnormalize(CamD) , Dir );
  #if ( VD = 0 ) #error "Error : Vector on viewer plane" #end
  #local V = vtransform(
    - vlength(CamD) * Dir / VD ,
    transform{
      Camera_Transform
      translate CamD
      translate -CamL
      inverse
    }
  ) ;
  < V.x/Camera_Aspect_Ratio , V.y >
#end
// ABX
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
wrote:
> I want share three macros to manipulate vectors on screen. I know there is
> already Screen_Object in screen.inc include file but I can't use it to
> manipulate selected vertices in mesh.
and sample file to present control over distance to camera and placing
rendered version after moment in p.b.i
#include "screen.inc"
Set_Camera_Location(<-4,4,0>)
Set_Camera_Look_At(z*15)
       
background{x}       
#local X=-.5;
#while (X<=.5)
  #local Y=-.5;
  #while (Y<=.5)
    #local V = Screen_To_Vector_At_Distance( <X,Y> , 100 , no );
    sphere{ V , 4 pigment{agate} finish{ambient 1 diffuse 0 }}
    #local V = Screen_To_Vector_At_Distance( Vector_To_Screen( V ) , 50 , no ); 
    sphere{ V , 1 pigment{bozo} finish{ambient 1 diffuse 0 }}
    #local Y=Y+.1;
  #end
  #local X=X+.1;
#end
sphere{
  Screen_To_Vector_At_Distance( <0,0> , 75 , no ) , 20
  pigment{rgbt .5} finish{ambient 1 diffuse 0 }
}
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 
 | 
  |