在这个例子中,我尽可能地尝试简化问题,希望有人能为我解决问题。
我找不到一个简单的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 :(得分: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();
}
}
}