问题标签 [quake]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
networking - 对于极少量数据(3-4 kib?)的最佳压缩库是什么?
我正在开发一个从 Quake 2 松散地继承下来的游戏引擎,添加了一些诸如脚本效果之类的东西(允许服务器向客户端详细指定特殊效果,而不是只有客户端能够使用的有限数量的硬编码效果的。)这是网络效率与灵活性的权衡。
我遇到了一个有趣的障碍。看,最大数据包大小是 2800 字节,每个客户端每帧只能发出一个。
这是做“火花”效果的脚本(可能对子弹撞击火花、电击等有好处) http://pastebin.com/m7acdf519(如果您不理解,请不要出汗;这是我制作的自定义语法,与我提出的问题无关。)
我已尽一切可能缩小该脚本的大小。我什至将变量名简化为单个字母。但结果正好是 405 个字节。这意味着每帧最多可以容纳 6 个。我还想到了一些服务器端更改,可能会再减少 12 个,而协议更改可能会再节省 6 个。虽然节省会因您使用的脚本而异。
然而,在这 387 个字节中,我估计只有 41 个字节在效果的多次使用中是唯一的。换句话说,这是压缩的主要候选对象。
恰好 R1Q2(具有扩展网络协议的向后兼容 Quake 2 引擎)具有 Zlib 压缩代码。我可以解除此代码,或者至少密切关注它作为参考。
但是 Zlib 一定是这里的最佳选择吗?我能想到至少一种替代方案,LZMA,而且很容易有更多。
要求:
- 必须非常快(如果每秒运行超过 100 次,性能损失必须非常小。)
- 必须将尽可能多的数据塞进 2800 字节
- 元数据占用空间小
- GPL 兼容
Zlib 看起来不错,但还有什么更好的吗?请记住,这些代码还没有被合并,所以有足够的实验空间。
谢谢,-马克斯
编辑:感谢那些建议将脚本编译成字节码的人。我应该说清楚——是的,我正在这样做。如果你喜欢你可以在我的网站上浏览相关的源代码,虽然它仍然没有“修饰”。
这是服务器端代码:
Lua 组件:http
://meliaserlow.dyndns.tv:8000/alienarena/lua_source/lua/scriptedfx.lua
C 组件: http://meliaserlow.dyndns.tv:8000/alienarena/ lua_source /game/g_scriptedfx.c
对于我发布的特定示例脚本,这将 1172 字节的源代码缩小到 405 字节——仍然不够小。(请记住,我想将尽可能多的这些内容放入 2800 字节中!)
EDIT2:不能保证任何给定的数据包都会到达。每个数据包都应该包含“世界状态”,而不依赖于先前数据包中传达的信息。通常,这些脚本将用于传达“眼睛糖果”。如果没有空间,它就会从数据包中丢弃,这没什么大不了的。但是,如果掉了太多,事情开始在视觉上看起来很奇怪,这是不可取的。
iphone - 用于将 Autodesk Maya 中的动画 3D 角色导出为 Quake MD2 的文件转换器
我想知道是否有人知道将几何体/纹理导出为 Quake MD2 的操纵动画角色的方法?我正在为移动设备开发一个应用程序,我发现 MD2 非常适合轻量级 OpenGL 渲染。我有几个动画角色,我想将它们从 Maya 导出为 MD2。以下是我尝试过的一些事情:
将 FBX 导出到 3D Studio Max 并使用 QTip 插件——这可行,但前提是我将动画转换为点缓存 (pc2) 并将其带入 Max。当我这样做时,QTip 插件不支持点缓存节点,我得到的只是模型,没有动画
将 OBJ 序列导出到 Blender,从那里导出 MD2——我似乎无法让 Blender 将导入的 obj 序列编译为单个动画对象
将 FBX 导出到 Milkshape——maya 装备在此过程中被损坏
- 动画的烘焙点缓存、导出到 FBX、导入到 Milkshape —— 同样,Milkshape 不支持几何缓存,所以出现的只是一个静态角色。
我目前正在使用 blender MD2 导出脚本作为参考(但使用 C++ Maya API 重新编写)为 Maya 编写插件,但我只是想知道是否有人以前这样做过或有任何建议如何做到这一点.
此外,如果有人对在 OpenGL ES(Android 或 iPhone)设备上渲染单个动画角色的最佳格式有其他建议,我将不胜感激!我愿意尝试任何方法来让这些动画在设备上呈现
谢谢!
c - Quake 源代码中我无法理解的符号 (C)
我正在查看 Quake 1 GPL 代码,遇到了各种类似的头文件,我似乎不明白它们的目的或用途。它们看起来像某种表格,结构如下
在他们之前或之后没有任何东西。我知道他们定义了一些东西,但我从未在 C 中遇到过这种表示法。您可以阅读我在这里引用的头文件之一。
我的问题是:那些……是什么东西?ASM 实际上给我的问题比那些东西少。
3d - Doom 和 Quake 3D 渲染之间的区别
过去几周我一直在研究(旧的)3D 渲染技术,并且认为我现在对 Doom 中的 3D 渲染的工作方式有了相当的了解。它使用光线投射来渲染 3D 场景,使用精灵作为对象,因此不是“真正的”3D。它也不允许真正的向上/向下查看,只能通过 Y 剪切。
Quake 是 ID 的第一个“真正的”3D 引擎,具有可以从不同角度查看的对象并允许上下查看。
现在我在研究这些技术时经常听到这种“真正的”3D,但我无法清楚地解释这种真正的 3D 究竟意味着什么。Quake 渲染与 Doom 渲染有何不同?
Quake 世界是否使用 3D 顶点并且它们都是投影而不是交叉点的光线投射?
我很想听听对差异的明确解释!
PS 我知道 Quake 的源代码是可用的,但是 id 软件的 FTP 已经关闭了数周,我无法在其他任何地方找到它。如果有人知道在哪里可以找到它,请告诉我。
3d - Quake 3 门户和截锥体剔除
我正在尝试理解 Quake3 的源代码。
有谁知道(tr_world.c)文件中的函数 R_MarkLeaves() 在做什么?
我认为这与门户剔除有关吗?
我需要知道它是如何工作的,所以我也可以在我的代码中实现它以加快渲染速度。
c - 在 Quake 中使用 CreateEvent()
我很好奇 Quake 中 CreateEvent() 函数的使用。
我们在定义 WinMain() 的 c 文件中有以下全局:
在 WinMain() 函数本身中,我们看到:
如果创建失败,则游戏退出。
然后它出现在以下函数中:
最后在 Quit 函数中调用 CloseHandle(tevent)。
我不熟悉 WinAPI,所以这给我留下了两个问题。
- CreateEvent() 的使用返回什么?
- 这如何使 SleepUntilInput() 函数正常工作?
c# - 以 ^7 结尾的字符串
我使用 udp 套接字和字节数组在 C# 中向 quake 3 服务器发出 rcon 请求以进行发送和接收。
一切正常,除了当我请求服务器状态时,玩家名称字符串全部由 ^7 终止,如下所示:DeathMaster^7。
rcon 命令返回的其他字符串都没有这个问题,所以我对可能出现的问题感到困惑。
如果你知道,请告诉我。
python - 我应该使用哪种技术来开发这款鱼眼透视游戏?
我打算开发一款 3D 游戏,玩家以 3D 第一人称视角走在迷宫中,收集东西并逃离怪物。游戏本身很简单,但由于它不是为了娱乐,而是为了生物实验,所以它有一些具体的特点:
我们将图形投影到3台投影仪的球形屏幕上,所以图形应该是鱼眼变换,并且可以很容易地进一步变形(处理投影仪之间的合并)。
应该有记录数据的功能,比如玩家的路径,怪物出现的时间点等。所有的事件都应该是可记录的。
游戏程序可以通过 USB与外部设备进行交互。例如,每当玩家按下某个键时,程序都会告诉 Arduino 板做某事。
在我的调查中,我找到了三个候选工具链来开发这样的游戏:
在 Quake3 引擎+ Fisheye Quake上开发一个 MOD 。我认为的问题是 Quake3 在虚拟机上运行,那么是否可以实现上面的功能 2 和 3?
Panda3D + FisheyeLens API
PyOpenGL。这是最灵活的方式,但我认为工作量最大。
我对 C/C++/Python 很熟悉,但这是我第一次开发 3D 游戏。我的问题是哪个工具链最适合这个项目(或任何其他好的选择)?我会遇到什么问题?
animation - 将动画 3D 模型转换为 Quake 2 的模型
我即将创建一个增强现实应用程序,它需要用动画渲染 3d 模型。将模型导出为旧地震 (.md2) 格式的最佳方式/插件或软件是什么?
我想使用流行的建模软件,如 3Ds MAX、Maya 或 Blender。我在整个互联网上进行了搜索,但我只找到了一些我难以使用的插件。
有什么商业工具吗?我需要一个很好的支持。