Package view provides 4 modules:
- transform - basic module
- node - interface for drawing objects
- resolver - calc full transform matrix
- camera - node for using as camera
methods:
-
@property mat4 matrix() const;
- you must implement in your realisation of Transform interface. This method must return transform matrix from local coord system to global. -
protected final static mat4 getMatrix( const(Transform) tr );
- returns identiny matrix if tr is null, andtr.matrix
otherwise.
implement matrix
@property
{
mat4 matrix() const { return mtr; }
void matrix( in mat4 m ) { mtr = m; }
}
fields:
Transform[] list
Order order = Order.DIRECT
- can beOrder.REVERSE
methods:
@property mat4 matrix() const
- return result of multiplication oflist
matrix by order.
protected fields:
mat4 mtr
- cached matrixTransform transform_source
methods:
void setTransform( Transform ntr )
- set new transform source and recalcvoid recalc()
- setmtr
astransform_source.matrix
iftransform_source
isn'tnull
, identity otherwise.
methods:
@property mat4 matrix() const
- need implement (Transform
) - local to parent transform matrix@property const(Node) parent() const
- needs for resolving full transform matrixfinal @property vec3 baseX() const
- base X vector of coord sysfinal @property vec3 baseY() const
- base Y vector of coord sysfinal @property vec3 baseZ() const
- base Z vector of coord sysfinal @property vec3 offset() const
- offset in parent system
public methods:
mat4 opCall( const(Node) obj, const(Node) cam ) const
- calc full transform matrix fromobj
coord system tocam
coord system
protected fields:
Node _parent
public fields:
Resolver resolver
- for full transform matrix calculationTransform projection
- present projection matrixTransform transform
- present view matrix
public methods:
this( Node parent=null )
- set parent and create new resolvermat4 resolve( const(Node) obj ) const
- return full transform matrixmat4 opCall( const(Node) obj ) const
- return full transform matrix with projection if it isn'tnull
@property mat4 matrix() const
- returntransform.matrix
if it isn'tnull
, identity otherwise@property const(Node) parent() const
- return_parent
public fields:
vec3 pos=vec3(0)
- point from which looksvec3 target=vec3(0)
- point where looksvec3 up=vec3(0,0,1)
- up direction
public methods:
@property mat4 matrix() const
- return lookAt transform matrix
protected fields:
Resolver resolver
public methods:
void setResolver( Resolver rsl )
abstract @property mat4 matrix() const
use Node
instead of vec3
public fields:
Node center
- as posNode target
Node up
public methods:
@property mat4 matrix() const
- return lookAt transform matrix
public fields:
float fov = 70
float ratio = 4.0f / 3.0f
float near = 1e-1
float far = 1e5
public methods:
@property mat4 matrix() const
- return perspective projection matrix
Camera with LookAtTransform
as transform
and PerspectiveTransform
as
projection
protected fields:
LookAtTransform look_tr
PerspectiveTransform perspective
public methods:
this( Node parent=null )
- create newLookAtTransform
andPerspectiveTransform
objects and sets totransform
andprojection
public propertyes (meaning same in LookAtTransform
and
PerspectiveTransform
):
void fov( float val )
float fov() const
void ratio( float val )
float ratio() const
void near( float val )
float near() const
void far( float val )
float far() const
void pos( in vec3 val )
vec3 pos() const
void up( in vec3 val )
vec3 up() const
void target( in vec3 val )
vec3 target() const
class SomeDrawObject : Node
{
protected mat4 mtr;
...
const @property
{
mat4 matrix() { return mtr; }
const(Node) parent() { return null; } // always no parent, world coord sys
}
}
auto cam = new SimpleCamera;
auto obj = new SomeDrawObject;
auto tr = cam(obj);
// and now you can
someAPI_setTransform( tr );
someAPI_drawObject( obj );