ブレンドモード
ここではブレンドモードについて解説します。
※ 開発環境によってダウンロードするサンプルデータが異なります。
目次
ブレンドモードとはピクセルを合成して描画する方法です。この設定を変化させることで、対象となるモデルの半透明表示などが可能となります。
1. ブレンドモードの設定
ブレンドモードを設定するには、mceAppearance_setBlendMode( This, mode ) を使用します。 ブレンドモードは以下の 5 種類が用意されています。
- mceAppearance_BlendMode_ALPHA ( アルファブレンド )
- mceAppearance_BlendMode_ALPHA_ADD ( 加算ブレンド )
- mceAppearance_BlendMode_MODULATE ( 基本変調ブレンド )
- mceAppearance_BlendMode_MODULATE_X2 ( 高輝度変調ブレンド )
- mceAppearance_BlendMode_REPLACE ( 置換 )
2. テクスチャブレンドモードの設定
テクスチャを利用する場合、上記のブレンドモードの設定以外にテクスチャのブレンドモードの設定を行う必要があります。テクスチャブレンドモードを設定するには、mceAppearance_setTextureBlendMode( This, ix, mode ) を使用します。
マルチテクスチャ時は、それぞれのテクスチャのインデックスにテクスチャブレンドモードを設定する必要があります。
テクスチャブレンドモードは以下の 5 種類が用意されています。
- mceAppearance_Texture_FUNC_REPLACE ( 置換 )
- mceAppearance_Texture_FUNC_ADD ( 加算 )
- mceAppearance_Texture_FUNC_BLEND ( ブレンド )
- mceAppearance_Texture_FUNC_DECAL ( 混合 )
- mceAppearance_Texture_FUNC_MODULATE ( 乗算 )
下記のサンプルプログラムでは、モデルから取得した mceAppearance に対してブレンドモードとテクスチャブレンドモードの設定を行っています。
#define COORD_SHIFT (16) /* int→hi_coordのシフト */
(中略)
typedef struct tagWork
{
(中略)
mceFigure *Figure0; /* Figure0 */
(中略)
mceAppearance *Appe; /* Appearance */
(中略)
} WORK;
hi_exception exception;
(中略)
/* mceAppearanceを取得 */
work->Appe = (mceAppearance *)mceObject3D_findObject3D (
(mceObject3D *)work->Figure0,
ClassId_Appearance,
0);
if (work->Appe == NULL)
{
return 1;
}
/* ブレンドモードを設定 */
exception = mceAppearance_setBlendMode (work->Appe,
mceAppearance_BlendMode_ALPHA);
if (exception != hi_NoException)
{
return 1;
}
/* テクスチャブレンドモードを設定 */
exception = mceAppearance_setTextureBlendMode (work->Appe,
0, mceAppearance_Texture_FUNC_MODULATE);
if (exception != hi_NoException)
{
return 1;
}
3. アルファ値の設定
アルファ値( 透明度 )を設定するには、mceAppearance_setColor( This, colorType, abgr ) を使用します。
hi_exception exception;
(中略)
hi_sint32 color;
(中略)
/* アルファ値を変更 */
color = mceAppearance_getColor (work->Appe,
mceAppearance_MaterialType_DIFFUSE, &exception);
color = (color & 0x00ffffff) |
(((hi_uint8)(work->Alpha >> COORD_SHIFT)) << (24));
exception = mceAppearance_setColor (work->Appe,
mceAppearance_MaterialType_DIFFUSE, color);
if (exception != hi_NoException)
{
return 1;
}
また、mceAppearance_setAlphaThreshold( This, alphaThreshold ) を用いることで、モデルのアルファ値が、引数 alphaThreshold の値以上である場合のみ描画されるようになります。 初期値は 0 ( 全て表示 )で設定されています。
hi_exception exception;
/* 閾(しきい)値を設定 */
exception = mceAppearance_setAlphaThreshold (work->Appe, 150);
if (exception != hi_NoException)
{
return 1;
}
![]() |
![]() |
| mceAppearance_BlendMode_ALPHA ( アルファ値 255 ) |
mceAppearance_BlendMode_ALPHA ( アルファ値 120 ) |
![]() |
![]() |
| mceAppearance_BlendMode_ALPHA_ADD ( アルファ値 255 ) |
mceAppearance_BlendMode_ALPHA_ADD ( アルファ値 120 ) |
![]() |
![]() |
| mceAppearance_BlendMode_MODULATE | mceAppearance_BlendMode_MODULATE_X2 |
描画結果 ( テスクチャブレンドモードは全て mceAppearance_Texture_FUNC_MODULATE 、 閾( しきい )値は全て 0 に設定 ) |
|







