OPENGL ES2.0如何不使用glActiveTexture而显示多个图片
2017-05-12 15:17
489 查看
https://www.oschina.net/question/253717_72107
用opengl es 2.0显示多个图片的话,我只会一种方式,先将图片生成纹理,然后用下面的方式渲染
虽然这种方法可以画出多个图片,但存在个问题,GL_TEXTURE0的最大值跟硬件有关,而标准的OPENGL ES2只有32个,难道说超过32个图片就不能画?
如果光是glBindTexture绑定纹理,不使用glActiveTexture的话,画出来的模型全是用同一个纹理。
求教一种可以绘制方法,不使用glActiveTexture,也可以画出多个图片。或者使用标准OPENGL ES 2.0接口并不使用OPENGL扩展属性前提下,显示多图片(超过32个)的方法。
OpenGL ES
Android NDK
举报分享
cut
发帖于5年前 6回/8K+阅
共有6个答案 最后回答: 4年前
按票数排序 显示最新答案
0
发现提的问题太简单呢还是太复杂了,还是太蛋疼了,怎么最近几个问题都没人答。不过这个问题我已经知道怎么解决了,顺便分享下。
原来在同一个framebuff下是可以直接用glBindTexture来选择纹理,但不同的framebuff下要使用glActiveTexture来设置不同的纹理空间做。哥又很SB的开了个多缓冲,结果只能通过这种SB的方式来显示。
--- 共有 1 条评论 ---
yanweimin7: 。。。,我现在也是bind多次,请问下,我有两张图,怎么只开一个缓冲。 2年前
评论(1)引用此答案举报
cut
5年前
0
看帖回帖是一种美德。评论(0)引用此答案举报
自由星空
5年前
0
贴纹理还好, 不知道怎么旋转,旋转了 其他的都变了,不知道怎么对单个纹理平移 ,没有gl10好用评论(0)引用此答案举报
hai046
4年前
0
纹理怎么会旋转啊,旋转的是被绑定多边形,好不好,shader代码里对多边形的定点使用翻转矩阵进行变换就转起来了,gl10神马滴都弱暴了,老拿着那out的技术不放没什么好处,现在手机gpu都是shader核的了
评论(0)引用此答案举报
cut
4年前
0
这为大侠,小弟最近在学习Android opengl es2.0的相关知识 ,想做个地图应用,以前用canvas技术做了个,但是绘制图片多了就很卡.在网上找了很多都没用很有用的资料,就画了一张图片出来.可是多张图片一直没思路,又不想用opengl es1.1的方法.这位大侠能不能给点资料或opengl es2.0的小示例给小弟研究下啊? 请发我QQ邮箱;468164865@QQ.com. 小弟在此感激不尽,谢谢了.!!
--- 共有 1 条评论 ---
cut: opengl官网有,我手上只有个蓝宝书的电子版的,网上一堆下的,那个也是opengl官网推荐的参考书,2.0以后跟1.0不一样的就是将矩阵变换,着色处理放到shader上做而已,有1.0的基础上手很快的。 4年前
评论(1)引用此答案举报
zhaowe...
4年前
0
画1张图跟画多张图是一样的,而且一个shader程序里能放几张纹理做sample是由你的显卡决定,并不是你想搞几张就几张,一般不是什么做多重纹理,纹理混合之类的效果shader程序一般不会弄几个纹理,所以为啥网上很多例子都是画一张图。
shader其实可以理解为一个自定义的绘图程序,比如说你画一张图,你首先写shader代码,该shader代码就是告诉显卡你的图片怎么画,然后你在c代码那边加载你的shader,然后绑定纹理,顶点,然后画出来,如果你画几张图只需要在加载完shader后,重复做绑定纹理,顶点,然后画出来这几个动作。(注意:这流程应该是绑定纹理,顶点,画;绑定纹理,顶点,画;....而不是绑定纹理,绑定纹理,顶点,顶点,画,画)
这个实例代码的话,其实最好就是去参与opengl es标准定制的芯片生产厂商那搜搜,比如英伟达,amd之类的,下面给你推荐个写的比较好的,而且周边工具都比较齐全的库,里面SDK所有的源代码都有,自己可以看看,个人觉得这个写的比英伟达上面的好,你可以去看下http://www.imgtec.com/powervr/insider/powervr-insider.asp现在苹果ipad,iphone以及三星很多机型都很用那个显示芯片,库里面带有齐全的demo程序,看完demo基本很多特效都会做。
用opengl es 2.0显示多个图片的话,我只会一种方式,先将图片生成纹理,然后用下面的方式渲染
// 第一张图 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, iTexID1); glUniform1i(ProgramID, 0); //....设置顶点 //.....glDrawArrays或者glDrawElements // 第二张图 glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, iTexID2); glUniform1i(ProgramID, 1); //....设置顶点 //.....glDrawArrays或者glDrawElements
虽然这种方法可以画出多个图片,但存在个问题,GL_TEXTURE0的最大值跟硬件有关,而标准的OPENGL ES2只有32个,难道说超过32个图片就不能画?
如果光是glBindTexture绑定纹理,不使用glActiveTexture的话,画出来的模型全是用同一个纹理。
求教一种可以绘制方法,不使用glActiveTexture,也可以画出多个图片。或者使用标准OPENGL ES 2.0接口并不使用OPENGL扩展属性前提下,显示多图片(超过32个)的方法。
OpenGL ES
Android NDK
举报分享
cut
发帖于5年前 6回/8K+阅
共有6个答案 最后回答: 4年前
按票数排序 显示最新答案
0
发现提的问题太简单呢还是太复杂了,还是太蛋疼了,怎么最近几个问题都没人答。不过这个问题我已经知道怎么解决了,顺便分享下。
原来在同一个framebuff下是可以直接用glBindTexture来选择纹理,但不同的framebuff下要使用glActiveTexture来设置不同的纹理空间做。哥又很SB的开了个多缓冲,结果只能通过这种SB的方式来显示。
--- 共有 1 条评论 ---
yanweimin7: 。。。,我现在也是bind多次,请问下,我有两张图,怎么只开一个缓冲。 2年前
评论(1)引用此答案举报
cut
5年前
0
看帖回帖是一种美德。评论(0)引用此答案举报
自由星空
5年前
0
贴纹理还好, 不知道怎么旋转,旋转了 其他的都变了,不知道怎么对单个纹理平移 ,没有gl10好用评论(0)引用此答案举报
hai046
4年前
0
引用来自“hai046”的答案
贴纹理还好, 不知道怎么旋转,旋转了 其他的都变了,不知道怎么对单个纹理平移 ,没有gl10好用纹理怎么会旋转啊,旋转的是被绑定多边形,好不好,shader代码里对多边形的定点使用翻转矩阵进行变换就转起来了,gl10神马滴都弱暴了,老拿着那out的技术不放没什么好处,现在手机gpu都是shader核的了
评论(0)引用此答案举报
cut
4年前
0
这为大侠,小弟最近在学习Android opengl es2.0的相关知识 ,想做个地图应用,以前用canvas技术做了个,但是绘制图片多了就很卡.在网上找了很多都没用很有用的资料,就画了一张图片出来.可是多张图片一直没思路,又不想用opengl es1.1的方法.这位大侠能不能给点资料或opengl es2.0的小示例给小弟研究下啊? 请发我QQ邮箱;468164865@QQ.com. 小弟在此感激不尽,谢谢了.!!
--- 共有 1 条评论 ---
cut: opengl官网有,我手上只有个蓝宝书的电子版的,网上一堆下的,那个也是opengl官网推荐的参考书,2.0以后跟1.0不一样的就是将矩阵变换,着色处理放到shader上做而已,有1.0的基础上手很快的。 4年前
评论(1)引用此答案举报
zhaowe...
4年前
0
引用来自“zhaowenhao0456”的答案
这为大侠,小弟最近在学习Android opengl es2.0的相关知识 ,想做个地图应用,以前用canvas技术做了个,但是绘制图片多了就很卡.在网上找了很多都没用很有用的资料,就画了一张图片出来.可是多张图片一直没思路,又不想用opengl es1.1的方法.这位大侠能不能给点资料或opengl es2.0的小示例给小弟研究下啊? 请发我QQ邮箱;468164865@QQ.com. 小弟在此感激不尽,谢谢了.!!画1张图跟画多张图是一样的,而且一个shader程序里能放几张纹理做sample是由你的显卡决定,并不是你想搞几张就几张,一般不是什么做多重纹理,纹理混合之类的效果shader程序一般不会弄几个纹理,所以为啥网上很多例子都是画一张图。
shader其实可以理解为一个自定义的绘图程序,比如说你画一张图,你首先写shader代码,该shader代码就是告诉显卡你的图片怎么画,然后你在c代码那边加载你的shader,然后绑定纹理,顶点,然后画出来,如果你画几张图只需要在加载完shader后,重复做绑定纹理,顶点,然后画出来这几个动作。(注意:这流程应该是绑定纹理,顶点,画;绑定纹理,顶点,画;....而不是绑定纹理,绑定纹理,顶点,顶点,画,画)
这个实例代码的话,其实最好就是去参与opengl es标准定制的芯片生产厂商那搜搜,比如英伟达,amd之类的,下面给你推荐个写的比较好的,而且周边工具都比较齐全的库,里面SDK所有的源代码都有,自己可以看看,个人觉得这个写的比英伟达上面的好,你可以去看下http://www.imgtec.com/powervr/insider/powervr-insider.asp现在苹果ipad,iphone以及三星很多机型都很用那个显示芯片,库里面带有齐全的demo程序,看完demo基本很多特效都会做。
相关文章推荐
- 使用activePDF Toolkit如何将图片装换为PDF
- 如何使用JS等比例改变显示图片的大小
- 使用ViwePager显示图片时如何防止内存泄露。
- 如何使用SOIL在VS2012的 C++环境下显示图片
- 关于如何使用websocket 接收并显示图片或者操作二进制
- WinCE如何使用PictureBox的Image属性通过图片路径显示图片
- 教你如何使用libpng显示png图片
- 如何在Android上使用OpenGL ES 2.0绘制点。
- 使用mmit进行移动开发,如何在一行同时显示图片和文字.
- android中用GLSurfaceview和opengl es2.0显示图片,图片无法正常显示
- 【OpenGL ES 2.0】如何显示出非2的N次幂的贴图。(NPOT)
- 如何使用SOIL在VS2012的 C++环境下显示图片
- Opengl es2.0 glEnable(GL_TEXTURE_2D)报错 GL_INVALID_ENUM
- 【循序渐进地学好OpenCV&4】使用2.0的API显示图片以及OpenCV的自动化内存管理
- 一个可以显示图片(包括GIF动画)的ATL控件,以及在RichEdit中如何使用此控件插入图片
- 如何在web项目中使用jfreechart和显示硬盘上指定路径上的图片
- OpenGL蓝宝书第六章代码疑虑:为什么使用了GL_TEXTURE_1D??纹理和顶点间的映射是如何实现?
- HTML如何使用一张图片做背景只显示一次
- 关于如何使用websocket 接收并显示图片或者操作二进制
- 关于如何使用websocket 接收并显示图片或者操作二进制