作者xtxml (赤木巧☠)
看板GameDesign
标题[程式] 请教一个关於2D透明绘图的问题
时间Mon Oct 13 12:39:11 2014
工作之余做一点小练习,想写一个简单的2D graphic engine,不过碰上一点问题如下。
A和B的构造如下图,A包含了A1和A2,A2盖在A1上。
然後我想做的效果是 A * 0.5(alpha)之後盖到B上面。
http://i.imgur.com/T322qyt.png
这边如果只是简单地把A1 * 0.5(alpha)、 A2 * 0.5(alpha),贴到B上面,
会出现不想出现的效果如左图,但实际上我想呈现的是右边的效果。
http://i.imgur.com/ZQ0hJak.png
右边当初我是使用RTT(render to texture)的方式完成,
不过只要有一个这类的物件就要多一次这样的步骤,使用到大量的draw call,
物件一多之後速度变慢得蛮严重的。
想请问一下各位先进,类似的问题有没有效能比较好的方式可以解决呢?
(如果可以的话,给个关键字也会对我帮助很大,
因为这个问题不知道该怎麽描述,连google都很难找orz)
感谢:)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.131.77
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/GameDesign/M.1413175154.A.064.html
※ 编辑: xtxml (125.227.131.77), 10/13/2014 12:40:47
1F:→ cowbaying: 怎麽我看两边一样... 10/13 12:53
2F:→ azureblaze: 他的图很失败只是示意而已没照颜色画XD 10/13 12:57
3F:→ azureblaze: 如果可以控制顺序用depth/stencil buffer可以控制 10/13 12:58
图片会经过排序,所以顺序可以控制,从後排到前,或从前排到後。
想请教具体怎麽用stencil buffer来解决呢?感谢:)
感谢支援:)
5F:→ xtxml: 抱歉我的示意图很糟,请看文字的部分 10/13 13:08
※ 编辑: xtxml (125.227.131.77), 10/13/2014 13:13:09
6F:→ azureblaze: 你可以画蓝色时同时画stencil,这样红色就画不上去 10/13 13:24
7F:→ xtxml: 就这个例子的话可以,但很多层"A"叠在一起的话该怎麽做呢? 10/13 13:35
8F:推 cowbaying: 引擎等级的话...我记得要先看你调色盘的形式 10/13 15:21
9F:→ cowbaying: 我是都用RGB 比较好理解 10/13 15:23
10F:→ KanoLoa: 我自己手刻的时候都先算好全部颜色再画... 10/13 16:40
11F:推 cowbaying: 楼上 不是本来就该先在BUFFER里算好再画吗? XDDD 10/13 16:42
12F:→ xtxml: 如果这个问题没有一个通用的解法,那也只能放弃了Q.Q 10/13 16:44
13F:推 cowbaying: 我觉得你可以去看一下OPENGL的SHADER跟BUFFER 10/13 16:46
14F:→ KanoLoa: 小的无知,如果不是用叠的,那效能问题是出在? 10/13 16:47
15F:→ xtxml: 看过不少shader范例,但是始终没有看到解决类似问题的orz 10/13 16:48
16F:→ xtxml: 我自己测起来,瓶颈是卡在draw call、RTT切换贴图的次数 10/13 16:50
17F:推 cowbaying: 基本上 不管你叠多少层东西 只会产生一次draw call 10/13 16:55
18F:推 cowbaying: 看样子你是一张图call了4次 10/13 16:55
19F:→ cowbaying: 所以结果才会错误 10/13 16:55
20F:推 cowbaying: 从AZ的图看的出来左边的紫色是红+蓝造成的 10/13 16:58
21F:→ cowbaying: 不过怎麽感觉我好像离题了... 10/13 16:59
22F:→ cowbaying: 看看depthmask是否符合你要的 10/13 17:08
23F:→ xtxml: 嗯嗯,我在看看好了,感谢 10/13 18:05