首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL texture+lightning+blending故障

OpenGL texture+lightning+blending故障
EN

Stack Overflow用户
提问于 2014-11-19 13:56:26
回答 1查看 209关注 0票数 0

我正在使用OpenTK,我很难理解openGL启用函数的概念。透视矩阵在onResize函数中。

我在试着展示纹理。

我的渲染功能:

代码语言:javascript
复制
        GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f); 
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadIdentity();
        GL.Enable(EnableCap.Texture2D);
        GL.Enable(EnableCap.DepthTest);
        Ground.Draw();

我的Ground.Draw()函数(SIZXZ.Z,SIZXZ.Y是常量):

代码语言:javascript
复制
        GL.PushMatrix();
        GL.Translate(new Vector3(-sizeXZ.X / 2, -1, sizeXZ.Y / 2));
        GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName));
        GL.Begin(PrimitiveType.Quads);
        GL.Color3(1,1,1);
        GL.Normal3(0, 1, 0);
        GL.TexCoord2(1f, 1f); GL.Vertex3(0, 0, 0);
        GL.TexCoord2(1f, 0f); GL.Vertex3(sizeXZ.X, 0, 0);
        GL.TexCoord2(0f, 0f); GL.Vertex3(sizeXZ.X, 0, -sizeXZ.Y);
        GL.TexCoord2(0f, 1f); GL.Vertex3(0, 0, -sizeXZ.Y);
        GL.End();
        GL.PopMatrix();

它显示了一个黑色的非纹理的四角体。当我添加一些光线时,纹理就会出现,但会消失一些四角体的颜色:

代码语言:javascript
复制
GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName));
GL.Begin(PrimitiveType.Quads);
GL.Normal3(0, 0, 1);
if (true) GL.Color4(0,1,0,1); // it appears to be the background color, not green
if (false) GL.TexCoord2(1f, 0f); GL.Vertex3(0, 0, 0);
if (false) GL.TexCoord2(1f, 1f); GL.Vertex3(3f, 0, 0);
if (false) GL.TexCoord2(0f, 1f); GL.Vertex3(3f, 3f, 0);
if (false) GL.TexCoord2(0f, 0f); GL.Vertex3(0, 3f, 0);
GL.Color4(1, 1, 1, 1);
GL.End();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 15:46:21

在您的程序中有两个问题:

1. Color3的使用

查看OpenTK Color3文档,您将注意到这个函数有两个重载:

代码语言:javascript
复制
Color3  (Double red, Double green, Double blue)
Color3  (SByte red, SByte green, SByte blue)

GL.Color3(1,1,1)给出一个黑色对象的原因是,它使用的是假定值在0,255范围内的SByte版本。因此,1是非常黑暗。注意,GL.Color3(1.0,1.0,1.0)调用双重重载。

2. GL_TEXTURE_ENV_MODE

默认情况下,这是设置为GL_MODULATE,这将纹理颜色与顶点颜色相乘。再加上1,这会让你的纹理消失。有关此问题的更多详细信息,请参阅here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27018654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档