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パッケージ。