作者md9830415 (DavidHsu)
看板GameDesign
标题[程式] 分离轴碰撞检测的笔记与一些综合问题
时间Tue Apr 27 09:46:45 2021
这篇是之前写的笔记教学文章"游戏中的碰撞检测",最近网站挂掉重新更新部落格到hugo
文章连结:
https://davidhsu666.com/archives/gamecollisiondetection
运行效果:
https://i.imgur.com/xojIN67.gif
线上执行范例:
https://davidhsu666.com/downloads/Collision-MTV/versions/polygon-MTV-ver1.0-full/
---------
有了能用的碰撞处理後,尝试从零开始做了一个简易的2D游戏框架
主页面:
https://davidhsu666.com/archives/2dgame-nonename/
运行效果:
https://i.imgur.com/l39cxJ3.gif
https://i.imgur.com/AtOQPUv.gif
关於里面的物体,我是制作一个叫做Entity的本体,包含了所有需要的功能
然後让游戏中的物体都继承这个Entity,不管是玩家、敌人、地图的每块Tile都是继承这
个Entity
再给这些Entity加入一个"事件触发器",功能是能指定特定的物体,并在每次更新的时候
对指定的物体执行事件内容
像是人物与地图障碍物的碰撞(具体如网页所写)
当时会想做事件触发器是为了解决上下坡不同碰撞层的问题:
https://i.imgur.com/oHtvDy5.gif
在下坡处设定是碰到就让玩家Z-index减少,上坡处则是增加,以此来处理2D地图中多层
地图的碰撞问题
也想说如果未来加入NPC,也许能在NPC脚下放一个触发器,就可以做到当玩家靠近时自动
跟玩家对话之类的效果
这部份想问:
我目前的做法会有什麽问题、该怎麽做会更好之类的,或是其他游戏引擎大概是怎麽处理
这些功能的这样
如果想继续扩充的话,有什麽建议,或是推荐的参考资源
---------
之前发文询问大学自学方向的时候受到很多帮助,也了解了很多图学的学习方向
目前专题想尝试从零开始做软体渲染器,然後看能不能结合上面的游戏框架
用C++来做一个非常简易的创世神这样,都从零开始是想说学到的比较完整
https://github.com/beadx6ggwp/RenderLearningPlan
目前遇到一个不晓得该不该处理的问题
运行效果:
https://i.imgur.com/EhAY1GR.gif
如上图的GIF,目前使用Win32的HBITMAP来做所有像素操作
但就算使用Release来编译,因为只有纯CPU运算,加上没有多核多执行续的执行
渲染的帧数只有50出头,但这只是渲染一个模型而已,感觉这样的效能不是很好
1. 想问该往哪个方向查资料才能做到顺畅运行,我目前知道的是两种
一. 做出基本功能的Shader,然後用CPU多核心多执行续来运算每个像素
二. 想办法让我的软体渲染程式可以使用显示卡运算
但具体都有点不晓得该怎麽做,还是就直接放弃自干软体渲染器,改用OpenGL
2. 投影转换,Z-buffer中1/z的非线性问题,只知道会扭曲贴图图案,但具体解决的方法
看了很多篇都不太理解
---
不好意思有些问题思考的没有清楚,想抱持侥幸的方式透过分享文章来顺便问问题
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.165.98.179 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1619488009.A.D13.html
1F:推 Unity: 1. 建议直接用 OpenGL 或是 DX, GPU 比 CPU 快上很多, 除非 04/27 09:56
2F:→ Unity: 你想土炮, 这样的话你可以考虑用 OpenCL 或是 Cuda, 总之 04/27 09:57
3F:→ Unity: 要用 GPU 做, 纯用 CPU 本来就没办法做到很快 (平行化问题) 04/27 09:57
4F:推 Unity: 2. 看起来你目前的摄影机是用 Orthographic, 这样你应该比 04/27 10:10
5F:→ Unity: 较遇不到投影造成的变形 04/27 10:10
原来OpenCL跟Cuda是这样用,了解了,感谢
6F:推 hodsala: 以学习了解为目的来个自干软体渲染器合理 但以顺畅运行 04/27 10:49
7F:→ hodsala: 为目的的话 舍弃为了顺畅运行而发展几十年的硬体加速方 04/27 10:51
8F:→ hodsala: 案就比较怪了 04/27 10:51
9F:推 hodsala: 因为你的软体方案也是 现在已经标准化成硬体的流程呀 04/27 11:03
10F:推 hodsala: 1-一 说得通,也可以这样做, 但就很怪除非验证所学或很 04/27 11:31
11F:→ hodsala: 特殊的目的 不然不会这样做吧 shader是为了让你取代硬 04/27 11:33
12F:→ hodsala: 体绘图流程, 但你不是硬体呀 没有固定绘图流程需要被 04/27 11:35
13F:→ hodsala: 可程式化啊 因为你本来就可程式化 04/27 11:35
14F:嘘 hodsala: 1-二 用openGL或DX就是和显示卡沟通的方法呀 但照你的 04/27 11:40
15F:→ hodsala: 逻辑 你可能可以写个不转换的vertex shader和直出的pixel 04/27 11:41
16F:→ hodsala: shader 然後把这些都提前到你的软体里弄 就..只是可以 04/27 11:42
17F:推 hodsala: 也许你想写模拟NVIDIA工程师的steam游戏 这一切就合理了 04/27 11:45
18F:→ hodsala: 纯按到嘘 没有什麽意思 04/27 11:46
原本单纯觉得渲染效率太差,如果实作了比较进阶的贴图方式,或读大模型时会跑不动
有点像是希望加速一点点让比较大的模型读进来能动这样,不然读大模型画面都卡住
对的,原本想像中自制软体渲染,就有点像你说的模拟NV工程师,但後面觉得现在实力没办法驾驭这麽大的项目
看完留言後感觉我的想法有点矛盾,可能我还是先专心学好图学原理实作各种功能
先不要在意FPS,等真的需要效率的时候再直接转OpenGL
感谢
19F:推 Bencrie: 1/z 非线性那个就 perspective division 吧 04/27 16:48
20F:推 Bencrie: 1. 其实你用 cl/cuda 画完还是要用 CPU 贴到视窗上 04/27 16:54
21F:→ Bencrie: 至少 Windows 要啦。Linux 也许靠 eglimage + dmabuf 04/27 16:54
23F:→ oopFoo: perspective texture。 04/27 16:56
24F:→ Bencrie: 不然就是画完用 GL/D3D 贴输出 04/27 16:56
26F:→ oopFoo: 不过你知道cpu渲染跟gpu渲染的速度差异吗?万倍以上 04/27 17:00
27F:→ oopFoo: 除非你要raytracer这种比较适合cpu的渲染。 04/27 17:01
30F:→ oopFoo: NavMesh,参考看看。如果你要3d,现在考虑转SAT到GJK。 04/27 17:04
31F:→ oopFoo: gjk其实没那麽难。 04/27 17:05
了解了,这些资料对我非常有帮助,感谢
※ 编辑: md9830415 (114.41.131.43 台湾), 04/29/2021 09:26:25
32F:推 newhandfun: 推,高手云集 05/03 20:34