2011-04-30 6 views
0

이 예제에서는 누군가가 나를 위해이 문제를 해결할 수 있도록 노력하겠습니다.C# OpenGL 텍스처가 표시되지 않음

텍스처를 표시하는 C# OpenGL 코드의 간단한 작동 예제를 찾을 수 없습니다. 그래서 여기에 하나 만들려고했습니다. 불행히도이 코드는 저에게 적합하지 않습니다. 오류는 발생하지 않지만 텍스처도 표시되지 않습니다.

아마도 내가 잘못 설정했을 수도 있습니다. 누군가이 코드를 붙여넣고 실행되는지 확인할 수 있습니다.

using System; 
using System.Drawing; 
using Tao.OpenGl; 
using Tao.DevIl; 
using System.Windows.Forms; 

namespace TextureTest 
{ 
public partial class Form1 : Form 
{ 
    int imageID = 1; 
    int texture = 1; 

    public Form1() 
    { 
     InitializeComponent(); 
     OpenGlControl.InitializeContexts(); 

     Il.ilInit(); 
     Il.ilBindImage(imageID); 

     bool success = Il.ilLoadImage(@"test.bmp"); 

     Il.ilConvertImage(Il.IL_RGBA, Il.IL_UNSIGNED_BYTE); 

     Gl.glEnable(Gl.GL_TEXTURE_2D); 
     Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture); 
     Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); 
     Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR); 
     Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Il.ilGetInteger(Il.IL_IMAGE_BPP), 
         Il.ilGetInteger(Il.IL_IMAGE_WIDTH), Il.ilGetInteger(Il.IL_IMAGE_HEIGHT), 0, 
         Il.ilGetInteger(Il.IL_IMAGE_FORMAT), Gl.GL_UNSIGNED_BYTE, Il.ilGetData()); 

     Il.ilDeleteImage(imageID); 

     Gl.glBegin(Gl.GL_QUADS); 

      Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex2f(-1.0f, -1.0f); 
      Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex2f(1.0f, -1.0f); 
      Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex2f(1.0f, 1.0f); 
      Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex2f(-1.0f, 1.0f); 

     Gl.glEnd(); 

     Gl.glFlush(); 
     Gl.glDeleteTextures(1, ref texture); 
    } 
} 
} 

답변

0

glEnable을 사용하지 않고 텍스처를로드 해보십시오. 그런 다음 그릴 준비가되면 glEnable(GL_TEXTURE_2D);으로 전화하여 텍스처를 다시 바인딩하십시오.

또한 단일 버퍼링 또는 이중 버퍼링으로 구성되어 있는지 확인할 수 없습니다. SwapBuffers으로 전화해야 할 수도 있습니다.

0

나는이 문제에 대한 매우 간단한 해결책을 찾았습니다.

Ulut 함수 "Ilut.ilutGLLoadImage"를 사용하면 거의 모든 것을 다 처리합니다. 적어도 여기에 제시된 간단한 예제에서.

다른 사람이이 코드를 유용하게 사용하기 바랍니다.

using System; 
using System.Drawing; 
using Tao.OpenGl; 
using Tao.DevIl; 
using System.Windows.Forms; 

namespace TextureTest 
{ 
    public partial class Form1 : Form 
    { 
     int texture; 

     public Form1() 
     { 
      InitializeComponent(); 
      OpenGlControl.InitializeContexts(); 

      Il.ilInit(); 
      Ilut.ilutInit(); 

      texture = Ilut.ilutGLLoadImage("test.bmp"); 

      Gl.glBegin(Gl.GL_QUADS); 

       Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex2f(-1.0f, -1.0f); 
       Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex2f(1.0f, -1.0f); 
       Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex2f(1.0f, 1.0f); 
       Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex2f(-1.0f, 1.0f); 

      Gl.glEnd(); 
     } 
    } 
} 
관련 문제