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 ); // α値は前ユニットの結果を利用する.