A Mathematica „POV” exportálási formátuma figyelmen kívül hagyja a ColorFunction funkciót

Mathematicas Povexport Format Ignores Colorfunction



Megoldás:

Hozzád hasonlóan én sem találtam színeket a kimeneti *.pov fájlban. A Mathematica felismeri a pov kiterjesztést, deAz exportálás ['povtest.pov', pplot3D] az összes fehér színű háromszög objektumot adja ki:pigment {szín rgb}.

A brute-force megközelítést alkalmaztam, és felbontottam a 3D-s ábrát csúcsokra, háromszögekre és színekre.

Határozza meg a 3D -s ábrát.



pplot3D = ParametricPlot3D [{Cos [p] Sin [t], Sin [p] Sin [t], Cos [t]}, {p, 0, 2  [Pi]}, {t, 0,  [Pi] }, PlotPoints-> 150, Mesh-> Nincs, ColorFunction-> Funkció [{x, y, z, p, t}, Színárnyalat [Sin [6 p] Sin [6 t]]], ColorFunctionScaling-> False];

Keresse meg a csúcsok, háromszögek és csúcsok színeit.



csúcsok = pplot3D [[1, 1]]; háromszögek = pplot3D [[1, 2, 1, 1, 2, 1, 1, 1]]; color = Chop [Térkép [ColorConvert [#, 'RGB'] &, pplot3D [[1, 3, 2]]]];

Határozzon meg egy segédfunkciót, amely valós számok hármasából karakterláncot képez, elkerülve a kitevőket. A három összetevő ({x, y, z}) sorrendje úgy változik, hogy megfeleljen az {x, z, y} POVRay -konvenciójának.

AccString [x_List]: = StringDrop [StringJoin [Térkép [ToString [AccountingForm [#, NumberSigns-> {'-', ''}]] ',' &, x [[{1,3,2}]]]] , -1]

Funkció definiálása POVRay háromszög objektumok írásához.

POVtriangle [ind_List]: = StringJoin [{'háromszög {,, pigment {color rgb}}'}]

Exportálja a háromszögeket POVRay include fájlba.



Exportálás ['povtest.inc', Térkép [POVtriangle, triangles], 'Lines']

Hozza létre a povtest.pov fájlt a kamerával és a fényekkel, és tartalmazza a povtest.inc fájlt.

kamera {helyszög 3 felfelé y * kép_magassága jobbra x * képszélesség look_at} light_source {szín rgb 2 * árnyék nélküli} light_source {szín rgb 2 * árnyék nélküli} #include 'povtest.inc'

A csúcs normáljai megtalálhatókpplot3D [[1,4,2]], és használható POVRay sima háromszögek kialakítására. Más lehetőségek megtalálhatók applot3D [[2]]. ide írja be a kép leírását


A GraphicsComplex konvertálása mesh2 -re

A 3D -s nyomtatás színének és simaságának megőrzése érdekében vehetjük a GraphicsComplex objektumot a Mathematica -ban, majd a POVRay -ben mesh2 objektummá alakíthatjuk. Mivel ez a két objektum nagyon hasonló szerkezetű, az átalakítás meglehetősen egyszerű.

A mesh2 objektum használatának előnye, hogy interpolálja a csúcsból és a normálvektorból származó adatokat (és színeket), és sima színű felületet eredményez.

A Mathematica 3D -s grafikája általában aGraphicsComplex objektum. És aA GraphicsComplex objektum szerkezete a következő:

GraphicsComplex [csúcs, sokszögek, VertexColors-> vertexColors, VertexNormals-> vertexNormals]

Ez a szerkezet valójában nagyon hasonlít a POVRay mesh2 objektumához. Egy tipikus mesh2 objektum a POVRay -ben a következő szerkezetű:

mesh2 {vertex_vectors {...} normal_vectors {...} face_indices {...}}

A GraphicsComplex -ről mesh2 -re való átalakítás néhány karakterlánc -manipulációval egyszerűen elvégezhető.

Néhány példa

Íme néhány példa a POVRay renderelt 3D grafikájára színesben

p1 = ParametricPlot3D [{Cos [p] Sin [t], Sin [p] Sin [t], Cos [t]}, {p, 0, 2 π}, {t, 0, π}, PlotPoints -> 150 , Mesh -> Nincs, ColorFunction -> Funkció [{x, y, z, p, t}, Színárnyalat [Sin [6 p] Sin [6 t]]], ColorFunctionScaling -> False, ImageSize -> 300]; p2 = SphericalPlot3D [[email protected] @SphericalHarmonicY [5, 2, θ, ϕ], {θ, 0, π}, ϕ ϕ, 0, 2 π}, Mesh -> Nincs, ColorFunction -> Funkció [{x, y, z, θ, ϕ, r}, Értékelés [[email protected] [[email protected] [5, 2, θ, ϕ], {-π, π}]], ColorFunctionScaling -> False, PlotPoints -> 50 , Képméret -> 300]; p3 = SphericalPlot3D [1 + Sin [5 ϕ] Sin [10 θ] / 10, {θ, 0, π}, {ϕ, 0, 2 π}, ColorFunction -> (ColorData ['GreenPinkTones'] [# 6] &), Háló -> nincs, PlotPoints -> 50, dobozos -> hamis, tengelyek -> hamis, ImageSize -> 300];

exportálás és renderelés POVRay -ben

Transzponálás [{#, Show [POVRayRender [#, ImageSize -> {400, 300}], ImageSize -> 300]} & /@ {p1, p2, p3}] // Rács

A csomag

AzA POVRayRender függvény aPOVRayRender csomag, amely letölthető a github repóból.