void BlendVertexNew(D3DVECTOR* result,D3DVECTOR* normal,CharVertex* vec0, D3DMATRIX* mat0, D3DMATRIX* mat1) { D3DVECTOR locVec0, locVec1 ; D3DMATRIX norMat0 = *mat0,norMat1 = *mat1 ; MulVecMat(&locVec0,&vec0->vertex,mat0) ; MulVecMat(&locVec1,&vec0->vertex,mat1) ; // blend vertex result->x = (vec0->fWeight * locVec0.x) + ((1.0f-vec0->fWeight)*(locVec1.x)) ; result->y = (vec0->fWeight * locVec0.y) + ((1.0f-vec0->fWeight)*(locVec1.y)) ; result->z = (vec0->fWeight * locVec0.z) + ((1.0f-vec0->fWeight)*(locVec1.z)) ; MAKETRANSMAT(norMat0,0,0,0) ; // zero translations MAKETRANSMAT(norMat1,0,0,0) ; // zero translations MulVecMat(&locVec0,&vec0->normal,&norMat0) ; MulVecMat(&locVec1,&vec0->normal,&norMat1) ; // blend normals normal->x = (vec0->fWeight * locVec0.x) + ((1.0f-vec0->fWeight)*(locVec1.x)) ; normal->y = (vec0->fWeight * locVec0.y) + ((1.0f-vec0->fWeight)*(locVec1.y)) ; normal->z = (vec0->fWeight * locVec0.z) + ((1.0f-vec0->fWeight)*(locVec1.z)) ; } void DisplayCharacterVB(Character* const chr, D3DMATRIX ZeeMatrix[NUM_BONES]) { register unsigned int l ; UNLITTXCLRVERTEX* dst = g_unlitVer ; CharVertex* chrVertex = chr->cmd->vlist ; for( l = 0 ; l < chr->cmd->dwVertices ; l++ ) { BlendVertexNew( (D3DVECTOR*)&dst->x, (D3DVECTOR*)&dst->nx, chrVertex, &ZeeMatrix[chrVertex->id0], &ZeeMatrix[chrVertex->id1]) ; dst->clr = CLR_WHITE ; dst->tu = chrVertex->tu ; dst->tv = chrVertex->tv ; dst++ ; chrVertex++ ; } }