DOTの結果をαだけに適用したい場合
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20050616
いつもお世話になってる床井研究室ではdot3についてはあまり書かれてなかったので手探り状態。
いろいろ調べた結果。
- dot3はCOMBINE_RGBでしか動かない。COMBINE_ALPHAしても無意味!
- dot3の結果はrgbかrgbaのどちらかしかない
めんどくせぇ仕様だなおい!
シェーダ使いたいが我慢。
モノトーン化用のテクスチャをわざわざ作ってるけど、実際はCONSTANTを使ってもかまわないと思う。
// テクスチャユニット0のテクスチャ環境 glActiveTextureARB( GL_TEXTURE0_ARB ); glBindTexture( GL_TEXTURE_2D, texture ); // 描画したいテクスチャ. glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // テクスチャユニット1のテクスチャ環境 glActiveTextureARB( GL_TEXTURE1_ARB ); glBindTexture( GL_TEXTURE_2D, mono_tex ); // モノトーン化テクスチャ. glEnable( GL_TEXTURE_2D ); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGBA ); // αも内積の結果でfillする glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); // 前ユニットの結果を使う. glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); // カレントテクスチャ参照 // テクスチャユニット2のテクスチャ環境 glActiveTextureARB( GL_TEXTURE2_ARB ); glBindTexture( GL_TEXTURE_2D, texture ); // 描画したいテクスチャ. glEnable( GL_TEXTURE_2D ); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE ); // RGBを置き換える. glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE ); // αを置き換える. glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE ); // RGBだけテクスチャを使用 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS ); // α値は前ユニットの結果を利用する.