Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SG_NODE(3)		     Library Functions Manual		      SG_NODE(3)

NAME
     SG_Node -- Agar-SG base node class

SYNOPSIS
     #include <agar/core.h>
     #include <agar/sg.h>

DESCRIPTION
     SG_Node  is the base class for any element of a SG(3) scene.  This includes
     geometrical elements (e.g., SG_Object(3)) as well as  non-geometrical  ele-
     ments (e.g., SG_Light(3), SG_Camera(3)).

     Nodes  are  organized in a tree structure, and the position of a SG_Node in
     relation to its parent is determined by a 4x4  transformation  matrix  (see
     M_Matrix(3)).

INHERITANCE HIERARCHY
     AG_Object(3)-> SG_Node.

INTERFACE
     void SG_RegisterClass(SG_NodeOps *ops)

     void  SG_NodeInit(void *node, const char *name, const SG_NodeOps *ops, Uint
     flags)

     void * SG_NodeAdd(void *pnode, const char	*name,	const  SG_NodeOps  *ops,
     Uint flags)

     void SG_NodeAttach(void *pnode, void *node)

     void SG_NodeDetach(void *pnode, void *node)

     void SG_NodeDraw(SG *sg, SG_Node *node, SG_View *view)

     The  SG_RegisterClass()  function	registers a new node class, described by
     the given SG_NodeOps structure.

     The SG_NodeInit() function initializes the given SG_Node structure.  It  is
     usually  invoked  from  node constructor functions.  The name argument is a
     string identifier for the node.  ops points  to  the  SG_NodeOps  structure
     which  contains  class  information.   The flags argument should be 0.  The
     SG_NodeAdd() variant also allocates, initializes and attaches the node to a
     parent node.

     The SG_NodeAttach() and  SG_NodeDetach()  functions  attach/detach  a  node
     to/from a given parent.

     The  SG_NodeDraw() function is used to render a node to the display.  It is
     normally only invoked from the draw operation of SG_View(3) (or another vi-
     sualization widget derived from SG_View).	SG_NodeDraw() assumes  that  the
     node's  transformation matrix has already been applied to the current view-
     ing matrix.

NODE TRANSFORMATIONS
     The following calls multiply a node's transformation matrix T with a trans-
     lation, scaling or rotation matrix.  Note that the T matrix may also be ma-
     nipulated directly with the M_Matrix(3) interface.

     void SG_Identity(SG_Node *node)

     void SG_Translate(SG_Node *node, M_Real x, M_Real y, M_Real z)

     void SG_Translatev(SG_Node *node, M_Vector3 v)

     void SG_TranslateX(SG_Node *node, M_Real x)

     void SG_TranslateY(SG_Node *node, M_Real y)

     void SG_TranslateZ(SG_Node *node, M_Real z)

     void SG_Scale(SG_Node *node, M_Real s)

     void SG_Rotatev(SG_Node *node, M_Real theta, M_Vector3 axis)

     void SG_RotateI(SG_Node *node, M_Real theta)

     void SG_RotateJ(SG_Node *node, M_Real theta)

     void SG_RotateK(SG_Node *node, M_Real theta)

     void SG_Rotatevd(SG_Node *node, M_Real degrees, M_Vector3 axis)

     void SG_RotateId(SG_Node *node, M_Real degrees)

     void SG_RotateJd(SG_Node *node, M_Real degrees)

     void SG_RotateKd(SG_Node *node, M_Real degrees)

     void SG_GetNodeTransform(void *node, M_Matrix44 *T)

     void SG_GetNodeTransformInverse(void *node, M_Matrix44 *T)

     M_Vector3 SG_NodePos(SG_Node *node)

     M_Vector3 SG_NodeDir(SG_Node *node)

     M_Real SG_NodeSize(SG_Node *node)

     SG_Identity() sets the transformation matrix of the node  to  the	identity
     matrix.

     The SG_Translate*() functions multiply T by a translation matrix.

     The SG_Scale() function multiplies T by a uniform scaling matrix.

     SG_Rotate*() multiply T by a rotation matrix.  Angles are given in radians,
     except  for  SG_Rotate*d()  variants  which accept angular arguments in de-
     grees.

     SG_Rotatev() generates a rotation of theta radians around axis.

     Note that most of the preceding functions are trivial wrappers around M_Ma-
     trix(3) functions (applied to the transformation matrix T of the node).

     The SG_GetNodeTransform() function returns a transformation matrix  mapping
     the  node	back to world coordinates (i.e., by computing the product of the
     transformation matrices of the node  and  its  parents).	SG_GetNodeTrans-
     formInverse() returns the inverse of this matrix.

     The  SG_NodePos() function returns a vector representing the absolute world
     coordinates of a node.  SG_NodeDir() returns a normalized vector represent-
     ing the direction of a node with respect to the world Z axis (i.e.,  the  Z
     axis  of the origin node).  SG_NodeSize() returns the absolute scaling fac-
     tor of an object.

STRUCTURE DATA
     For the SG_Node object:

     Uint flags     Option flags (see "FLAGS" section).
     SG *sg	    Back pointer to parent SG(3) object.
     M_Matrix44 T   Transformation matrix (relative to parent node).

FLAGS
     For the SG_Node object:

     SG_NODE_SELECTED	Node is selected (e.g., for edition).

EXAMPLES
     See sg/sg_dummy.c in the Agar source distribution for an example node class
     implementation.

SEE ALSO
     M_Matrix(3), M_Real(3), M_Vector(3), SG(3), SG_Intro(3)

HISTORY
     The SG_Node node class first appeared in Agar 1.6.0.

Agar 1.7			December 21, 2022		      SG_NODE(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=SG_Node&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help