本文整理汇总了C++中Mat4::decompose方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat4::decompose方法的具体用法?C++ Mat4::decompose怎么用?C++ Mat4::decompose使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mat4
的用法示例。
在下文中一共展示了Mat4::decompose方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: transform
void OBB::transform(const Mat4& mat)
{
Vec4 newcenter = mat * Vec4(_center.x, _center.y, _center.z, 1.0f);// center;
_center.x = newcenter.x;
_center.y = newcenter.y;
_center.z = newcenter.z;
_xAxis = mat * _xAxis;
_yAxis = mat * _yAxis;
_zAxis = mat * _zAxis;
_xAxis.normalize();
_yAxis.normalize();
_zAxis.normalize();
Vec3 scale, trans;
Quaternion quat;
mat.decompose(&scale, &quat, &trans);
_extents.x *= scale.x;
_extents.y *= scale.y;
_extents.z *= scale.z;
computeExtAxis();
}
示例2: CCLOG
void PUParticle3DModelRender::render( Renderer* renderer, const Mat4 &transform, ParticleSystem3D* particleSystem )
{
if (!_isVisible)
return;
if (_spriteList.empty()) {
for (unsigned int i = 0; i < particleSystem->getParticleQuota(); ++i) {
Sprite3D *sprite = Sprite3D::create(_modelFile);
if (sprite == nullptr)
{
CCLOG("failed to load file %s", _modelFile.c_str());
continue;
}
sprite->setTexture(_texFile);
sprite->setBlendFunc(particleSystem->getBlendFunc());
sprite->setCullFaceEnabled(false);
sprite->retain();
_spriteList.push_back(sprite);
}
if (!_spriteList.empty()) {
const AABB &aabb = _spriteList[0]->getAABB();
Vec3 corners[8];
aabb.getCorners(corners);
_spriteSize = corners[3] - corners[6];
} else {
_isVisible = false;
return;
}
}
const ParticlePool& particlePool = particleSystem->getParticlePool();
ParticlePool::PoolList activeParticleList = particlePool.getActiveDataList();
Mat4 mat;
Mat4 rotMat;
Mat4 sclMat;
Quaternion q;
transform.decompose(nullptr, &q, nullptr);
unsigned int index = 0;
for (auto iter : activeParticleList)
{
auto particle = static_cast<PUParticle3D *>(iter);
Mat4::createRotation(q * particle->orientation, &rotMat);
sclMat.m[0] = particle->width / _spriteSize.x;
sclMat.m[5] = particle->height / _spriteSize.y;
sclMat.m[10] = particle->depth / _spriteSize.z;
mat = rotMat * sclMat;
mat.m[12] = particle->position.x;
mat.m[13] = particle->position.y;
mat.m[14] = particle->position.z;
if (_spriteList[index]->getCameraMask() != particleSystem->getCameraMask())
_spriteList[index]->setCameraMask(particleSystem->getCameraMask());
_spriteList[index]->setColor(Color3B(particle->color.x * 255, particle->color.y * 255, particle->color.z * 255));
_spriteList[index]->setOpacity(particle->color.w * 255);
_spriteList[index]->visit(renderer, mat, Node::FLAGS_DIRTY_MASK);
++index;
}
}
示例3: getNodeToWorldTransform
cocos2d::Vec3 PUParticleSystem3D::getDerivedScale()
{
//if (_parentParticleSystem && _parentParticleSystem->isKeepLocal()) return Vec3::ONE;
//if (_keepLocal) return Vec3::ONE;
if (_isMarkedForEmission){
return Vec3(_scaleX, _scaleY, _scaleZ);
}else{
Vec3 s;
Mat4 mat = getNodeToWorldTransform();
mat.decompose(&s, nullptr, nullptr);
return s;
}
}
示例4: getRotationQuat
cocos2d::Quaternion PUParticleSystem3D::getDerivedOrientation()
{
//if (_parentParticleSystem && _parentParticleSystem->isKeepLocal()) return Quaternion();
//if (_keepLocal) return Quaternion();
if (_isMarkedForEmission){
return getRotationQuat();
}else{
Quaternion q;
Mat4 mat = getNodeToWorldTransform();
mat.decompose(nullptr, &q, nullptr);
return q;
}
}
示例5: update
void OVRRenderer::update(float delta)
{
if (!_instance) return;
const dpnHmdParms headModelParms = dpnutilDefaultHmdParms();
//dpnnSensorData tracking;
//dpnnGetSensorData(OVRHelper::dpInstance, &tracking);
//CCLOG("dpnnSensorData: (%f, %f, %f), (%f, %f, %f), (%f, %f, %f)", tracking.angular_velocity.x, tracking.angular_velocity.y, tracking.angular_velocity.z
// , tracking.linear_acceleration.x, tracking.linear_acceleration.y, tracking.linear_acceleration.z
// , tracking.magnetometer.x, tracking.magnetometer.y, tracking.magnetometer.z);
//const dpnMatrix4 centerEyeViewMatrix = dpnutilGetCenterEyeViewMatrix(&headModelParms, tracking, NULL);
const dpnnQuarterion pose = dpnnGetPose(_instance);
const dpnnVector3 position = dpnnGetPosition(_instance);
for (int eye = 0; eye < EYE_NUM; eye++) {
//const dpnMatrix4 eyeViewMatrix = dpnutilGetEyeViewMatrix(&headModelParms, ¢erEyeViewMatrix, eye);
//Mat4 viewMat;
//viewMat.set((const GLfloat *)(dpnutilMatrix4_Transpose(&eyeViewMatrix).M[0]));
//viewMat.inverse();
float eyeOffset = (eye ? -0.5f : 0.5f) * headModelParms.ipd;
Mat4 posMat, rotMat, offsetMat;
Mat4::createRotation(Quaternion(pose.i, pose.j, pose.k, pose.s), &rotMat);
Mat4::createTranslation(Vec3(position.x, position.y, position.z), &posMat);
Mat4::createTranslation(Vec3(eyeOffset, 0.0f, 0.0f), &offsetMat);
Mat4 viewMat = offsetMat * posMat * rotMat;
Quaternion quat;
Vec3 pos;
viewMat.decompose(nullptr, &quat, &pos);
quat = _offsetRot * quat;
Vec3 up = quat * Vec3::UNIT_Y;
Vec3 forword = quat * -Vec3::UNIT_Z;
Vec3 shiftedEyePos = _offsetPos + _offsetRot * pos;
_eyeCamera[eye]->setPosition3D(shiftedEyePos);
_eyeCamera[eye]->lookAt(shiftedEyePos + forword, up);
CCLOG("OVRRenderer::camera[%d]-ROT(%f, %f, %f, %f) -POS(%f, %f, %f)", eye, quat.w, quat.x, quat.y, quat.z, pos.x, pos.y, pos.z);
}
CCLOG("OVRRenderer::update");
}