/// <summary> /// Vytvoří objekt typu <see cref="Body3D"/> na základě zadaných parametrů. Byl-li již zadaný model /// zpracováván, nedochází opětovně k výpočetně náročnému hledání dvojrozměrného tvaru. /// </summary> /// <param name="model">Trojrozměrný model.</param> /// <param name="position">Výchozí pozice objektu ve dvojrozměrném světě.</param> /// <param name="bodyType">Typ simulovaného tělesa (statické, kinematické nebo dynamické).</param> /// <param name="basicEffectParams">>Parametry pro třídu <see cref="BasicEffect"/>.</param> /// <param name="positionZ">Výchozí pozice na ose Z ve trojrozměrném světě.</param> /// <returns></returns> public Body3D CreateBody3D( Model model, Vector2 position = new Vector2(), BodyType bodyType = BodyCreator.DEFAULT_BODY_TYPE, BasicEffectParams basicEffectParams = null, float positionZ = 0f) { //Tento model ještě nebyl instancí této třídy zpracováván if (!_modelVerticesPairs.ContainsKey(model)) { using (Texture2D orthoRender = BitmapRenderer.RenderOrthographic(_graphicsDevice, model)) { //Najít v bitmapě tvar je výpočetně náročné, proto se to stane pro každý model zpracovávaný touto //třídou jenom jednou List <Vertices> verticesList = BodyCreator.CreateVerticesForBody( orthoRender, ReduceVerticesDistance, TriangulationAlgorithm, GraphicsToSimulationRatio); _modelVerticesPairs.Add(model, verticesList); } } return(ConstructBody3D(model, _world2D, position, bodyType, positionZ, basicEffectParams)); }
private Body3D ConstructBody3D( Model model, World world2D, Vector2 position, BodyType bodyType, float positionZ, BasicEffectParams basicEffectParams) { Body body = BodyCreator.CreateBodyFromVertices( _modelVerticesPairs[model], world2D, position, bodyType, Density, Rotation); Body3D body3D = new Body3D(model, body, positionZ) { BasicEffectParams = basicEffectParams }; return(body3D); }