2016-03-27 10 views
3

回転した矩形でテクスチャを描いているときに私が気味悪いアーティファクトが発生していることに気付きました。回転で描画するときのアーティファクト

私の基本的な絵はこれです:私は "水平に" 描くと予想通り、結果は

enter image description here

enter image description here

しかし、私は回転でそれらを描き始めるとき正方形の2つのアーティファクトは、円の下側と右側に現れます。私は、彼らがどこから来たのかを把握することができません縫い目

enter image description here

...

任意のアイデア?

EDITは:アーティファクトがClampToEdgeにテクスチャラッピングモードを設定することにより、「削除」することができるレミー・グランディンによるコメントで述べたように

GL.Enable(EnableCap.Texture2D); 
GL.BindTexture(TextureTarget.Texture2D, graphics.TextureId); 
GL.Enable(EnableCap.Blend); 
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); 

GL.Begin(PrimitiveType.Quads); 

Point tlCorner = displayObject.LocalToGlobal(0,0); 
Point trCorner = displayObject.LocalToGlobal(displayObject.Width, 0); 
Point brCorner = displayObject.LocalToGlobal(displayObject.Width, displayObject.Height); 
Point blCorner = displayObject.LocalToGlobal(0, displayObject.Height); 

GL.TexCoord2(0.0f, 0.0f); 
GL.Vertex2(tlCorner.X, tlCorner.Y); 

GL.TexCoord2(1.0f, 0.0f); 
GL.Vertex2(trCorner.X, trCorner.Y); 

GL.TexCoord2(1.0f, 1.0f); 
GL.Vertex2(brCorner.X, brCorner.Y); 

GL.TexCoord2(0.0f, 1.0f); 
GL.Vertex2(blCorner.X, blCorner.Y); 

GL.End(); 

GL.Disable(EnableCap.Texture2D); 
GL.Disable(EnableCap.Blend); 
+1

テクスチャラッピングモードを確認してください。クランプされており、繰り返していないことを確認してください。 –

+0

確かに、私は2つのTexParameter(TextureWrapSとTextureWrap)をClampToEdgeに定義しました。あなたがaswer投稿にあなたの答えを載せるのを忘れてしまったら、私はそれを受け入れられたものとして喜んで設定します。 –

答えて

4

:申し訳ありませんが、私の描画コードを追加するのを忘れ。私はすぐに問題を解決しても、答えであることに同意しません。

画像をよく見ると、円の上と下にもアーチファクトがあります。これは、テクスチャの外でのOpenGLサンプリングのためです。ラッピングモードは、テクスチャの外側でサンプリングするときに何が起こるかを決定します。私が理解する限り、これはあなたが望むものではありませんが、効果は現時点では望ましいように見えるかもしれません。

サンプリングテクスチャ座標1.1を想像してください。デフォルトは "repeat"です。単純なfmod(x、1.0)です。 0.1を与えるこの例では。矩形の右側にあるアーティファクトは、実際には矩形の左側の部分です。 「ClampToEdge」は、座標を1.1から1.0に設定します。これは、左辺がピクセルを完全にカバーしていない矩形に問題があるため、左側のアーティファクトを解決しません。世界をラッピングするモードはそれを修正することはできません。

解決策は、テクスチャデータにサークルを中心にして、白/不可視の境界線(そこに何があるかわからない)です。実際には0.0-1.0を超えてテクスチャ座標を定義することを望むまで、ラッピングモードは重要ではありません範囲。これがラッピングモードの機能です

あなたは質問に左と上の人工物を含めなかったが、私は彼らにあなたに気づいた自由を取った。

関連する問題