【问题标题】:How I can turn a figure that is upside down?我怎样才能把一个颠倒的人物转过来?
【发布时间】:2015-08-21 08:13:23
【问题描述】:

我正在使用 json 文件创建地图。 d3.js 到 Three.js。显示时,它显示为倒置。因为我可以转他? 我不确定哪个是最好的翻转方式。我想尽他所能推荐它,因为我是 d3 和 Three.js 的新手,不知道该怎么做。

在这里你可以看到它的样子:

http://imgur.com/IFZ8F8h

所以我需要: http://vignette3.wikia.nocookie.net/inciclopedia/images/b/b4/Mapamundi.png/revision/20130430135955

我的代码是这样的:

            mercator = d3.geo.equirectangular();
            path = d3.geo.path().projection(mercator);

            var translate = mercator.translate();
            translate[0] = 500;
            translate[1] = 0;

            mercator.translate(translate);
            mercator.scale(200);


            var data=jsonCountrys;
            var countries = [];
            var i, j;

            // convert to threejs meshes
            for (i = 0 ; i < data.features.length ; i++) {
                var geoFeature = data.features[i];

                var properties = geoFeature.properties;
                var feature = path(geoFeature);

                // we only need to convert it to a three.js path
                var mesh = transformSVGPathExposed(feature);

                // add to array
                for (j = 0 ; j < mesh.length ; j++) {
                      countries.push({"data": properties, "mesh": mesh[j]});
                }
            }

            var material= new Array();
            // extrude paths and add color
            for (i = 0 ; i < countries.length ; i++) {

                // create material color based on average   
                 material[i] =  new THREE.MeshBasicMaterial( { color: "#FF0000" });

            //  var material = new THREE.MeshPhongMaterial({
                    color: "#FF0000"/*, 
                    opacity:0.5*/


                // extrude mesh
                var shape3d = countries[i].mesh.extrude({
                    amount: 2, 
                    bevelEnabled: false
                });

                 var  materialSide = new THREE.LineBasicMaterial( { color: "#000000"} ); 
                           country[i] = new THREE.Mesh(shape3d, material[i]);

【问题讨论】:

  • 您想在画布元素或&lt;img&gt; 元素中旋转图像? (或任何其他 html 元素)
  • 我想在画布内旋转地图(Three.js)
  • 我从未使用过 Three.js,但试试这个:在这行之后添加 var rotate = new THREE.Euler(180, 'Y'); mercator.applyEuler(rotate);mercator.scale(200);
  • 谢谢。我已经做了,但没有工作。
  • @WestLangley 我应用了这个并没有看到任何变化。 shape3D.applyMatrix(new THREE.Matrix4().makeScale(1, - 1, 1));而第二行标记我的错误,它出现在哪里a,b,c应该放在哪里? shape3D.applyMatrix(new THREE.Matrix4().makeTranslation(a, b, c));

标签: javascript d3.js three.js


【解决方案1】:

不知道你有多少参数在这个 sn-p 之外,但如果你在创建 material 的同时创建一个翻转矩阵,例如

var material= new Array(); // you already have this
var flip = new THREE.Matrix4().makeScale(1,-1,1);

然后在调用new THREE.Mesh()之前将其应用于shape3d

shape3d.applyMatrix(flip);

这应该可以解决问题。

另外:你也应该小心,你使用的是LineBasicMaterial,而实际上你应该使用MeshBasicMaterial并适当地设置边和线框属性。

【讨论】:

  • 对几何图形应用负比例因子会导致问题。一方面,缠绕顺序是相反的。在three.js中一般不推荐使用负比例因子。
  • 同意绕线顺序,但是:看起来他想要一个线框。
  • 因此我原来的关于使用适当的侧边性:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2014-08-13
  • 2015-02-12
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多