textureinterface_shade8sdk
texture_interface
バグ?2005/11/2記載。
若干使用方法が変わりました。
//ローカル座標上の(fx, fy, fz)での形状上の色を取得 vec2 uv = vec2(tu, tv); //対応するuv値 compointer<texture_interface> t(shape->create_texture_interface( 0, vec3(0, 0, 0), vec3(0, 0, 0), vec3(0, 0, 0), vec3(0, 0, 0), &uv, 0, 0)); //ローカル座標上での対応点の指定 t->set_position(vec3(fx, fy, fz)); // シェーディング計算を更新(Shade8で追加された関数) t->update(); //指定点での表面色の取得 col = t->get_diffuse(); // Shade8で追加された関数。update後に呼ぶこと
texture_interfaceにて、「3次元空間上の指定位置のデフューズ値(色情報)」を取得することができます。テクスチャや大理石などのプロシージャルなテクスチャ設定がされている場合でも最終的なピクセル色が取得できます。「ローカル座標位置」「対応する位置でのUV」を渡すことにより、Shade内部でシェーディング計算が行われます。
Shade7.5までは、デフューズパラメータのみ取得できましたが、Shade8以降ではデフューズ・スペキュラ・透過・反射・発光・法線・トリムで抜くかどうか、などの各種パラメータを取得できるようになっています。
そのためか仕様変更がもっともダイナミックに起こったクラスのうちの1つです。
まず、各種パラメータ(ローカル座標位置とUV)を指定後、「texture_interface::update」にてシェーディング計算を行う必要があります。Shade7.5よりも若干遅くなったように感じます(デフューズ以外の計算も発生しているため)。
その後「texture_interface::get_diffuse」などで値を取得します。「texture_interface::get_diffuse_color」は廃止になりました。
しかし・・・、どうもShade8SDKでは仕様通りに動いていない気がします。「get_diffuse」でRGB(1.0f, 1.0f, 1.0f)しか返ってこないです。やり方がまずいのかもしれませんが、また調査次第ご報告します。
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.