我有一条由2D点列表组成的路径.我想将它们变成一条三角形,以渲染具有指定厚度的纹理线条(和其他类似的东西).因此,2D点的列表基本上需要成为顶点列表,指定多边形的轮廓,如果渲染将呈现该线.问题在于处理拐角连接,斜角,盖帽等.在没有过度拉伸,清洁连接等意义上,所产生的多边形需要是"完美的",以便它可以被挤压或以其他方式玩弄.
是否有任何简单的资源可以提供算法洞察,代码或有效执行此操作的更多信息?
我绝对不想要一个完整的2D矢量库(cairo,antigrain,OpenVG等),包括曲线,弧形,破折号以及所有的铃声和口哨声.我一直在挖掘OpenVG实现和其他东西的多个源代码树以找到一些见解,但它们都非常复杂.
我绝对愿意自己编写代码,但有很多退化情况(小段+粗宽+尖角)会产生各种连接问题.即使是一点点帮助也可以节省我数小时的时间来处理它们.
编辑:这是一个例子,如果你只是从顶点到顶点,那些导致丑陋的退化情况.红色是原始路径.橙色块是以指定宽度绘制的矩形,对齐并以每个段为中心.
我正在编写一些代码来缩放C/C++中的32位RGBA图像.我已经写过一些有些成功的尝试,但它们很慢,最重要的是尺寸图像的质量是不可接受的.
我比较了由OpenGL(即我的视频卡)和我的例程缩放的相同图像,它的质量相差几英里.我已经搜索了Google代码,搜索了我认为可以解决一些问题的源代码树(SDL,Allegro,wxWidgets,CxImage,GD,ImageMagick等),但通常他们的代码要么是错综复杂的,要么分散在各处或者是谜语汇编程序,很少或没有评论.我还阅读了维基百科和其他地方的多篇文章,我只是没有找到我需要的明确解释.我理解插值和采样的基本概念,但我很难让算法正确.我不想依赖外部库来完成一个例程,并且必须转换为它们的图像格式并返回.此外,无论如何,我想知道如何自己做.:)
我之前看过一个关于堆栈溢出问题的类似问题,但它并没有真正以这种方式回答,但我希望有人可以帮我推动我朝着正确的方向前进.也许指点我一些文章或伪代码......任何可以帮助我学习和做的事情.
这是我正在寻找的:
我的例程基本上采用以下形式:
DrawScaled(uint32 *src, uint32 *dst,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h );
Run Code Online (Sandbox Code Playgroud)
谢谢!
更新:为了澄清,我需要一些比盒子重新采样更先进的东西用于降尺度,这会使图像模糊不清.我怀疑我想要的是某种双三次(或其他)滤波器,它与双三次升频算法有些相反(即每个目标像素都是从所有贡献的源像素计算出来的,并结合了保持锐利的加权算法.
这是我从wxWidgets BoxResample算法得到的例子与我想要的256x256位图缩放到55x55的例子.
最后:
原始的256x256图像
所以我写了一些代码,我有这样的事情:
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect( void ) const
{
return Rectangle( x, y, w, h );
}
};
Run Code Online (Sandbox Code Playgroud)
然后在一些代码中:
Rectangle rect = theBox.GetRect();
Run Code Online (Sandbox Code Playgroud)
哪个在我的调试版本中有效,但在发行版中有"问题"通过引用返回Rectangle - 我基本上得到了一个未初始化的矩形.Rectangle类有一个=运算符和一个复制构造函数.在没有弄清楚为什么会破坏的情况下,我实际上更感兴趣的是通过引用返回(新)对象的正确方法,以便将复制分配给变量.我只是傻吗?不应该这样做吗?我知道我可以返回一个指针,然后取消引用,但我不愿意.我的某些部分感觉像按值返回会导致对象的冗余复制 - 编译器是否会解决并优化它?
这似乎是一个微不足道的问题.经过多年的C++编码后,我感到尴尬,我不知道这一点,所以希望有人可以为我清除这一点.:)
我正在编写跨平台的C++代码(Windows,Mac).有没有办法检查当前进程使用了多少内存?一个非常人为的片段来说明:
unsigned long m0 = GetMemoryInUse();
char *p = new char[ random_number ];
unsigned long m1 = GetMemoryInUse();
printf( "%d bytes used\n", (m1-m0) );
Run Code Online (Sandbox Code Playgroud)
当然(m1-m0)应该等于random_number,但我试图在更复杂的层面上做这件事,包括可能分配内存的库调用.
以下不是优选的:
我正在尝试将以下代码用作 macOS 命令行工具。重要的是这不是 Cocoa 应用程序,所以这不是一个选项。
相同的代码在具有 Cocoa App 目标的同一个项目中完美运行并检测到兼容的控制器,但是当作为命令行工具目标运行时,没有任何反应并且 API 显示没有连接控制器。
显然,其中一些是人为设计的……这只是我可以将其归结为最简单的方法,并在实际工作时对发生的事情有一些指示。
#import <Cocoa/Cocoa.h>
#import <GameController/GameController.h>
int main( int argc, const char * argv[] )
{
@autoreleasepool
{
NSApplication * application = [NSApplication sharedApplication];
NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserverForName: GCControllerDidConnectNotification
object: nil
queue: nil
usingBlock: ^(NSNotification * note) {
GCController * controller = note.object;
printf( "ATTACHED: %s\n", controller.vendorName.UTF8String );
}
];
[application finishLaunching];
bool shouldKeepRunning = true;
while (shouldKeepRunning)
{
printf( "." );
while (true)
{
NSEvent …Run Code Online (Sandbox Code Playgroud) 我对使用Xgrid来加速我在多台机器上编译Xcode的想法很感兴趣...但似乎很难找到有关人们使用它的经验,任何陷阱等的任何信息.我没有多个Mac那样的我现在可以测试它,所以我很好奇.
你试过吗?它对你有多好?你看到了什么样的加速?