2009-04-25 11 views
1

OpenGLカラーマトリックス変換はどのように機能しますか?OpenGLカラーマトリックス

三角形を描画するサンプルプログラムを修正し、三角形の色を変更できるかどうかを確認するために色行列コードを追加しましたが、動作しないようです。

static float theta = 0.0f; 
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
glClearDepth(1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glPushMatrix(); 
glRotatef(theta, 0.0f, 0.0f, 1.0f); 
glMatrixMode(GL_COLOR); 

GLfloat rgbconversion[16] = 
{ 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f 
}; 
glLoadMatrixf(rgbconversion); 
glMatrixMode(GL_MODELVIEW); 

glBegin(GL_TRIANGLES); 
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f , 0.5f); 
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0.87f, -0.5f, 0.5f); 
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-0.87f, -0.5f, 0.5f); 
glEnd(); 
glPopMatrix(); 

は、私の知る限り、私はロードだカラーマトリックスは黒に三角形を変更する必要があり、動作するようには思えません。私は行方不明のものがありますか?

答えて

6

カラーマトリックスは、現在のハードウェアでハードウェアアクセラレーションされていないglDrawPixelsなどのピクセル転送操作にのみ適用されます。しかし、フラグメントシェーダを使ってカラーマトリックスを実装するのは本当に簡単です。あなたは行列を均一なmat4として渡して、次にそれをmulitplyとすることができますgl_FragColor

1

あなたが正しく行っているように見えますが、現在のカラーマトリックスは三角形のアルファ値も0に設定しているため、描画中は画面に表示されません。

+0

....非常に遅いのです実は、三角形がまだあります元の赤、緑、青で描かれているので、カラーマトリックスがアルファ成分に影響しているとは思わない。 –

+0

アルファ成分は透明度が有効になっている場合にのみ最終的な画像に影響を与えます。 – AndyG

+0

私はglEnable(GL_BLEND)を追加しました。それでも絵には影響しません。まだ赤/緑/青の三角です。カラーマトリックスは効果がないようです。 –

1

"さらに、ARB_imaging拡張がサポートされている場合、GL_COLORも受け入れられます。"

glMatrixModeのドキュメントです。あなたのマシンで拡張機能がサポートされていますか?

+0

私が知る限り、ARB_imagingは有効になっていますが、どうすればわかりますか?私はVS 2008を使用しています。 –

+0

OpenGL Extensions Viewerを実行しましたが、GL_ARB_imagingはマシン上の有効な拡張機能です。 –

0

私は考えられる問題を発見しました。 カラーマトリックスは、 "画像処理サブセット"でサポートされています。ほとんどのHWでは、ドライバによってサポートされていました(ソフトウェア実装)

ソリューション:。 glEnd()後に次の行を追加します。

glCopyPixels(0,0, getWidth(), getHeight(),GL_COLOR); 

それは