invRm.m[0] - с + mc * u.x * u.x:

1nvRm.m[l] - mc * u.x * u.y - s * u.z:
1nvRm.m[2] - mc * u.x * u.z + s * u.y;
invRm.m[4] - mc * u.y * u.x + s * u.z:

invRm.m[5] - с + mc * u.y * u.y:

invRm.m[6] - mc * u.y * u.z - s * u.x;
invRm.m[8] - mc * u.z * u.x - s * u.y:
invRm.m[9] - mc * u.z * u.y + s * u.x;

invRm.m[10] - с + mc * u.z * u.z:

tos->affn->postMult(rm):
tos->invAffn->preMult(invRm);
}
void AffineStack :: scale(float sx. float sy. float sz) {
// post multiply top item by scaling

// умножаем справа верхний элемент на матрицу

// масштабирования

#define sEps 0.00001

Affine4 scl: // make an Identity // создаем единичную матрицу

Affine4 invScl;
scl.m[0] - sx:
scl.m[5] - sy;

scl.m[10] - sz; // adjust it to a scaling matrix // приспосабливаем к матрице масштабирования

if(fabs(sx) < sEps || fabs(sy) < sEps || fabs(sz) < sEps)
{

cerr « "degenerate scaling transformation!\n": // вырожденное преобразование масштабирования! }

Приложение В. Некоторые полезные классы и служебные подпрограммы

invSc1.m[0] - 1/sx: 1nvSc1.mr.53 - 1/sy: invScI .m[10] - 1/sz; tos->affn->postMult(scl): // tos->1nvAffn->preMult(invScl);
}
void AffineStack :: translate(Vector3 d) {

Affine4 tr: // make identity matrix // создаем единичную матрицу

Affine4 invTr:
tr.m[12] - d.x: tr.m[13] - d.y: tr.m[14] - d.z: 1nvTr.m[l2] - -d.x: invTr.m[13] - -d.y: invTr.m[14] - -d.z; tos->affn->postMult(tr): tos->1nvAffn->preMul1(i nvTr):
}
// Material methods

// методы Material

void Material :: setDefault(){
textureType - 0; // for none

// для отсутствия материала numParams - 0:

reflectivity - transparency - 0.0: speedOfLight - specularExponent - 1.0: specularFractlon - 0.0: surfaceRoughness - 1.0: ambient.set(0.If.O.lf.0.If): diffuse.set(0.8f.0.8f.0.8f): specular.set(0.0.0): emisslve.set(O.O.O):
}
void Material :: set(Material& m) {
textureType - m.textureType: numParams - m.numParams:
for(int 1 - 0: i < numParams: i++) params[i] - m.params[i]: transparency - m.transparency:
speedOfLight - m.speedOfLight: reflectivity - m.reflectivity: specularExponent - m.specularExponent: specularFraction - m.specularFractlon; surfaceRoughness - m.surfaceRoughness: ambient.set(m.ambient): di ffuse.set(m.diffuse): specular.set(m.specular): emissive.set(m.emissive):

⇐ Предыдущая| |Следующая ⇒