FreeBSD Manual Pages
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 in- cludes geometrical elements (e.g., SG_Object(3)) as well as non-geomet- rical elements (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 at- taches 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 an- other visualization widget derived from SG_View). SG_NodeDraw() as- sumes that the node's transformation matrix has already been applied to the current viewing matrix. NODE TRANSFORMATIONS The following calls multiply a node's transformation matrix T with a translation, scaling or rotation matrix. Note that the T matrix may also be manipulated 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 iden- tity 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 ra- dians, except for SG_Rotate*d() variants which accept angular arguments in degrees. SG_Rotatev() generates a rotation of theta radians around axis. Note that most of the preceding functions are trivial wrappers around M_Matrix(3) functions (applied to the transformation matrix T of the node). The SG_GetNodeTransform() function returns a transformation matrix map- ping the node back to world coordinates (i.e., by computing the product of the transformation matrices of the node and its parents). SG_GetNodeTransformInverse() 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 representing 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 ab- solute scaling factor 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)
NAME | SYNOPSIS | DESCRIPTION | INHERITANCE HIERARCHY | INTERFACE | NODE TRANSFORMATIONS | STRUCTURE DATA | FLAGS | EXAMPLES | SEE ALSO | HISTORY
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+14.3.quarterly>
