/* Unit heightmap render function. * ARGUMENTS: * - Self pointer: * rk2UNIT *Unit; * - Animation context pointer: * rk2ANIM *Ani; * RETURNS: None. */ static VOID UnitAreaRender( rk2UNIT_AREA *Unit, rk2ANIM *Ani ) { UINT loc; INT x, z; Ani->RndMatrWorld = MatrDefault(); RK2_RndBuildMatrix(); glUseProgram(Ani->ShaderDef); for (x = -20; x < 20; x++) for (z = -20; z < 20; z++) { Ani->RndMatrWorld = MatrTranslate(MatrDefault(), x * 30, Ani->WaterLevel, z * 30); RK2_RndBuildMatrix(); RK2_RndShadSendGlobInfo(Ani->ShaderDef, Ani); RK2_GObjDraw(Ani->ShaderDef, Ani, &Unit->GObj); } } /* End of 'UnitAreaRender' function */
/* Camera rotation by camera-axes-dir function. * ARGUMENTS: * - Angle: * DBL Angle; * RETURNS: None. */ VOID RK2_RndCameraRotateDir( rk2CAMERA *Cam, DBL Angle ) { rk2MATR4x4 RotMat; Cam->Dir = VecSubVec(Cam->At, Cam->Loc); Cam->Right = VecCrossVec(VecNormalize(Cam->Dir), Cam->Up); RK2_RndCameraNormalize(Cam); RotMat = RK2_RndCameraGetMatrix(Cam); RotMat = MatrMultMatr(MatrRotateX(MatrDefault(), Angle), RotMat); RK2_RndCameraSet(Cam, Cam->Loc, /* Location */ VecSumVec(Cam->Loc, VecSet(RotMat.A[0][0], RotMat.A[0][1], RotMat.A[0][2])), /* At */ Cam->Up); /* Up */ } /* End of 'RK2_RndCameraRotateDir' funciton */