2014-02-09 164 views
1

我從呈現然而,當在800x600 png格式顯示位圖
enter image description hereimage with unwanted triangle爲什麼三角形在圖像上渲染背景顏色?

我有一個繼承GameWindow一個窗口類,這裏是重寫的方法是(我認爲)是相關的:

protected override void OnLoad(EventArgs e) { 
    base.OnLoad(e); 

    GrafxUtils.InitTexturing(); 
    textureId = GrafxUtils.CreateTextureFromBitmap((Bitmap)currentImage); 

    OnResize(null); 
    GL.ClearColor(Color.Gray); 

} 

protected override void OnRenderFrame(FrameEventArgs e) { 
    base.OnRenderFrame(e); 

    GL.Clear(ClearBufferMask.ColorBufferBit); 
    GL.MatrixMode(MatrixMode.Texture); 
    GL.LoadIdentity(); 
    GL.BindTexture(TextureTarget.Texture2D, textureId); 
    GL.Begin(PrimitiveType.Quads); 

    // top-left 
    GL.TexCoord2(0, 0); 
    GL.Vertex2(0, 0); 

    // top-right 
    GL.TexCoord2(1, 0); 
    GL.Vertex2(currentImage.Width, 0); 

    // bottom-left 
    GL.TexCoord2(0, 1); 
    GL.Vertex2(0, currentImage.Height); 

    // bottom-right 
    GL.TexCoord2(1, 1); 
    GL.Vertex2(currentImage.Width, currentImage.Height); 

    GL.End(); 

    SwapBuffers(); 
} 

...和CreateTextureFromBitmap方法:

// utility method from GrafxUtils 
public static int CreateTextureFromBitmap(Bitmap bitmap) { 
    BitmapData data = bitmap.LockBits(
     new Rectangle(0, 0, bitmap.Width, bitmap.Height), 
     ImageLockMode.ReadOnly, 
     System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
    var tex = GetBoundTexture(); 
    GL.BindTexture(TextureTarget.Texture2D, tex); 
    GL.TexImage2D(
     TextureTarget.Texture2D, 
     0, 
     PixelInternalFormat.Rgba, 
     data.Width, data.Height, 
     0, 
     OpenTK.Graphics.OpenGL.PixelFormat.Bgra, 
     PixelType.UnsignedByte, 
     data.Scan0); 
    bitmap.UnlockBits(data); 
    SetParameters(); 
    return tex; 
} 

會導致三角形出現什麼?

回答

2

用於頂點座標的currentImage.Width/currentImage.Height的用法不正確。它應該有-1到1的範圍。在你的情況下,因爲你似乎從0到1(即只有四分之一的屏幕),左上角應該是(0,0)右上角應該有( 1,0),左下角應該有(0,-1),右上角應該有(1,-1)。如果你想要全屏四元組,它應該在-1,-1到1,1之間。

至於你觀察到的奇怪形狀,你正在繪製2個三角形,但是纏繞順序沒有被照顧到。即其斜邊從左上角到右下角的一個三角形,以及從左下角到右上角的另一個三角形。因此,形狀。你可以看到,例如,

http://msdn.microsoft.com/en-us/library/bb464051.aspx

而且也

Index Buffer Object and UV Coordinates don't play nice

+0

我不是故意繪製任何三角形。 :) ...什麼是纏繞順序? – IAbstract

+0

我看了XNA的鏈接...什麼是相關性?有一個命令,我應該設置TexCoord2和Vertex2?這就是我所要做的。 :) – IAbstract

+0

好的...你幫我找到了我需要的方向。雖然不是一個完整的答案,我給+1。 :)我完成一個縮放功能後,很可能會發佈一個答案。 – IAbstract