Javascript 球面多边形三角剖分
填充所有多边形是真的吗。据我所知,ThreeGeoJSON不能填充多边形,只能填充轮廓。我也尝试过三角测量Javascript 球面多边形三角剖分,javascript,html,css,three.js,Javascript,Html,Css,Three.js,填充所有多边形是真的吗。据我所知,ThreeGeoJSON不能填充多边形,只能填充轮廓。我也尝试过三角测量 drawThreeGeo(数据,半径,'sphere',{color:'yellow'//我想编辑土地的填充颜色,而不是轮廓颜色})您需要将每个国家分割成一个单独的几何体,用以找出鼠标位于哪个国家,然后更改其材质。颜色。在右下角,您可以看到光线投射正在运行,源代码可用。该示例中的关键行是: function onDocumentMouseMove( event ) { event.
drawThreeGeo(数据,半径,'sphere',{color:'yellow'//我想编辑土地的填充颜色,而不是轮廓颜色})
您需要将每个国家分割成一个单独的几何体,用以找出鼠标位于哪个国家,然后更改其材质。颜色
。在右下角,您可以看到光线投射正在运行,源代码可用。该示例中的关键行是:
function onDocumentMouseMove( event ) {
event.preventDefault();
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
}
function render() {
// find intersections
raycaster.setFromCamera( mouse, camera );
var intersects = raycaster.intersectObjects( scene.children );
if ( intersects.length > 0 ) {
if ( INTERSECTED != intersects[ 0 ].object ) {
if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );
INTERSECTED = intersects[ 0 ].object;
INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
INTERSECTED.material.emissive.setHex( 0xff0000 );
}
} else {
if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );
INTERSECTED = null;
}
renderer.render( scene, camera );
}
我建议您使用更好的地图: 对于每个形状,解决方案包括以下步骤:
convertCoordinates
/*绘制GeoJSON
遍历纬度和经度值,将值转换为XYZ坐标,并绘制geoJSON几何图形。
*/
设三角剖分密度=5;//使其更小以获得更密集的网格
函数数组(coords){
let flat=[];
for(设k=0;kmax.x){
max.x=点数[点数][0];
}
如果(点数[点数][1]max.y){
最大y=点数[点数][1];
}
}
返回{
敏:敏,,
马克斯:马克斯
};
}
函数isInside(点,vs){
//基于遗传算法的光线投射算法
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
var x=点[0],
y=点[1];
var内=假;
对于(变量i=0,j=vs.length-1;iy)!=(yj>y))和&(x<(xj-xi)*(y-yi)/(yj-yi)+xi);
如果(相交)内部=!内部;
}
返回内部;
}
功能GeninServers(点){
设res=[];
for(设k=0;k10)中断;
if(json_geom[geom_num].type=='Point'){
转换坐标(json_geom[geom_num]。坐标,半径);
drawParticle(y_值[0],z_值[0],x_值[0],选项);
}else if(json_geom[geom_num].type=='MultiPoint'){
for(设point_num=0;point_num