function Matrix4() {
}
Duktape.fin(Matrix4.prototype, function (x) {
	if (x === Matrix4.prototype) {
		return;
	}
	Polycode.Matrix4__delete(x.__ptr)
})

Matrix4.prototype.identity = function() {
	Polycode.Matrix4_identity(this.__ptr)
}

Matrix4.prototype.rotateVector = function(v2) {
	var retVal = new Vector3()
	retVal.__ptr = Polycode.Matrix4_rotateVector(this.__ptr, v2)
	return retVal
}

Matrix4.prototype.getPosition = function() {
	var retVal = new Vector3()
	retVal.__ptr = Polycode.Matrix4_getPosition(this.__ptr)
	return retVal
}

Matrix4.prototype.multiplyWithPerspective = function(v2) {
	var retVal = new Vector3()
	retVal.__ptr = Polycode.Matrix4_multiplyWithPerspective(this.__ptr, v2)
	return retVal
}

Matrix4.prototype.multVector3 = function(v2) {
	var retVal = new Vector3()
	retVal.__ptr = Polycode.Matrix4_multVector3(this.__ptr, v2)
	return retVal
}

Matrix4.prototype.multVector4 = function(v2) {
	var retVal = new Vector4()
	retVal.__ptr = Polycode.Matrix4_multVector4(this.__ptr, v2)
	return retVal
}

Matrix4.prototype.Translate = function(x,y,z) {
	Polycode.Matrix4_Translate(this.__ptr, x,y,z)
}

Matrix4.prototype.setPosition = function(x,y,z) {
	Polycode.Matrix4_setPosition(this.__ptr, x,y,z)
}

Matrix4.prototype.setScale = function(scale) {
	Polycode.Matrix4_setScale(this.__ptr, scale)
}

Matrix4.prototype.getEulerAngles = function(ax,ay,az) {
	Polycode.Matrix4_getEulerAngles(this.__ptr, ax,ay,az)
}

Matrix4.prototype.transpose = function() {
	var retVal = new Matrix4()
	retVal.__ptr = Polycode.Matrix4_transpose(this.__ptr)
	return retVal
}

Matrix4.prototype.Inverse = function() {
	var retVal = new Matrix4()
	retVal.__ptr = Polycode.Matrix4_Inverse(this.__ptr)
	return retVal
}

Matrix4.prototype.inverseAffine = function() {
	var retVal = new Matrix4()
	retVal.__ptr = Polycode.Matrix4_inverseAffine(this.__ptr)
	return retVal
}

Matrix4.prototype.determinant = function() {
	return Polycode.Matrix4_determinant(this.__ptr)
}

Matrix4.prototype.setOrthoProjection = function(left,right,bottom,top,zNear,zFar) {
	Polycode.Matrix4_setOrthoProjection(this.__ptr, left,right,bottom,top,zNear,zFar)
}

Matrix4.prototype.setProjectionFrustum = function(left,right,bottom,top,zNear,zFar) {
	Polycode.Matrix4_setProjectionFrustum(this.__ptr, left,right,bottom,top,zNear,zFar)
}

Matrix4.prototype.setProjection = function(fov,aspect,zNear,zFar) {
	Polycode.Matrix4_setProjection(this.__ptr, fov,aspect,zNear,zFar)
}
