Cc3dMatrix4 Cc3dMatrix4::operator*(const Cc3dMatrix4&mat)const{ const float *a=this->getArray(); const float *b=mat.getArray(); float r[16];//result r[0]=b[0]*a[0]+b[1]*a[4]+b[2]*a[8]+b[3]*a[12]; r[1]=b[0]*a[1]+b[1]*a[5]+b[2]*a[9]+b[3]*a[13]; r[2]=b[0]*a[2]+b[1]*a[6]+b[2]*a[10]+b[3]*a[14]; r[3]=b[0]*a[3]+b[1]*a[7]+b[2]*a[11]+b[3]*a[15]; r[4]=b[4]*a[0]+b[5]*a[4]+b[6]*a[8]+b[7]*a[12]; r[5]=b[4]*a[1]+b[5]*a[5]+b[6]*a[9]+b[7]*a[13]; r[6]=b[4]*a[2]+b[5]*a[6]+b[6]*a[10]+b[7]*a[14]; r[7]=b[4]*a[3]+b[5]*a[7]+b[6]*a[11]+b[7]*a[15]; r[8]=b[8]*a[0]+b[9]*a[4]+b[10]*a[8]+b[11]*a[12]; r[9]=b[8]*a[1]+b[9]*a[5]+b[10]*a[9]+b[11]*a[13]; r[10]=b[8]*a[2]+b[9]*a[6]+b[10]*a[10]+b[11]*a[14]; r[11]=b[8]*a[3]+b[9]*a[7]+b[10]*a[11]+b[11]*a[15]; r[12]=b[12]*a[0]+b[13]*a[4]+b[14]*a[8]+b[15]*a[12]; r[13]=b[12]*a[1]+b[13]*a[5]+b[14]*a[9]+b[15]*a[13]; r[14]=b[12]*a[2]+b[13]*a[6]+b[14]*a[10]+b[15]*a[14]; r[15]=b[12]*a[3]+b[13]*a[7]+b[14]*a[11]+b[15]*a[15]; return Cc3dMatrix4(r); }
Cc3dMatrix4 Cc3dMatrix4::operator+(const Cc3dMatrix4&mat)const{ const float *a=this->getArray(); const float *b=mat.getArray(); float r[16];//result for(int i=0;i<16;i++){ r[i]=a[i]+b[i]; } return Cc3dMatrix4(r); }
Cc3dMatrix4 transpose(const Cc3dMatrix4&mat){ const float* m=mat.getArray(); float rs[16]={ m[0],m[4],m[8],m[12],//col 1 m[1],m[5],m[9],m[13],//col 2 m[2],m[6],m[10],m[14],//col 3 m[3],m[7],m[11],m[15]//col 4 }; return Cc3dMatrix4(rs); }
void Cc3dSubMesh::drawC3D(Renderer *renderer, const Cc3dMatrix4& modelMat){ _customCommand.init(_globalZOrder); _customCommand.func = CC_CALLBACK_0(Cc3dSubMesh::onDraw,this, Mat4(modelMat.getArray()), 0); renderer->addCommand(&_customCommand); }