SDL OpenGL渲染问题
SDL OpenGL Rendering Issue
我只是学习如何使用SDL和openGL。我已经在SDLTutorials.com上看了教程。我现在正尝试更进一步,为应用程序创建一个加载屏幕;一个面向对象菜单系统。
我从非常简单的开始进行测试。我通过纹理类完成了窗口的主背景。这里定义了两个相关函数:
void Texture::Bind() {
glBindTexture(GL_TEXTURE_2D, TextureID);
}
void Texture::RenderQuad(int X, int Y, int Width, int Height) {
Bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(X, Y, 0);
glTexCoord2f(1, 0); glVertex3f(X + Width, Y, 0);
glTexCoord2f(1, 1); glVertex3f(X + Width, Y + Height, 0);
glTexCoord2f(0, 1); glVertex3f(X, Y + Height, 0);
glEnd();
}
我还创建了一个菜单类,它基本上是系统中创建的任何菜单的父类,要开发的类就像单击按钮或编辑框。到目前为止,类Menu中唯一相关的函数是:
void Menu::OnRender() {
if( Visible ) {
if(MenuTexture == NULL) {
glColor4f(1.,G,B,A);
glBegin(GL_QUADS);
glVertex2d(X, Y);
glVertex2d(X+Width,Y);
glVertex2d(X+Width,Y+Height);
glVertex2d(X,Y+Height);
glEnd();
}else{
MenuTexture->RenderQuad(X,Y,Width,Height);
}
}
}
最后,我的应用程序创建了一个纹理,它绑定到整个窗口。也就是背景。
void App::OnRender() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
MainScreen.RenderQuad(0,0,winWidth,winHeight); //Texture Object with bkg.jpg
MainMenu.OnRender(); //Menu object to be 150x300 and all black
SDL_GL_SwapBuffers();
}
然后我创建一个菜单项,并尝试在背景上绘制它。如果我保持初始化的颜色为黑色,整个屏幕几乎立即变成黑色:我有一个帧可能是第一个循环通过菜单,黑色方块被放置在窗口,然后它变成黑色。如果我将红色设置为1.0,那么整个图片上就会有某种红色滤镜,菜单框会画出一个不透明的红色方块。
我已经通过几个如何渲染的例子,但我一定错过了一些东西。本质上,如果我们把它放在正在做的事情的直线上,我将纹理绑定到一个表面,定义表面的坐标和纹理绑定。然后我渲染一个四边形。我把颜色调用放在菜单的glBegin()中,定义了所有4个顶点的颜色。
感谢我选择的答案:这解决了问题。然而,它没有渲染菜单对象与正确的颜色,直到我返回它调制。我不确定,我会尝试一下,并阅读相关资料来了解它。谢谢你!
(解决)仅对App::OnRender()
:
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
MainScreen.RenderQuad(0,0,winWidth,winHeight);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
MainMenu.OnRender();
GL_TEXTURE_ENV_MODE
默认为GL_MODULATE
,将传入的文本值乘以当前颜色。
如果当前颜色是黑色(RGB(0,0,0)
),那么这将渲染你所有的纹理黑色。单通道颜色相同:RGB(1,0,0) * RGB(x,y,z) == RGB(x,0,0)
.
尝试使用GL_DECAL
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 将旧管道转换为现代 openGL 时出现问题
- Qt OpenGL 渲染到纹理性能问题
- 我在 OpenGL 中显示图像时遇到问题
- OpenGL 相机移动程序顶点着色器问题
- Opengl问题:很可能是简单的纹理问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- OpenGL中使用Freetype进行字体渲染的问题不起作用
- 如何在 Opengl 中使用多个纹理解决此问题
- 在 opengl 中翻译相机时遇到问题
- 使用 OpenGL .obj 法线时出现问题
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- opengl 飞行模拟器应用程序中的文本呈现问题
- OpenGL在Ortho和特点问题之间切换
- 绘制的 OpenGL 点消失,绘制调用和交换缓冲区问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- 显示素材问题(opengl)
- 聚光灯问题OpenGL