作者littleshan (我要加入剑道社!)
看板GameDesign
标题Re: [程式] 如何用OpenGL切割图片?
时间Tue Feb 20 18:16:49 2007
※ 引述《zergaiur (aiur)》之铭言:
: 1.
: 读进一张图,图片有该人物的所有资讯的小图
: 比方说主角的 上下左右,走路,攻击
: 然後切割出我想要使用的部份,而且不会浪费Show图的时间
: 比方一个会达成目的,但是很浪费资源的写法~
: 读入一张图後
: glBegin(GL_POLYGON);
: glTexCoord2f(left/(float)image.W, 1.0f-top/(float)image.H);
: glVertex2f((GLfloat)x, (GLfloat)y);
: glTexCoord2f(right/(float)image.W,1.0f-top/(float)image.H);
: glVertex2f((GLfloat)x+right-left, (GLfloat)y);
: glTexCoord2f(right/(float)image.W,1.0f-bottom/(float)image.H);
: glVertex2f((GLfloat)x+right-left, (GLfloat)y+bottom-top);
: glTexCoord2f(left/(float)image.W, 1.0f-bottom/(float)image.H);
: glVertex2f((GLfloat)x, (GLfloat)y+bottom-top);
: glEnd();
: 这是利用glTexCoord来切割图片....但是每Show一张小图片,它所花的时间
: 就是Show整张太图片的时间~
不是吧
把这张小图画出来的时间大致由以下几个因素决定:
1. 小图在萤幕上的面积
2. 你使用的 texture filter
3. 绘图硬体的能力 (texture unit 的数量与速度)
和整张 texture 的大小并没有很明显的关系
用 texture coordinate 来切图是很有效也很常见的做法
不过你这样的写法的确还有进步空间
那就是每张小图的 texture coordinate 都是固定的
所以你没必要每次 render 时都重新计算一次
而且使用 glBegin() / glEnd() 画东西的效率极差
用 vertex array 会比较快,或是 vbo
: 2.
: 有两张图片, A 跟 B
: 我要把 A 切割成1000条, B 也是一样
: 然後 A 取单数条, B 取双数条
: 然後把 A 的单数跟 B 的双数条再并成一张图片
: 不知道哪位大大有这方面的经验或是写法可以提供参考
: 谢谢 @@
这很简单吧
如果你希望用显示卡加速
我想到的方法是用 multi-texture
或是写 shader 也可以轻松解决
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.170.54.89