本文整理汇总了C++中Mat4::getInversed方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat4::getInversed方法的具体用法?C++ Mat4::getInversed怎么用?C++ Mat4::getInversed使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mat4
的用法示例。
在下文中一共展示了Mat4::getInversed方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getDepthInView
float Camera::getDepthInView(const Mat4& transform) const
{
Mat4 camWorldMat = getNodeToWorldTransform();
const Mat4 &viewMat = camWorldMat.getInversed();
float depth = -(viewMat.m[2] * transform.m[12] + viewMat.m[6] * transform.m[13] + viewMat.m[10] * transform.m[14] + viewMat.m[14]);
return depth;
}
示例2: beforeSimulation
void PhysicsBody::beforeSimulation(const Mat4& parentToWorldTransform, const Mat4& nodeToWorldTransform, float scaleX, float scaleY, float rotation)
{
if (_recordScaleX != scaleX || _recordScaleY != scaleY)
{
_recordScaleX = scaleX;
_recordScaleY = scaleY;
setScale(scaleX, scaleY);
}
// set rotation
if (_recordedRotation != rotation)
{
setRotation(rotation);
}
// set position
auto worldPosition = _ownerCenterOffset;
nodeToWorldTransform.transformVector(worldPosition.x, worldPosition.y, worldPosition.z, 1.f, &worldPosition);
setPosition(worldPosition.x, worldPosition.y);
_recordPosX = worldPosition.x;
_recordPosY = worldPosition.y;
if (_owner->getAnchorPoint() != Vec2::ANCHOR_MIDDLE)
{
parentToWorldTransform.getInversed().transformVector(worldPosition.x, worldPosition.y, worldPosition.z, 1.f, &worldPosition);
_offset.x = worldPosition.x - _owner->getPositionX();
_offset.y = worldPosition.y - _owner->getPositionY();
}
}
示例3: intersects
bool Ray::intersects(const OBB& obb) const
{
AABB aabb;
aabb._min = - obb._extents;
aabb._max = obb._extents;
Ray ray;
ray._direction = _direction;
ray._origin = _origin;
Mat4 mat = Mat4::IDENTITY;
mat.m[0] = obb._xAxis.x;
mat.m[1] = obb._xAxis.y;
mat.m[2] = obb._xAxis.z;
mat.m[4] = obb._yAxis.x;
mat.m[5] = obb._yAxis.y;
mat.m[6] = obb._yAxis.z;
mat.m[8] = obb._zAxis.x;
mat.m[9] = obb._zAxis.y;
mat.m[10] = obb._zAxis.z;
mat.m[12] = obb._center.x;
mat.m[13] = obb._center.y;
mat.m[14] = obb._center.z;
mat = mat.getInversed();
ray.transform(mat);
return ray.intersects(aabb);
}
示例4: sqrtf
void Physics3DComponent::syncPhysicsToNode()
{
if (_physics3DObj->getObjType() == Physics3DObject::PhysicsObjType::RIGID_BODY
|| _physics3DObj->getObjType() == Physics3DObject::PhysicsObjType::COLLIDER)
{
Mat4 parentMat;
if (_owner->getParent())
parentMat = _owner->getParent()->getNodeToWorldTransform();
auto mat = parentMat.getInversed() * _physics3DObj->getWorldTransform();
//remove scale, no scale support for physics
float oneOverLen = 1.f / sqrtf(mat.m[0] * mat.m[0] + mat.m[1] * mat.m[1] + mat.m[2] * mat.m[2]);
mat.m[0] *= oneOverLen;
mat.m[1] *= oneOverLen;
mat.m[2] *= oneOverLen;
oneOverLen = 1.f / sqrtf(mat.m[4] * mat.m[4] + mat.m[5] * mat.m[5] + mat.m[6] * mat.m[6]);
mat.m[4] *= oneOverLen;
mat.m[5] *= oneOverLen;
mat.m[6] *= oneOverLen;
oneOverLen = 1.f / sqrtf(mat.m[8] * mat.m[8] + mat.m[9] * mat.m[9] + mat.m[10] * mat.m[10]);
mat.m[8] *= oneOverLen;
mat.m[9] *= oneOverLen;
mat.m[10] *= oneOverLen;
mat *= _transformInPhysics;
static Vec3 scale, translation;
static Quaternion quat;
mat.decompose(&scale, &quat, &translation);
_owner->setPosition3D(translation);
quat.normalize();
_owner->setRotationQuat(quat);
}
}
示例5: afterSimulation
void PhysicsBody::afterSimulation(const Mat4& parentToWorldTransform, float parentRotation)
{
// set Node position
auto tmp = getPosition();
Vec3 positionInParent(tmp.x, tmp.y, 0.f);
if (_recordPosX != positionInParent.x || _recordPosY != positionInParent.y)
{
parentToWorldTransform.getInversed().transformVector(positionInParent.x, positionInParent.y, positionInParent.z, 1.f, &positionInParent);
_owner->setPosition(positionInParent.x - _offset.x, positionInParent.y - _offset.y);
}
// set Node rotation
_owner->setRotation(getRotation() - parentRotation);
}
示例6: convertToGL
Vec2 Director::convertToGL(const Vec2& uiPoint)
{
Mat4 transform;
GLToClipTransform(&transform);
Mat4 transformInv = transform.getInversed();
// Calculate z=0 using -> transform*[0, 0, 0, 1]/w
float zClip = transform.m[14] / transform.m[15];
Size glSize = _openGLView->getDesignResolutionSize();
Vec4 clipCoord(2.0f*uiPoint.x / glSize.width - 1.0f, 1.0f - 2.0f*uiPoint.y / glSize.height, zClip, 1);
Vec4 glCoord;
//transformInv.transformPoint(clipCoord, &glCoord);
transformInv.transformVector(clipCoord, &glCoord);
float factor = 1.0 / glCoord.w;
return Vec2(glCoord.x * factor, glCoord.y * factor);
}
示例7: screen
void Sprite3DWithOBBPerfromanceTest::unproject(const Mat4& viewProjection, const Size* viewport, Vec3* src, Vec3* dst)
{
assert(dst);
assert(viewport->width != 0.0f && viewport->height != 0.0f);
Vec4 screen(src->x / viewport->width, ((viewport->height - src->y)) / viewport->height, src->z, 1.0f);
screen.x = screen.x * 2.0f - 1.0f;
screen.y = screen.y * 2.0f - 1.0f;
screen.z = screen.z * 2.0f - 1.0f;
viewProjection.getInversed().transformVector(screen, &screen);
if (screen.w != 0.0f)
{
screen.x /= screen.w;
screen.y /= screen.w;
screen.z /= screen.w;
}
dst->set(screen.x, screen.y, screen.z);
}