0

以下は、openGL Super Bible (第 5 版、ページ No. 208) からの引用です。

The first is an effect called scintillation (aliasing artifacts) that appears 
on the surface of objects rendered very small on-screen compared to the 
relative size of the texture applied. Scintillation can be seen as a sort of 
sparkling that occurs as the sampling area on a texture map moves 
disproportionately to its size on the screen. The negative effects of 
scintillation are most noticeable when the camera or the objects are in motion.

現在、まったく同じ問題に直面しており (4912 x 3264 ピクセルの画像を読み込んでいます)、回転や平行移動などのアフィン変換を行っています。特にロードされたテクスチャに白いピクセルがある場合にぼやけが見られます (これは一般的な観察ではないかもしれませんが、私はこれを観察しています)。コードは次のとおりです。

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width,image->height, 0, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);
//gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,image->width,image->height, GL_BGR,GL_UNSIGNED_BYTE,image->imageData);

アニメーションは滑らかで、スポイラーを除いてすべてが完璧です。このようなことに大きな懸念を抱くアプリケーションを開発しているので、誰かがこの状況を改善するのを手伝ってくれますか?

また、 を使用した後glTexImage2D、 を使用するglGenerateMipmap(GL_TEXTURE_2D)と、 が得られsegmentation fault (core dump)ます。私が見逃している可能性のあるものはありますか?

4

3 に答える 3

0

間違ったバッファ オブジェクトでレンダリング関数を呼び出したり、読み取るデータが不足したり、その他の非常に奇妙な状態でない限り、OpenGL はクラッシュしません。そのため、何らかの形のドライバー バグがここで発生しています。

ATI ドライバーには非常に古い問題があり、最初にglGenerateMipmap呼び出さないと失敗します。glEnable(GL_TEXTURE_2D)それがここで役立つかどうかはわかりませんが、試してみてください。

于 2013-06-03T21:22:05.920 に答える
-1

わかりました、私は答えたいと思います、私は解決策を見つけました:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

これをテクスチャのパラメータとして設定すると、ほぼ完璧に機能します! これが最良のオプションかどうかはわかりませんが、うまく機能します。

しかし、ここで問題が 1 つあります。テクスチャをロードしている間、以下を使用しても機能しません (イメージ テクスチャではなく、全体が白で塗りつぶされます)。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width,image->height, 0, GL_BGR, 
GL_UNSIGNED_BYTE, image->imageData);

gluBuild2DMipmaps()コールを使用する必要があります。それについて考えている間、私はどういうわけかそれがうまくいかない理由を正当化しようとしていますが、誰かがそれについてコメントできるなら本当に欲しいです.

于 2013-06-04T11:05:39.770 に答える