
三角形のメッシュを繋げて、形を作っていくシェーディング方法です。
三角形は次のパラメータで作っていきます。
エッジフラグ(1or 2) x座標 y座標 色値(0〜4個)
エッジフラグとは、どの三角形のエッジが共有されるかを定義するもので
エッジフラグ 0は三角形を新規作成する
エッジフラグ 1は頂点BCを共有し新たな点を追加して三角形を作成する
エッジフラグ 2は頂点ACを共有し新たな点を追加して三角形を作成する
という規則があります。
最初はどちらが1なのか2なのか分からなかったのですが、
A-C、B-Cは新たな三角形でA-Bとなるという事に気づいてから分かるようになりました。
★が付いたパラメータは変更可能です。色々と変えてみてください。
コード内の<< >>は本来英語記号ですが、ここでは入力できないため日本語記号<< >>を使用しています

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 /w 50 def % 正三角形の幅の1/2 /h 3 sqrt 2 div w 2 mul mul def % 正三角形の高さ << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % ★色空間定義 /DataSource [ %★ エッジフラグ xy座標 色値 0 w h 0 1 1 % 頂点A0 0 w neg h 1 1 0 % 頂点B0 0 0 0 1 0 1 % 頂点C0 1 2 w mul neg 0 0 1 1 1 w neg h neg 1 1 0 2 w h neg 0 1 1 2 w 2 mul 0 1 1 0 2 w h 0 1 1 ] >> shfill % グラデーションで塗りつぶす |
次の説明は分かりにくいかも知れませんが、図を見ていただければ分かるかと思います。
①から時計回りで三角形を作っていきます。

(1)A0 B0 C0は新規に三角形を作るのでエッジフラグは0
0 w h 0 1 1 % A0 エッジフラグ x y R G B
0 w neg h 1 1 0 % B0
0 0 0 1 0 1 % C0
(2)新しい点C1を追加する。B0-C0に繋げるのでエッジフラグは1
B0-C0は新たな三角形ではA1-B1となる
1 2 w mul neg 0 0 1 1
(3)新しい点C2を追加する。B1-C1に繋げるのでエッジフラグは1
B1-C1は新たな三角形でA2-B2となる
1 w neg h neg 1 1 0
(4)新しい点C3を追加する。A2-C2に繋げるのでエッジフラグは2
A2-C2は新たな三角形でA3-B3となる
2 w h neg 0 1 1
(5)新しい点C4を追加する。A3-C3に繋げるのでエッジフラグは2
A3-C3は新たな三角形でA4-B4となる
2 w 2 mul 0 1 1 0
(5)新しい点C5を追加する。A4-C4に繋げるのでエッジフラグは2
2 w h 0 1 1


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % 色空間定義 /DataSource [ %エッジフラグ xy座標 RGB色値 0 0 0 1 0 1 % 頂点A0 0 100 100 0 1 1 % 頂点B0 0 -100 100 0 1 1 % 頂点C0 2 -100 -100 0 1 1 2 100 -100 0 1 1 2 100 100 0 1 1 ] >> shfill % グラデーションで塗りつぶす |

三角メッシュは定型な三角形とは限りません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 /cyan { 0 1 1 } def % シアン /magenta { 1 0 1 } def % マゼンタ /yellow { 1 1 0 } def % イエロー << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % 色空間定義 /DataSource [ 0 40 100 cyan 0 -40 80 magenta 0 0 0 yellow 1 -100 10 cyan 1 -50 -20 magenta 2 -70 -90 yellow 2 30 -70 cyan 2 90 -90 magenta 2 100 0 yellow 2 60 30 magenta 2 40 100 cyan ] >> shfill % グラデーションで塗りつぶす |
コメント