Mathematicaの「POV」エクスポートフォーマットはColorFunctionを無視します
Mathematicas Povexport Format Ignores Colorfunction
解決:
あなたと同じように、出力* .povファイルに色が見つかりませんでした。 Mathematicaはpov拡張子を認識しますがExport ['povtest.pov'、pplot3D]は、すべての三角形オブジェクトを白色で出力します。
顔料{カラーrgb}。
私は力ずくのアプローチを取り、3Dプロットを頂点、三角形、色に分解しました。
3Dプロットを定義します。
pplot3D = ParametricPlot3D [{Cos [p] Sin [t]、Sin [p] Sin [t]、Cos [t]}、{p、0、2 [Pi]}、{t、0、 [Pi] }、PlotPoints-> 150、Mesh-> None、ColorFunction-> Function [{x、y、z、p、t}、Hue [Sin [6 p] Sin [6 t]]]、ColorFunctionScaling-> False];頂点、三角形、および頂点の色を見つけます。
頂点= pplot3D [[1、1]];三角形= pplot3D [[1、2、1、1、2、1、1、1]];色= Chop [Map [ColorConvert [#、 'RGB']&、pplot3D [[1、3、2]]]];指数を避けて、実数のトリプルから文字列を形成する補助関数を定義します。 3つのコンポーネント{x、y、z}の順序は、{x、z、y}のPOVRay規則に一致するように切り替えられます。
AccString [x_List]:= StringDrop [StringJoin [Map [ToString [AccountingForm [#、NumberSigns-> {'-'、 ''}]] '、'&、x [[{1,3,2}]]]] 、-1]POVRay三角形オブジェクトを書き込む関数を定義します。
POVtriangle [ind_List]:= StringJoin [{'triangle {,, pig {colour rgb}}'}]三角形をPOVRayインクルードファイルにエクスポートします。
Export ['povtest.inc'、Map [POVtriangle、triangles]、 'Lines']カメラとライトを使用してファイルpovtest.povファイルを作成し、povtest.incを含めます。
カメラ{位置角度3上y * image_height right x * image_width look_at} light_source {color rgb 2 * shadowless} light_source {color rgb 2 * shadowless}#include'povtest.inc '頂点法線はにありますpplot3D [[1,4,2]]であり、POVRayの滑らかな三角形を形成するために使用できます。他のオプションはにありますpplot3D [[2]]。
GraphicsComplexをmesh2に変換します
3Dプロットの色と滑らかさを維持するために、MathematicaでGraphicsComplexオブジェクトを取得し、それをPOVRayでmesh2オブジェクトに変換することができます。これらの2つのオブジェクトは非常に類似した構造を持っているため、変換は非常に簡単です。
mesh2オブジェクトを使用する利点は、頂点とそのノルムベクトルからデータ(および色)を補間し、滑らかな色の表面を生成することです。
Mathematicaの3Dグラフィックスは通常、GraphicsComplexオブジェクト。そしてそのGraphicsComplexオブジェクトの構造は次のとおりです。
GraphicsComplex [vertex、polygons、VertexColors-> vertexColors、VertexNormals-> vertexNormals]この構造は実際にはPOVRayのmesh2オブジェクトと非常によく似ています。 POVRayの典型的なmesh2オブジェクトは次の構造を持っています:
mesh2 {vertex_vectors {...} normal_vectors {...} face_indices {...}}GraphicsComplexからmesh2への変換は、いくつかの文字列操作で簡単に実行できます。
いくつかの例
これは、POVRayでレンダリングされたカラーの3Dグラフィックスの例です。
p1 = ParametricPlot3D [{Cos [p] Sin [t]、Sin [p] Sin [t]、Cos [t]}、{p、0、2π}、{t、0、π}、PlotPoints-> 150 、メッシュ->なし、ColorFunction->関数[{x、y、z、p、t}、色相[Sin [6 p] Sin [6 t]]]、ColorFunctionScaling-> False、ImageSize-> 300]; p2 = SphericalPlot3D [[email protected] @SphericalHarmonicY [5、2、θ、ϕ]、{θ、0、π}、ϕ ϕ、0、2π}、メッシュ->なし、ColorFunction->関数[{x、 y、z、θ、ϕ、r}、評価[[email protected] [[email protected] [5、2、θ、ϕ]、{-π、π}]]、ColorFunctionScaling-> False、PlotPoints-> 50 、ImageSize-> 300]; p3 = SphericalPlot3D [1 + Sin [5 ϕ] Sin [10θ] / 10、{θ、0、π}、{ϕ、0、2π}、ColorFunction->(ColorData ['GreenPinkTones'] [#6] &)、メッシュ->なし、プロットポイント-> 50、ボックス化-> False、軸-> False、ImageSize-> 300];POVRayでエクスポートしてレンダリングする
Transpose [{#、Show [POVRayRender [#、ImageSize-> {400、300}]、ImageSize-> 300]}&/ @ {p1、p2、p3}] //グリッド
その包み
NSPOVRayRender関数はgithubリポジトリからダウンロードできるPOVRayRenderパッケージ。