FK Tips

このページではFK Tipsについて掲載しています。

現在掲載している他にも注意しておきたい点がありましたらどんどん編集していってください。

FKの便利な使い方

FKの便利な活用方法を紹介します。

テクスチャのピクセル色をそのまま表示する方法

光源やマテリアルの影響を受けずにテクスチャのピクセル色をそのまま表示するには以下のように記述する。

fk_Texture texture;//テクスチャを表すクラス
texture.setTextureMode(FK_TEX_REPLACE);//画像モード

ただし、この場合はマテリアルの透明度も反映されなくなるので半透明表示もできなくなる。光源には影響されたくないが、透明度だけ有効にしたい場合は以下のようなマテリアルを作成して用いるとよい。

fk_Material pixMat;
pixMat.setAmbDiff(0.0, 0.0, 0.0);
pixMat.setSpecular(0.0, 0.0, 0.0);
pixMat.setEmission(1.0, 1.0, 1.0);

マテリアル関連

色などの材質に関するTipsです。

マテリアルの初期化

FKでマテリアルを扱うためには、マテリアルの初期化を行う必要がある。 初期化は1度だけで十分なので、Fl_Windowのend関数の直後あたりで行えばよい。

// マテリアルの初期化
fk_Material::initDefault()

初期化を行わないと、色を指定しても正しい色にならないので注意すること。

FKにおける材質要素

fk_Materialが持つ要素は以下の6つである。 ごく簡単な説明と共に紹介する。

alpha
透明度: 物体の透明度の設定(エントリー順に注意しないと正しく描画されない)
ambient
環境反射係数: 光が当たっていない部分の色
diffuse
拡散反射係数: 光が当たっている部分の色
emission
放射光係数: 物体自体が発光しているような表現に用いる(光源にはならない)
specular
鏡面反射係数: 鏡のような反射の色合いの設定(他のオブジェクトが反射して映ることはない)
shininess
鏡面反射のハイライト: ハイライトの大きさ(値が大きいほどハイライトは小さく鋭くなる)

一時的な材質変更

既にsetMaterial()を行ったモデルに対して一時的に色や透明度を変更したい場合は、わざわざfk_Materialのオブジェクトを用意する必要はない。例えば透明度を変更したい場合は、以下のようなコードで実現できる。

hogeModel.getMaterial()->setAlpha(0.5);

一度もsetMaterial()を行っていない場合は正しく動作しないので注意すること。同じようなコードで、現在設定されている色の値も得ることができる。

逆に、setMaterial()で指定したマテリアルの色設定を後から変更するだけでは、既にセット済みのモデルには反映されない。何故ならマテリアルの設定は個々のモデルに値渡しされているためである。FKは基本的には参照渡しの関係が多いが、マテリアルに関しては例外であるため、気を付けて欲しい。

線と点の色

物質の色はfk_ModelのsetMaterial関数によって設定するが、線と点の色はそれぞれ別の関数によって設定する。

// 物質の材質設定
fk_Model    model;
fk_Block    block;
model.setShape(&block);
model.setMaterial(White);

// 線の色設定
fk_Line    line;
model.setShape(&line);
model.setLineColor(0.0f, 0.0f, 1.0f);

// 点の色設定
fk_Point    point;
model.setShape(&point);
model.setPointColor(1.0f, 0.0f, 0.0f);

線や点の色設定を行わなかった場合に線や点を描画する場合は、設定されているマテリアルの環境反射係数の色が使われる。

fk_Solid関連

半稜線構造や、fk_Solid関係の使い方に関するTipsです。

位相要素のID

fk_Solidの位相要素(fk_Vertex, fk_Half, fk_Edge, fk_Loop)のIDは1から始まる。

fk_Loopは5角形以上の多角形に対応

fk_Loopは5角形以上の多角形を生成できます。 生成方法に違いはありません。

FLTK関連

GUIを作るためのFLTK関連のTipsです。

FLTKで日本語を扱う

FLTKは標準では日本語に対応していない。 FLTKで日本語を扱うには、FLTKがデフォルトで扱うフォントに日本語を指定する必要がある。

Fl::set_font(FL_HELVETICA, "フォント名");

// 例
Fl::set_font(FL_HELVETICA, "メイリオ");

指定する場所はマテリアルを初期化するあたりがお勧めです。

FL_HELVETICAとは、FLTKがデフォルトで利用するフォントを指す定数値です。 set_font()は指定した定数値が実際に利用するフォントを置き換える働きをします。 フォント名はWindowsのコントロールパネルのフォント一覧で表示されるものを指定します。 Vista以降なら"メイリオ"、XP以前なら"MS ゴシック"(MSは全角で、その後ろは半角スペース)を指定すれば安全です。






トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS