<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>TG BLOG</title>
<link>http://tres-graficos.jp/blog/index.php</link>
<pubDate>Sun, 04 Oct 2009 23:56:56 </pubDate>
<description>
TG BLOG - RSS 2.0 (Really Simple Syndication).
</description>
<item>
<title>Scripting 001b - 'Duplicate Face' - 番外</title>
<link>http://tres-graficos.jp/blog/article.php?id=569</link>
<pubDate>Sun, 04 Oct 2009 23:56:56 +0900</pubDate>
<description>つぶやきに反応してちょっと書いてみた。
同位置に重なってポリゴンがある場合、Cheetah3D の 3D ビュー上では汚く見えるので、ビューのタイトルバーで &quot;表示&quot; -&gt; &quot;裏面を描画しない&quot; を設定しておくのがいいでしょうね。
追記：U...</description>
<content:encoded>
<![CDATA[<p>つぶやきに反応してちょっと書いてみた。</p>
<p>同位置に重なってポリゴンがある場合、Cheetah3D の 3D ビュー上では汚く見えるので、ビューのタイトルバーで "表示" -> "裏面を描画しない" を設定しておくのがいいでしょうね。</p>
<p style="color:#dd0000;">追記：UV をセットするコードがまちがっていたので、修正  :-! </p>
<!-- more -->
<pre>
<code>
<br />// ツールスクリプト : ~/Library/Application Support/Cheetah3D/scripts/Tool フォルダにコピー
// 選択したポリゴンを同位置に複製し、法線を反転するスクリプトのサンプル  
// ツールのプロパティを設定、ツールスクリプトの場合、必須関数
function buildUI( tool ) {
    // プロパティビューにパラメータを追加、
    tool.addParameterInt('poly sel', 0, 0, 15, false, false);
    // プロパティビューに実行ボタンを追加、クリックで duplicateFace 関数を実行
    tool.addParameterButton('duplicate', 'apply', 'duplicateFace');
}
// ボタンをクリックした時に呼び出される関数。パラメータのボタンから呼び出された関数の場合、引数はこのツールオブジェクト自身
function duplicateFace( tool ) {
    // ドキュメントから選択されたオブジェクトを取得
    var obj = tool.document().selectedObject();
    // ローポリゴンオブジェクトでない場合、終了
    // この type 関数で取得できる変数は、ヘルプファイル Constants の項を参照
    if (obj.type() != POLYGONOBJ ) return false;
    // 現在の選択セットを保持しておく（そのまま設定に使用するとエラーが出るため int 型に変換）
    var polyNum_bk = parseInt( obj.getParameter('activePolySelection') );
    // ポリゴン操作用のコアオブジェクト (PolyCore) を取得
    // モディファイア・ボーン適用後のメッシュ情報が欲しい場合は、modCore 関数を使う
    // 今回直接ポリゴンを複製するので、core 関数を使用
    var core = obj.core(); //
    var i, j;
    // 捜査用にポリゴン数を取得
    var polyCount = core.polygonCount();
    for (i = 0;i &lt; polyCount;i++) {
        if ( core.polygonSelection(i) ) { // ポリゴンが選択されている場合、ポリゴンを複製
            // ポリゴンのサイズ（ポイント数）を取得
            var size = core.polygonSize( i );
            // ポイントと UV 情報保持のための変数を定義
            var vertices = [];
            var uvs = [];
            for (j = 0;j &lt; size;j++) {
                // ポリゴンとコーナー（ポイント）のインデックスから、ポイント（バーテックス）のインデックスを取得し [vertexIndex] 、それを使用して位置情報 Vec3D を取得 [ vertex ]、その位置情報 Vec3D を保持
                vertices.push( core.vertex( core.vertexIndex( i, j ) ) );
                // ポリゴンとコーナー（ポイント）のインデックスから、UV 情報を取得し、その情報を保持
                uvs.push( core.uvCoord( i, j ) );
            }
            // 新規ポリゴンを作成 （ポイントを共有する（ポリゴンの表裏を接合する）場合は、第２引数を true にする）戻り値は追加したポリゴンのインデックス
            var pi = core.addPolygon( size, false, vertices);
            // 4.6 では、UV を個別にセット（エラーが出るため）##ここのインデックス指定が間違ってました i -&gt; pi ##
            for (j = 0;j &lt; size;j++) {
                core.setUVCoord( pi, j, uvs[j] );
            }
            // 5.0 の場合、バグが直っているので、addPolygon の第４引数で、 uvs を渡してやった方が簡単
            // var pi = core.addPolygon( size, false, vertices, uvs );
            // 追加したポリゴンの法線を逆にする
            core.flipWinding( pi );
            // ポリゴン選択セットを、ツールのプロパティで設定した値にセット（エラーが出るため int 型に変換）
            core.setActivePolygonSelection( parseInt(tool.getParameter('poly sel')) );
            // 選択状態にしておく
            core.setPolygonSelection( pi, true );
            // ポリゴン選択セットを、戻す
            core.setActivePolygonSelection( polyNum_bk );
        }
    }
    // 3D ビューをアップデート
    obj.update();
}
</code>
</pre>
<p>iPhone 関係、ちょこちょこ参考書は読んでるんだけど、なんせ手が遅いんだよね。 :-!</p>
]]>
</content:encoded>
</item>
</channel>
</rss>