当前位置:  开发笔记 > 编程语言 > 正文

如何在OpenGL中绘制纹理

如何解决《如何在OpenGL中绘制纹理》经验,为你挑选了2个好方法。

现在我的OpenGL应用程序变得越来越大,越来越复杂,我注意到它在像上网本这样的低端系统上也变得有点慢.在Java中,我能够通过绘制到BufferedImage来解决这个问题,然后将其绘制到屏幕上,并在一段时间内更新缓存的渲染.我将如何使用C++在OpenGL中执行此操作?

我找到了一些指南,但它们似乎只适用于较新的硬件/特定Nvidia卡.由于缓存的渲染操作只会偶尔更新一次,因此我可以牺牲速度来实现兼容性.

glBegin(GL_QUADS);
       setColor(DARK_BLUE); 
       glVertex2f(0, 0);                  //TL
       glVertex2f(appWidth, 0);           //TR
       setColor(LIGHT_BLUE);
       glVertex2f(appWidth, appHeight);   //BR
       glVertex2f(0, appHeight);          //BR
glEnd();

这是我特别关注的事情.占据整个屏幕的渐变每秒重新绘制多次.如何将其缓存到纹理然后只绘制该纹理以提高性能?

另外,我在Java中使用的一个技巧是将其渲染为1 X高度纹理,然后将其缩放到width x height以提高性能并降低内存使用量.openGL有这么一招吗?



1> UncleZeiv..:

如果您出于兼容性原因不想使用Framebuffer对象(但它们可以广泛使用),您也不希望使用旧版(和非可移植版)Pbuffers.这使您可以使用glReadPixels读取帧缓冲区的内容,并使用glTexImage2D创建包含该数据的新纹理.

让我补充一点,我并不认为在你的情况下你会获得更多.在屏幕上绘制纹理要求每个像素至少需要纹理元素访问,如果替代方案只是像现在一样插入颜色,那么这并不是一个巨大的节省!



2> user34619..:

我真诚地怀疑从纹理绘制比绘制渐变更少工作.

在绘制渐变时:

在每个像素处插入颜色

在绘制纹理时:

纹理坐标在每个像素处插值

在每个像素处仍然插入颜色

每个像素的纹理查找

将查找颜色与当前颜色相乘

并非这些都是缓慢的,但绘制无纹理的多边形几乎和它一样快.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有