我有一个从worldwildlife.org下载的shapefile,用于世界地球生态区.该文件可以在这里加载:http://worldwildlife.org/publications/terrestrial-ecoregions-of-the-world.
它是一个标准的形状文件,我想用它做两件事.首先:从我的本地目录中获取shapefile并将其剪辑到北美东部(ext = extent(-95,-50,24,63))
# Read shapefile using package "maptools"
eco_shp <- readShapeLines("F:/01_2013/Ecoregions/Global/wwf_terr_ecos.shp",
proj4string=CRS("+proj=utm +zone=33 +datum=WGS84"))
# Set the desired extent for the final raster using package "raster"
ext <- extent(-95, -50, 24, 63)
Run Code Online (Sandbox Code Playgroud)
我确信我必须在"raster"包中使用rasterize功能,但我仍然无法使其正常工作.我很感激有关如何做到这一点的任何建议.
我正在编写自己的图形库(是的,它的作业:)并使用cuda快速完成所有渲染和计算.
我有绘制填充三角形的问题.我这样编写了一个进程绘制一个三角形.当场景中有很多小三角形时它工作得很好,但是当三角形很大时它会完全破坏性能.
我的想法是做两次通过.首先计算仅包含扫描线信息的选项卡(从此处绘制到此处).这将是每个过程计算的三角形,就像当前算法一样.在第二遍中,确实绘制了每个三角形有多个进程的扫描线.
但它会足够快吗?也许有更好的解决方案?
光栅化矢量图像的一般算法是什么?我发现了许多光栅化基元的算法,如直线,圆,贝塞尔曲线等.但一般情况下,我该怎么办?简单地说,在矢量图片中找到矢量图,得到它的像素并将它们放入光栅图像中?或者是其他东西?
另一个问题是,如何使用并发性来改善处理时间?例如,我可以分离矢量图并同时获取它们的像素.但也许有其他方法可以做到这一点?
我正在制作一个软件光栅化器,我遇到了一些障碍:我似乎无法使透视校正纹理映射工作.
我的算法是首先对坐标进行排序y.这将返回最高,最低和中心点.然后我使用三角洲走过扫描线:
// ordering by y is put here
order[0] = &a_Triangle.p[v_order[0]];
order[1] = &a_Triangle.p[v_order[1]];
order[2] = &a_Triangle.p[v_order[2]];
float height1, height2, height3;
height1 = (float)((int)(order[2]->y + 1) - (int)(order[0]->y));
height2 = (float)((int)(order[1]->y + 1) - (int)(order[0]->y));
height3 = (float)((int)(order[2]->y + 1) - (int)(order[1]->y));
// x
float x_start, x_end;
float x[3];
float x_delta[3];
x_delta[0] = (order[2]->x - order[0]->x) / height1;
x_delta[1] = (order[1]->x - order[0]->x) / height2;
x_delta[2] = (order[2]->x - order[1]->x) / height3;
x[0] = order[0]->x;
x[1] = …Run Code Online (Sandbox Code Playgroud) 我尝试drawRoundedRect直接用方法绘制一个圆形矩形QPixmap(没有渲染引擎涉及这里exept纯Qt一个...),我仔细检查矩形的大小与我的pixmap的大小:
Pixmap : QSize(50, 73)
Rectangle: QRect(0,0 48x11)
Run Code Online (Sandbox Code Playgroud)
看到充足的空间......
编辑:一些代码
pixmap = QPixmap(50,73); //example size that match my case
QRectF rect(0,0,48,11);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::TextAntialiasing);
painter.setWorldMatrixEnabled(false);
painter.setPen(QPen()); //no pen
painter.setBrush(QBrush(color));
painter.drawRoundedRect(rect, 2.0, 2.0);
Run Code Online (Sandbox Code Playgroud)
但它始终以4个不同角落的直线结束!像那样 :

我直接将pixmap输出到一个文件,以确保我在显示期间没有刮它...相同的形状.
有人知道Qt圆形矩形半径小吗?我很久以前就看到过这个问题,但我并不清楚如何处理它!
我正在尝试修复此三角形光栅化器,但无法使其正常工作.出于某种原因,它只绘制了一半的三角形.
void DrawTriangle(Point2D p0, Point2D p1, Point2D p2)
{
Point2D Top, Middle, Bottom;
bool MiddleIsLeft;
if (p0.y < p1.y) // case: 1, 2, 5
{
if (p0.y < p2.y) // case: 1, 2
{
if (p1.y < p2.y) // case: 1
{
Top = p0;
Middle = p1;
Bottom = p2;
MiddleIsLeft = true;
}
else // case: 2
{
Top = p0;
Middle = p2;
Bottom = p1;
MiddleIsLeft = false;
}
}
else // case: 5
{
Top …Run Code Online (Sandbox Code Playgroud) OpenGL像素/片段在概念上是以半整数像素为中心的1x1个正方形.OpenGL 4.5规范声明:
片段位于其左下角,位于整数网格坐标上.光栅化操作也指一个片段的中心,它从左下角偏移(1/2,1/2)(因此位于半整数坐标上).
光栅化器通常假设像素中心位于整数网格上.由于我试图实现正确的OpenGL三角形填充,我想知道以下程序是否合理.
让我们看一个带有剪裁坐标(-1,-1),(+ 1,-1),(0,+ 1)的三角形的简单情况,如下图所示(假设正投影,z = 0) ).假设我们有一个(小的5x5帧缓冲区),我们将三角形映射到via,glViewport(0,0,5,5)如右图所示,在设备坐标中产生三角形,顶点为(0,0),(5,0),(2.5,5).

如您所见,光栅化器应生成三角形内部的13个片段(图像中的阴影像素).请注意,片段中心位于半整数坐标上.要实现OpenGL规范,这就是结果需要的结果.
扫描线多边形填充将确定扫描线与三角形相交的x跨距,但扫描线为半整数y值,如下图所示:

硬件/固件光栅化器将假设像素中心位于整数网格上,因为这是执行填充的最有效方式.在下图中,我将三角形的设备坐标移动了(-0.5,-0.5),将中心放在整数网格上:

请注意,像素中心现在确实在整数网格上.在传递给片段着色器之前,这个光栅化器只会向每个片段中心添加(0.5,0.5).至少这是我的计划.
处理纹理坐标似乎是直截了当的.想象一下,我分配了纹理坐标(0,0),(1,0),(0.5,1),如下所示.左边的图像使用半整数像素中心(OpenGL方式),右边的图像使用整数像素中心(硬件方式).纹理坐标(任何附加的片段属性)最终都有相同的值 - 即,没有什么特别需要做的.

我的方法看起来是否正确?
我正在绘制几个ggplot2对象并将它们置于grid.arrange内部调用'pdf'设备.我发现如果我首先光栅化这些图表,PDF的性能会提高十亿倍(生成速度更快,渲染速度更快).所以在一个并行dlply循环中,我正在使用ggsave将其ggplot2作为PNG 编写,然后使用readPNG它来重新读取并rasterGrob转换为返回它dlply.在dlply将其放入一个列表grobs,其grid.arrange然后绘制到PDF设备.
其中一些似乎不实用,所以一般来说,有更好的方法吗?但真正让我感到困惑的是将PNG写入磁盘,而我所做的就是将它们读回来.有没有办法将grob直接保存到rasterGrob?
plot.list <- dlply( ... {
ggsave(filename= fname
,plot= my.plot
,device= "png"
,scale = 1, width= 1.1, height= 2.125, units = "in"
,dpi = dpi)
# return it as a list of rasters
rasterGrob(readPNG( source= fname, info= TRUE))
}
Run Code Online (Sandbox Code Playgroud) 我想构建一个函数,该函数采用给定的 Unicode 字符和给定的 TrueType 字体,并将相应的字形光栅化为二维 1 位/像素位图。
类似的东西:
rasterize :: Font -> Char -> Size -> Bitmap
rasterize font char size = ...
Run Code Online (Sandbox Code Playgroud)
该rasterize功能应该:
w和高度的位图h,使得w <= size和h <= size该Bitmap类型应支持以下操作(或类似操作):
width :: Bitmap -> Int
height :: Bitmap -> Int
bit :: Bitmap -> (Int, Int) -> Bool
Run Code Online (Sandbox Code Playgroud)
wherebit b (x, y)应该评估True是否(且仅当)b索引位置的Bitmap中的位(x, y)被设置。
是否有任何 Haskell 库已经可以做到这一点,或类似的东西?
评估表达式 …
使用 R 的大家好,
将包含数千个数据点的多个绘图放入单个 PDF 文件中时,该文件可能会变得很大并且需要很长时间才能打开。
下面的文章描述了 Matplotlib 中完全相同的问题,以及一个很好的解决方案: Matplotlib:带有光栅化图的多页 PDF 特别好的一点是,它只光栅化点而不光栅化标签。 http://www.astrobetter.com/blog/2014/01/17/slim-down-your-bloated-graphics/包含一个很好的例子。
我现在正在 R 中寻找类似的解决方案。