/// <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)); }
/// <summary> /// Vrátí objekt typu <see cref="Body3D"/>. Tvar odpovídající dvourozměrné reprezentaci pro fyzikální simulaci /// je nalezen podle ortogonální projekce zadaného trojrozměrného modelu. /// </summary> /// <param name="model">Trojrozměrný model.</param> /// <param name="world2D">Dvourozměrný svět, do kterého má být těleso zařazeno.</param> /// <param name="graphicsDevice">Grafické zařízení.</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="orthographicModelSize">Velikost modelu pro renderování. Pokud tento parametr není zadán, /// vypočítá se.</param> /// <param name="triangulationAlgorithm">Algoritmus pro rozdělení tvaru na množství menších konvexních /// polygonů.</param> /// <param name="basicEffectParams">Parametry pro třídu <see cref="BasicEffect"/>.</param> /// <returns>Objekt typu <see cref="Body3D"/>.</returns> public static Body3D CreateBody3D( Model model, World world2D, GraphicsDevice graphicsDevice, Vector2 position = new Vector2(), BodyType bodyType = BodyCreator.DEFAULT_BODY_TYPE, Vector2 orthographicModelSize = new Vector2(), TriangulationAlgorithm triangulationAlgorithm = BodyCreator.DEFAULT_TRIANGULATION_ALGORITHM, BasicEffectParams basicEffectParams = null) { using (Texture2D orthoRender = BitmapRenderer.RenderOrthographic(graphicsDevice, model, BitmapRenderer.DEFAULT_BITMAP_SCALE, orthographicModelSize)) { Body body2D = BodyCreator.CreatePolygonBody(orthoRender, world2D, position, bodyType, 1f, 0f, 1f, triangulationAlgorithm); Body3D body3D = new Body3D(model, body2D) { BasicEffectParams = basicEffectParams }; return(body3D); } }