C#OpenGL纹理不显示

时间:2011-04-30 18:31:52

标签: c# opengl tao-framework

在这个例子中,我尽可能地尝试简化问题,希望有人能为我解决问题。

我找不到一个简单的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); 
     }
}
}

2 个答案:

答案 0 :(得分:0)

尝试加载纹理而不会弄乱glEnable。然后,当您准备好绘制时,请调用glEnable(GL_TEXTURE_2D);并再次绑定纹理。

此外,我无法确定您是否配置了单缓冲或双缓冲使用。您可能需要拨打SwapBuffers

答案 1 :(得分: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(); 
        }
    } 
}