view.portal

Second 'portal view' that is attached to the view. A portal is a special surface of a level or map entity where this portal view is mapped onto. This way windows into different areas of the level, as well as realtime mirrors can be created.If the mirror flag (only available in WED 5, emulated by flag8 in WED 4) is set for a surface, the portal view is blended onto that surface. Only one portal can be visible at a time. If several portals are in the view, only the first one will be displayed properly.The blending percentage is given by the albedo parameter of the surface (0..100 %). If the surface is part of a map entity, then its albedo value modulates the surface value, allowing for soft blending in/out of mirrors.As soon as a portal surface is visible in the view, the view's portal_x, portal_y and portal_z parameters are set to the position of the first vertex of that surface. The view's pnormal_x, pnormal_y and pnormal_z parameters are set to the normal of the portal surface. Those parameters can be used to emulate a realtime mirror by setting the portal view parameters accordingly.

Remarks:

Note that despite it looks like a real mirror, it is just a second imaginary camera view. The imaginary camera must have no obstacles in the way, and must look through a 'hole' in the wall where the mirror is attached. The mirror itself should be an unrotated map entity for being invisible to the imaginary camera. The side walls of the mirror hole must be set to the none rendering mode for being invisible too when the camera swings around its imaginary position.

Type:

View*

Edition:

 P 

Example:

// Code to emulate a horizontal mirror by generating a vertically flipped camera view
view mirror { }
function init_mirror_z()
{
  camera.portal = mirror;
 	mirror.noshadow = on; // suppress shadows in the mirror
 	mirror.portalclip = on;
 	while (1)
 	{
	  proc_late();   // place it at the end of the function list - the camera must be moved before
 	  mirror.genius = camera.genius;
 	  mirror.aspect = -camera.aspect;    // flip the image upside down
 	  mirror.arc = camera.arc;
 	  mirror.fog = camera.fog;
 	  mirror.x = camera.x;
 	  mirror.y = camera.y;
 	  mirror.z = 2*camera.portal_z-camera.z; //move the camera downwards by twice the portal distance
    mirror.pan = camera.pan;
 	  mirror.tilt = -camera.tilt; // flip the vertical camera angle
 	  mirror.roll = -camera.roll;
 	  wait(1);
  }
} 

See also:

layer, pos_x, pos_y, size_x, size_y, x, y, z, pan, tilt, roll, arc, aspect, offset_x, offset_y, ambient, fog, fog_start, fog_end, alpha, genius, flags