//3次元回転描画 void DrawImpl::rot3D(const Vector2& pos, const Vector2& exRate, float zRot, float xRot, float yRot, int gHandle, int turnFlag){ MATRIX m; int w, h; GetGraphSize(gHandle, &w, &h); w = (int)(w*exRate.x); h = (int)(h*exRate.y); if (turnFlag == TRUE) w *= -1; VECTOR v[4] = { VGet(-(float)w / 2, -(float)h / 2, 0), VGet((float)w / 2, -(float)h / 2, 0) , VGet(-(float)w / 2, (float)h / 2, 0), VGet((float)w / 2, (float)h / 2, 0) }; m = MGetRotZ(zRot); for (int i = 0; i < 4; i++) v[i] = VTransform(v[i], m); if (xRot != 0.0f) { m = MGetRotX(xRot); for (int i = 0; i < 4; i++) v[i] = VTransform(v[i], m); } if (yRot != 0.0f) { m = MGetRotY(yRot); for (int i = 0; i < 4; i++) v[i] = VTransform(v[i], m); } DrawModiGraphF(pos.x + v[0].x, pos.y + v[0].y, pos.x + v[1].x, pos.y + v[1].y, pos.x + v[3].x, pos.y + v[3].y, pos.x + v[2].x, pos.y + v[2].y, gHandle, TRUE); }
void MODEL :: display(){ /*DrawCapsule3D( VGet(x+600*sinf(rotateY), y+y0+200.0f-500*sinf(rotateX), z+600*cosf(rotateY)), VGet(x-200*sinf(rotateY), y+y0+200.0f+500*sinf(rotateX), z-200*cosf(rotateY)), 210.0f, 2, GetColor(255,255,255), GetColor(255,255,255), FALSE);*/ playTime += 200.0f; if(playTime >= animTime) playTime = 0.0f; mS->move(); mS->display(); MV1RefreshCollInfo(ModelHandle, 39); MATRIX rot = MMult(MMult(MGetRotX(rotateX), MGetRotZ(rotateZ)),MGetRotY(rotateY)); MATRIX trans = MGetTranslate(VGet(x+x0, y+y0, z+z0)); MV1SetMatrix(ModelHandle, MMult(rot, trans)); MV1SetAttachAnimTime(ModelHandle, attachIndex, playTime); MV1DrawModel(ModelHandle); }