首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用glDrawPixels将图片渲染为背景

如何使用glDrawPixels将图片渲染为背景
EN

Stack Overflow用户
提问于 2012-05-22 20:53:32
回答 1查看 3.3K关注 0票数 1

事情是这样的:我想加载一张图片作为整个视口中填充的背景。无论相机朝向何处,此背景都应始终朝向相机。首先,我很自然地认为使用纹理作为背景,我的代码如下:

代码语言:javascript
复制
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,1,0,1,0,1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

glBindTexture(GL_TEXTURE_2D, myimage.GetID());
glEnable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(1, 0);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(0, 1);
glEnd();

glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);

相信我,myimage是一个CIMAGE类,可以将图片加载到纹理中,它工作得很好。然而,由于一些未知的原因,我的应用程序不能将纹理加载到矩形中。(我在这里click描述了这个问题)因此,我只能在我的视口周围看到一个矩形框架。

所以,我想出了另一个解决方案。

我使用glDrawPixels而不是纹理。我的代码如下:

代码语言:javascript
复制
glRasterPos2i(0, 0);
glDrawPixels(myimage.GetWidth(), myimage.GetHeight(), (myimage.GetBPP() == 24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE, 
    myimage.GetData());

图片出现了!然而,照片并不总是面对着我的相机。它只出现在特定的方向上。你知道,就像场景中的物体,但不是背景总是面对相机。

所以有人知道如何使用glDrawPixels来实现背景吗?

顺便说一句,我认为这个背景不是3D场景中放置的对象。因此,广告牌可能不是我的解决方案。同样,此背景填充了整个视口,并且始终面向相机。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 22:08:21

纹理加载可能不起作用的原因之一是它可能没有二维幂。尝试一个256x256的正方形纹理(或类似的纹理),看看这是否是问题所在。有关Rectangle Textures的更多信息,请查看此处。

回到你的背景问题-正确的方法是

  1. 设置填充整个屏幕的正交投影/视口。

glViewport(0,0,nw,nh);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0,1,0,1,1);glMatrixMode(GL_MODELVIEW);

  • Disable depth testing

  • 使用已加载的纹理/纹理矩形绘制全屏四边形。

glBegin(GL_QUADS);glVertex2f(0,0);glVertex2f(1,0);glVertex2f(1,1);glVertex2f(0,1);glEnd();

  • 设置常规投影/模型视图并继续。

希望这能有所帮助!

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

https://stackoverflow.com/questions/10702445

复制
相关文章

相似问题

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