基于tao框架的c# opengl开发遇到一个简单的问题

rao3281 2014-08-17 02:57:28
想使用Devil来载入纹理,编写了一个实验代码
绘制代码为
private void Form1_Load(object sender, EventArgs e)
{
simpleOpenGlControl1.InitializeContexts();
simpleOpenGlControl1.SwapBuffers();

Il.ilInit();
Ilu.iluInit();
Ilut.ilutInit();
Ilut.ilutRenderer(Ilut.ILUT_OPENGL);

simpleOpenGlControl1.SizeChanged += new EventHandler(simpleOpenGlControl1_SizeChanged);



// _textureManager.LoadTexture("map", "ccd-bkg.jpg");
// Texture texture = _textureManager.Get("map");
//Gl.glEnable(Gl.GL_TEXTURE_2D);
//Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture.Id);
PlotGL();
}

private void PlotGL()
{
Gl.glColor4f(1.0f, 1.0f, 1.0f, 0.1f);
Gl.glBegin(Gl.GL_QUADS);
Gl.glVertex3f(0, 0, 0);
Gl.glVertex3f(0.2f, 0, 0);
Gl.glVertex3f(0.8f, 0.6f, 0);
Gl.glVertex3f(0, 1, 0);
Gl.glEnd();
}
如果红色那行代码注释掉,绘制没有问题,都是白色的四边形
但一旦载入纹理后,四边形变成褐色了,不知为什么
public void LoadTexture(string textureId, string path)
{
int devilId = 0;
Il.ilGenImages(1, out devilId);
Il.ilBindImage(devilId); // set as the active texture.

if (!Il.ilLoadImage(path))
{
System.Diagnostics.Debug.Assert(false,
"Could not open file, [" + path + "].");
}

Ilu.iluFlipImage();

int width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH);
int height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT);
int openGLId = Ilut.ilutGLBindTexImage();

System.Diagnostics.Debug.Assert(openGLId != 0);
Il.ilDeleteImages(1, ref devilId);

_textureDatabase.Add(textureId, new Texture(openGLId, width, height));
}

...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hust_ifort 2015-03-16
  • 打赏
  • 举报
回复
楼主,问点问题,希望能给我解答一下,不胜感谢。 一、freeglut.dll如何添加到程序里面去,也就是程序编译成功后生成了exe文件后,不再需要freeglut.dll也可以运行。 二、在C#控制台程序中调试,会出现一个OpenGL的窗口,绘图没有问题,代码也可以读取明白。但是在C#windows窗体程序中,在Form_Load中添加代码,也可以出现OpenGL窗口,但是在关闭OpenGL窗口时,windows窗口也会消失,程序自动退出,无报错。如何将OpenGL窗口直接显示在windows窗体的某个控件区域内,如panel控件。 三、在C#引用OpenGL时,显示的XML注释文字为英文,有中文版的XML注释吗? 希望楼主给点回答,搜索了很久,没什么人写用Tao框架调用OPENGL的东东,甚是纠结,不得已向楼主求助,请不吝赐教。 Email:hust_ifort@126.com
qq_24330885 2014-12-08
  • 打赏
  • 举报
回复
断言哪里出错 是因为opengl控件没有运行前就加载图片了 把 窗口初始化函数里 "opengl控件.InitializeContexts()"语句 放在图片加载前
beidia 2014-11-30
  • 打赏
  • 举报
回复
你好兄弟,我也正好在这里出错了,那个断言 System.Diagnostics.Debug.Assert(openGLId != 0); 报错,请问你的这句 glDisable(GL_TEXTURE_2D) 放在哪个位置?
rao3281 2014-08-20
  • 打赏
  • 举报
回复
呃 居然没有人回复 我已发现问题 原因是纹理贴图以后需要先glDisable(GL_TEXTURE_2D);
rao3281 2014-08-17
  • 打赏
  • 举报
回复
初步查明 就是这句话造成的 Ilut.ilutGLBindTexImage();

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧