我正在尝试制作一个时光地理推特可视化,灵感来自于Jer Thorp的"Just Landed"。我正在使用processing的最新版本。
我正在使用SVG图像作为我的地图,因为我希望能够以任意角度缩放地图,聚焦于某些地方,然后在全球范围内显示推特连接。我遇到了几个问题,其中第一个是当我旋转我的地图时,国家的路径边界会闪烁。这是我的问题截图:
我被告知这可能是路径之间的z-fighting问题,我认为这可能是问题所在,因为当地图处于中旋转状态时,闪烁问题更加严重,特别是在与视平面非正交的角度上。我试图通过使用“translate”命令在Z方向上微调文件的PShape子对象来解决这个问题,但是我收到了错误提示:“illegal argument exception: cannot use translate(x,y,z) on a PMatrix2D”。
我还遇到了测试我的代码与其他SVG地图文件以及使SVG看起来像我认为的那样的困难。我的SVG地图上有很多城市和其他奇怪的标记,即使我从wikimedia commons下载完全“空白”的svg世界地图墨卡托投影。在处理渲染中出现了这些城市标记/区域属性,而在浏览器视图中则没有显示。我正在尝试找出如何在Inkscape中“清理”我的SVG文件,但我不确定具体要查找什么。
例如,我已经使用了这张地图来运行它:http://commons.wikimedia.org/wiki/File:Mercator_Projection.svg,但是我不需要其中的点和线条,我不得不手动选择并删除路径,这不是一个非常彻底的过程。当我使用this地图时,它应该是上面的“空白版本”,没有所有的标记,但我看到不仅有一堆标记(可能在SVG XML中用某些样式属性隐藏?),还有这种奇怪的垂直条纹,我的摄像机控制非常缓慢。该应用程序似乎表现得好像文件太大了,但只有2MB左右。以下是这种情况的屏幕截图:
谢谢。
我正在使用SVG图像作为我的地图,因为我希望能够以任意角度缩放地图,聚焦于某些地方,然后在全球范围内显示推特连接。我遇到了几个问题,其中第一个是当我旋转我的地图时,国家的路径边界会闪烁。这是我的问题截图:
这是导致问题的代码:
import processing.opengl.*;
import java.awt.event.*;
PShape map;
PShape test1;
PShape test2;
//camera position/movement intialization
PVector position = new PVector(450, 450);
PVector movement = new PVector();
PVector rotation = new PVector();
PVector velocity = new PVector();
float rotationSpeed = 0.035;
float panningsSpeed = 0.035;
float movementSpeed = 0.05;
float scaleSpeed = 0.25;
float fScale = 2;
void setup(){
map = loadShape("blank_merc.svg"); //swap out for whatever file
size(900, 900, OPENGL);
smooth();
fill(150, 200, 250);
addMouseWheelListener(new MouseWheelListener(){
public void mouseWheelMoved(MouseWheelEvent mwe){
mouseWheel(mwe.getWheelRotation());
}
});
}
void draw(){
if (mousePressed) {
if (mouseButton==LEFT) velocity.add( (pmouseY-mouseY) * 0.01, (mouseX-pmouseX) * 0.01, 0);
if (mouseButton==RIGHT) movement.add( (mouseX-pmouseX) * movementSpeed, (mouseY-pmouseY) * movementSpeed, 0);
}
//TODO: implement reset functionality: DONE
if (keyPressed){
if (key=='r'){
position.set(450,450);
rotation.sub(rotation.get());
velocity.sub(velocity.get());
movement.sub(movement.get());
}
}
velocity.mult(0.95);
rotation.add(velocity);
movement.mult(0.95);
position.add(movement);
background(255);
//lights();
translate(position.x, position.y, position.z);
rotateX(rotation.x*rotationSpeed);
rotateY(rotation.y*rotationSpeed);
scale(fScale);
shape(map,-250,-250,1000,1000);
}
void mouseWheel(int delta){
fScale -= delta * scaleSpeed;
fScale = max(0.5, fScale);
}
我被告知这可能是路径之间的z-fighting问题,我认为这可能是问题所在,因为当地图处于中旋转状态时,闪烁问题更加严重,特别是在与视平面非正交的角度上。我试图通过使用“translate”命令在Z方向上微调文件的PShape子对象来解决这个问题,但是我收到了错误提示:“illegal argument exception: cannot use translate(x,y,z) on a PMatrix2D”。
我还遇到了测试我的代码与其他SVG地图文件以及使SVG看起来像我认为的那样的困难。我的SVG地图上有很多城市和其他奇怪的标记,即使我从wikimedia commons下载完全“空白”的svg世界地图墨卡托投影。在处理渲染中出现了这些城市标记/区域属性,而在浏览器视图中则没有显示。我正在尝试找出如何在Inkscape中“清理”我的SVG文件,但我不确定具体要查找什么。
例如,我已经使用了这张地图来运行它:http://commons.wikimedia.org/wiki/File:Mercator_Projection.svg,但是我不需要其中的点和线条,我不得不手动选择并删除路径,这不是一个非常彻底的过程。当我使用this地图时,它应该是上面的“空白版本”,没有所有的标记,但我看到不仅有一堆标记(可能在SVG XML中用某些样式属性隐藏?),还有这种奇怪的垂直条纹,我的摄像机控制非常缓慢。该应用程序似乎表现得好像文件太大了,但只有2MB左右。以下是这种情况的屏幕截图:
谢谢。