我有一个VB6应用程序(请不要笑),该应用程序可以通过BITBLT和标准VB6绘图功能进行大量绘图。我正在违反性能问题(是的,我会做一些定期的技巧,例如绘画到内存)。因此,我决定调查其他绘画方式,并遇到OpenGL。

我一直在做一些实验,做我想要的大部分事情似乎很简单。该应用程序大多仅使用非常简单的图形 - 相对较大的纯色2D矩形 - 但是我找不到等同于诸如盖刷或图案刷之类的东西。

更具体地说,我希望能够指定一个小的单色像素图案,选择一种颜色,并且每当我绘制多边形(或其他)时,请自动用该图案铺平,而不是翻译或旋转或旋转或偏斜或拉伸,带有指定颜色的图案的“ on”位,以及左图的“关闭”位,显示了我现在正在绘制的区域下绘制的所有图案。

显然,我可以自己完成所有计算。也就是说,我可以计算出所有的行或像素或实际需要绘制的所有线条,而是将它们绘制为行,而是将它们绘制为行或像素或其他任何东西,而是将其绘制为多边形,而是为我自动铺有瓷砖。但是有一个简单的方法吗?就像在GDI中一样,您只是说“使用此刷子绘制此多边形”?

我猜想“纹理”可能能够完成我想要的事情,但这对我来说并不清楚(我完全是新手,我发现的文档并不完全显而易见);似乎纹理可能会根据多边形的顶点偏斜,翻译或拉伸图案?而我想要图案瓷砖。

除了精确地绘制的像素/线/其他需要绘制的蛮力计算外,还有什么方法或类似的方法吗?

在此先感谢您的任何帮助。

有帮助吗?

解决方案

如果我正确理解,您正在寻找 glpolygonstipple() 或者 gllinestipple().

Polygonstipple非常有限,因为它仅允许32x32模式,但应该像模式刷一样工作。我不知道如何在VB中实施它。

其他提示

首先,您确定这里的绘图操作本身就是瓶颈吗? Visual Basic以非常缓慢而闻名(尤其 如果您的程序被编译为中介VM代码 - 这是默认的AFAIRC。确保您检查以编译为本机代码的选项!),如果是瓶颈的代码,则OpenGL不会为您提供太大帮助 - 您需要用其他语言重写代码 - 可能是C或C ++,但任何.net lang也应该这样做。

OpenGL包含允许您绘制点击线和多边形的功能,但您不应该使用它们。它们已弃用了很长时间,并在规格的3.1版中从OpenGL中删除。这是有原因的 - 这些功能不能很好地映射到现代渲染范式,并且不受现代图形硬件的支持 - 这意味着您很可能会得到一个 减缓 软件后备如果您使用它们。

要走的方法是将小纹理用作面具,然后在绘制的多边形上瓷砖。纹理将被拉伸或压缩以匹配您指定的纹理坐标与顶点。您必须将包装模式设置为 GL_REPEAT 对于两个纹理坐标,并计算每个顶点的正确坐标,以便纹理以其原始大小出现,重复适当的时间。

您也可以如描述的那样使用模板缓冲区,但是...如何用图案填充该缓冲区,然后做 快速地?无论如何,您都需要纹理。请记住,在开始绘制之前,您需要清除每帧模板缓冲区。不这样做可能会花费您 大量的 性能命中(根据图形硬件和驱动程序版本,“大规模”的确切值)。

也可以使用片段着色器实现所需的效果,但是学习着着色器对于像您这样的OpenGL初学者来说,这是一个过度杀伤器:-)。

啊,我想我找到了!我可以按照我想要的图案(或它的面具)的形状在整个视口上制作模板,然后在我想用这种图案绘制时启用该模板。

您可以使用纹理。将图案放入图像中,然后打开纹理重复,您就可以了。

弄清楚了 一两年前.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top