我是开源游戏Bitfighter的开发者.根据以下SO帖子,我们使用优秀的"三角"库进行网格区生成,以便与我们的游戏内AI(机器人)一起使用:
然而,当我们想要为Debian打包我们的游戏时,我们遇到了一个小问题 - 使用'Triangle'库将使我们的游戏被视为'非自由'.
我们对"三角"图书馆的表现非常满意,并不真的想放弃它; 但是,我们也不喜欢处理许可证问题.因此,我们已着手寻找一种合适的,允许许可的替代品,它可以在稳健性和速度方面与"三角形"相匹配.
我们正在寻找一个C或C++库,用于将大型复杂区域划分为三角形,可以处理以任何方式放置在一起的任何类型的不规则多边形以及孔.稳健性是我们的首要需求,速度几乎同样重要.
我找到了poly2tri,但是它遇到了一个错误,它无法处理具有重合边的多边形.
我们已经找到了几个库,但似乎都有一个或另一个问题:要么太慢,要么不处理漏洞,或者遇到一些bug.目前我们正在测试polypartition,我们寄予厚望.
什么是伟大的'三角'图书馆的最佳替代品,但有许可证?
背景
我在游戏Bitfighter上工作.我们仍然与OpenGL 1.1兼容并为OSX,Windows和Linux编译.
我们使用矢量图形来处理所有事情,包括文本渲染和操作.我们使用GLUT中稍微修改过的'FontStrokeRoman'变体,它只是一堆静态线.我们喜欢这个,因为它似乎表现得非常好,易于旋转/缩放/操纵.我们还允许进行游戏内聊天,以便即时绘制文本.
问题
我们想要使用更多/不同的字体.
我们已经找到了我们喜欢的其他几种字体,但它们都是TTF类型的字体,它们构建为多边形(带曲线等)而不是笔画或刺.这带来了一些问题:
我们已经尝试将TTF字体转换为多边形点阵列,然后对填充进行三角测量.然而,这很难很好地渲染 - 在这种情况下,像素提示/抗锯齿似乎很难做到.
我们甚至尝试使用像'campskeleton'这样的库对多边形字体进行镂空,因此我们可以输出矢量笔划字体(看起来不太成功).
我们应该做什么?
我知道这个问题有点笼统.我们希望保持性能和文本操作能力,但能够使用更好的字体.我对任何方向的任何建议持开放态度.
一些解决方案可能是以下答案:
背景
我和Watusimoto在Bitfighter游戏上合作.我们使用LuaWrapper的变体将我们的c ++对象与游戏中的Lua对象连接起来.我们还使用称为lua-vec的Lua变体来加速向量操作.
我们一直在努力解决一段时间没有找到错误的bug.将发生随机崩溃,表明腐败的元数据.有关Watusimoto的帖子,请参阅此处.我不确定这是因为一个腐败的metatable,并且看到了一些我想在这里问的非常奇怪的行为.
问题表现形式
作为一个例子,我们创建一个对象并将其添加到这样的级别:
t = TextItem.new()
t:setText("hello")
levelgen:addItem(t)
Run Code Online (Sandbox Code Playgroud)
但是,游戏有时会(并非总是)崩溃.出错:
attempt to call missing or unknown method 'addItem' (a nil value)
Run Code Online (Sandbox Code Playgroud)
使用上面提到的Watusimoto帖子中给出的建议,我已将最后一行更改为以下内容:
local ok, res = pcall(function() levelgen:addItem(t) end)
if not ok then
local s = "Invalid levelgen value: "..tostring(levelgen).." "..type(levelgen).."\n"
for k, v in pairs(getmetatable(levelgen)) do
s = s.."meta "..tostring(k).." "..tostring(v).."\n"
end
error(res..s)
end
Run Code Online (Sandbox Code Playgroud)
这打印出metatable,levelgen如果错误的话从它调用一个方法.
然而,这很疯狂,当它失败并打印出metatable时,metatable 正是应该如何(使用正确的addItem调用和所有内容).如果我levelgen在脚本加载时打印metatable ,并且在上面使用它时失败pcall,它们是相同的,每个调用和指向userdata的指针是相同的,应该是它.
好像metatable levelgen …
我尝试在 MacOS 上为我的游戏Bitfighter进行高 DPI 渲染,结果总是看起来很糟糕,就像低分辨率游戏的放大版本。
该游戏使用 SDL2 + OpenGL,我已正确启用SDL_WINDOW_ALLOW_HIGHDPI窗口标志,并在 Info.plist 中使其具有 HighDPI 感知。这一切正常,我得到了更高分辨率的标题栏。我使用SDL_GL_GetDrawableSize并且它正确返回比窗口大小大 2 倍的像素大小,但以下重新缩放它的技术不会产生好的结果:
glViewport窗口坐标glViewport与可绘制坐标一起使用,然后glOrtho按比例缩放(如 SDL 文档中的建议README-ios.md)两者都显示像素矢量图形。我该怎么做才能让 OpenGL 在 MacOS 高 DPI 下画得更好?
谢谢。