GameDesign 板


LINE

有个问题想请教板上的各位前辈。 小弟我写 MFC & OpenGL 程式, 目前想做一个复杂多边形区域内交集物体之选取功能, 但GOOGLE很久就是没找到相关功能技术讨论文章。 目前先以Tessellation方式画出复杂多边形, 然後接下来我要把复杂多边形的区域纪录到Stencil Buffer中, 但问题来了, 我写了Unit Test Code去检查我的Stencil Buffer纪录情况, 发现结果不是我想像的。 我以全白色的QUAD覆盖在整个绘图区中, 并且透过Stencil Test来只画出复杂多边形区域。 绘图结果如下图连结,黄色Stipple区+白色区便是完整的复杂多边形区域, 各位可以发现,通过Stencil Test区域只有小於绘图区的一个矩形区块。 https://picasaweb.google.com/112165426532756160107/StencilQz#5627339704475169794 我不懂为何会变成如此结果,目前百思不得其解。 是因为Stencil Buffer我必须要在Resize时去同步它的长与宽吗? 但我记得不用呀(Stencil虽然没有很熟但以前做过没碰到这个问题)。 现在先以制作Stencil Mask & 执行Stencil Test时的Projection下手来Debug, 但一样还没找出错误(已确认两个时间点Projection完全一样)。 可否请板上的高手来替我解惑呢? 感谢各位大大不吝分享。 下方是我的相关Test Code ----------------------------------------------------- // 2d projection gluOrtho2D(-Ortho2dRange.x, Ortho2dRange.x, -Ortho2dRange.y, Ortho2dRange.y); .... .... // do polygon tessellation glColor3f(1.0, 1.0, 0.5); gluTessBeginPolygon(glTessel, NULL); gluTessBeginContour(glTessel); for(size_t i=0 ; i<num ; i++) gluTessVertex(glTessel, TessPolygon[i].m_Vector, TessPolygon[i].m_Vector); gluTessEndContour(glTessel); gluTessEndPolygon(glTessel); // make mask of the polygon tessellation on the stencil buffer // write nothing to color buffer glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glEnable(GL_STENCIL_TEST); glClearStencil(0); glClear(GL_STENCIL_BUFFER_BIT); glStencilFunc(GL_ALWAYS, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); // start record to the stencil buffer gluTessBeginPolygon(glTessel, NULL); gluTessBeginContour(glTessel); for(size_t i=0 ; i<num ; i++) gluTessVertex(glTessel, TessPolygon[i].m_Vector, TessPolygon[i].m_Vector); gluTessEndContour(glTessel); gluTessEndPolygon(glTessel); // reset color buffer writing glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // draw test quad to find out the area of the stencil mask glStencilFunc(GL_EQUAL, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glColor3f(1.0, 1.0, 1.0); glBegin(GL_QUADS); glVertex2i(-Ortho2dRange.x, -Ortho2dRange.y); glVertex2i(Ortho2dRange.x, -Ortho2dRange.y); glVertex2i(Ortho2dRange.x, Ortho2dRange.y); glVertex2i(-Ortho2dRange.x, Ortho2dRange.y); glEnd(); glDisable(GL_STENCIL_TEST); ----------------------------------------------------- --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.228.167
1F:推 NDark:为什麽你不用 select buffer 07/09 21:31
2F:→ riveranb:那个我已经做完了..SelectBuffer只能做矩形选取不是吗? 07/09 21:33
3F:→ riveranb:我目前要做的是complex(concave) shape selection 07/09 21:34
※ 编辑: riveranb 来自: 61.230.228.167 (07/09 21:43)
4F:推 NDark:那个天才告诉你他只能做矩形的? 07/09 21:41
5F:→ riveranb:那要如何设定复杂多边形区域? 07/09 21:43
6F:推 NDark:http://tinyurl.com/3owkfc7 07/09 21:45
7F:→ riveranb:不好意思该文件看完了,但似乎没找到我要的资讯? 07/09 22:08
8F:→ riveranb:select-buffer由gluPickMatrix 设定选取区.. 07/09 22:08
9F:→ riveranb:因此我一直认为Select-Buffer只能做矩形选取 07/09 22:08
10F:→ riveranb:比较可能用到的技术可能就是unique color render这方面 07/09 22:10
11F:→ riveranb:但这个似乎跟Select Buffer无太多正相关? 07/09 22:10
12F:推 NDark:gluPickMatrix 只是决定点选点大小而已. 07/09 22:11
13F:→ NDark:我通常都设1x1 07/09 22:11
14F:→ riveranb:对..所以gluPickMatrix只能决定mxn的区域不是吗 07/09 22:12
15F:→ riveranb:这跟我要的是arbitrary shape area的定义似乎不相同 07/09 22:12
16F:推 NDark:被选取物又不限一定要MxN 07/09 22:14
17F:→ NDark:你的点选笔触为什麽要是多边形的? 07/09 22:14
18F:→ riveranb:你没弄懂我的意思..我想单一次设定就达到目标 07/09 22:14
19F:→ riveranb:如果要用gluPickMatrix做的话..那不是要做mxn次的1x1点? 07/09 22:15
20F:→ riveranb:如果我误会你的意思那不好意思 07/09 22:15
21F:→ riveranb:客户需求 -__- 我也不想做这种麻烦的功能 07/09 22:15
22F:→ NDark:"复杂多边型选取功能" 目的是 "选一个多边形" 没错吧? 07/09 22:16
23F:→ riveranb:不对..是选取"与复杂形状有交集"的物体 07/09 22:22
※ 编辑: riveranb 来自: 61.230.228.167 (07/09 22:23)
24F:→ riveranb:原文讲的不够清楚, 已更新 07/09 22:24
25F:推 NDark:还是看不懂你的需求XD 07/09 22:26
26F:→ riveranb:那就先想像成可以用圆形来选取形状内交集到的物体..ok吗? 07/09 22:34
27F:推 epephanylo:类似挖冰其林的动作嘛? 07/10 03:06
28F:推 ddavid:他是想说,当他的例如滑鼠游标是可以不规则形状的,而且这 07/10 03:30
29F:→ ddavid:形状上的每一点指着的东西「全部」都要选得到。是这样吧? 07/10 03:30
30F:→ ddavid:而且他是要确实的形状,所以不能使用外切大方框来简化。 07/10 03:33
31F:→ ddavid:总之,他要的不是「被选物可不规则」,而是「选取用的游标 07/10 03:34
32F:→ ddavid:可不规则外形」吧,我想。 07/10 03:34
33F:→ riveranb:楼上正解 07/10 07:03
34F:→ riveranb:其实如果有人知到我的stencil test为什麽错也请告诉我 07/10 07:04
35F:→ riveranb:目前我正苦恼stencil哪里做错了..囧 07/10 07:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP