public Light Transform(Matrix44 mat) { Light ret = new Light(this); if (position != null) { ret.position = position.MultMat(mat); } if (direction != null) { ret.direction = direction.MultMat(mat.DtMat()); } return(ret); }
public void UpdateDispParam(SimulatorInterface simif, double dt) { Matrix44 mtemp = new Matrix44(); Matrix44 mat_aft = new Matrix44(); BoundingBox bbx = locus.locusBBox; double v = bbx.DiagonalSize() / moveingTime; double w = 6.283185307179586D / rotationTime; double acc = 1.0D; if (simif.ctrl_sw == 1) { acc = 0.1D; } if (simif.locus_action_sw[0] == 1) { mtemp.SetRzMat(-w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[1] == 1) { mtemp.SetRzMat(w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[2] == 1) { mtemp.SetRxMat(w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[3] == 1) { mtemp.SetRxMat(-w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[4] == 1) { mtemp.SetRyMat(w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[5] == 1) { mtemp.SetRyMat(-w * dt * acc); rmat = rmat.MultMat(mtemp); } if (simif.locus_action_sw[6] == 1) { dist -= v * dt * 3.0D * acc; mtemp.SetTMat(0.0D, 0.0D, -v * dt * 3.0D * acc); tmat = tmat.MultMat(mtemp); } if (simif.locus_action_sw[7] == 1) { dist += v * dt * 3.0D * acc; mtemp.SetTMat(0.0D, 0.0D, v * dt * 3.0D * acc); tmat = tmat.MultMat(mtemp); } if (simif.locus_action_sw[10] == 1) { mtemp.SetTMat(v * dt * acc, 0.0D, 0.0D); tmat = tmat.MultMat(mtemp); } if (simif.locus_action_sw[11] == 1) { mtemp.SetTMat(-v * dt * acc, 0.0D, 0.0D); tmat = tmat.MultMat(mtemp); } if (simif.locus_action_sw[8] == 1) { mtemp.SetTMat(0.0D, v * dt * acc, 0.0D); tmat = tmat.MultMat(mtemp); } if (simif.locus_action_sw[9] == 1) { mtemp.SetTMat(0.0D, -v * dt * acc, 0.0D); tmat = tmat.MultMat(mtemp); } if (simif.param_reset_sw == 1) { InitDispParam(); simif.locusImageMake = 1; simif.param_reset_sw = 0; } int flag_move_data = 0; if (simif.data_foword_sw == 1) { flag_move_data = 1; if (simif.ctrl_sw == 1) { currentDataIndex += fastMoveStep; } else { currentDataIndex += 1; } if (currentDataIndex >= recorder.N_record()) { currentDataIndex = (recorder.N_record() - 1); } } if (simif.data_back_sw == 1) { flag_move_data = 1; if (simif.ctrl_sw == 1) { currentDataIndex -= fastMoveStep; } else { currentDataIndex -= 1; } if (currentDataIndex < 0) { currentDataIndex = 0; } } if (flag_move_data == 1) { RecordData data = recorder.GetData(currentDataIndex); mtemp.SetMat(mat_bef); mat_bef.SetTMat(-data.wpos.x, -data.wpos.y, -data.wpos.z); mat_aft = mat_bef.InvMat().MultMat(mtemp).MultMat(rmat).MultMat(tmat); rmat = mat_aft.DtMat(); tmat.SetTMat(mat_aft.element[3, 0], mat_aft.element[3, 1], mat_aft.element[3, 2]); } }