ブレンドモード

ここではブレンドモードについて解説します。




※ 開発環境によってダウンロードするサンプルデータが異なります。

目次



ブレンドモードとはピクセルを合成して描画する方法です。この設定を変化させることで、対象となるモデルの半透明表示などが可能となります。


1. ブレンドモードの設定

ブレンドモードを設定するには、mceAppearance_setBlendMode( This, mode ) を使用します。 ブレンドモードは以下の 5 種類が用意されています。



2. テクスチャブレンドモードの設定

テクスチャを利用する場合、上記のブレンドモードの設定以外にテクスチャのブレンドモードの設定を行う必要があります。テクスチャブレンドモードを設定するには、mceAppearance_setTextureBlendMode( This, ix, mode ) を使用します。
マルチテクスチャ時は、それぞれのテクスチャのインデックスにテクスチャブレンドモードを設定する必要があります。
テクスチャブレンドモードは以下の 5 種類が用意されています。

下記のサンプルプログラムでは、モデルから取得した 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 に設定 )


このページの先頭へ戻る