2017-11-15 11 views
1

私は最近three.jsで実験を始めました。既存のジオメトリの1つから作成されたメッシュの面のサイズをランダム化する方法があるかどうか疑問に思っていました。three.jsでメッシュの面のサイズをランダム化する方法は?

Three-jsは低ポリ作業には優れていますが、生成されたメッシュの対称性が幾分影響を壊しています。私は各面に若干異なるサイズ、おそらくはジッタ/回転を与える方法を探していますそれをより「手作りの」見た目にするために、そう言います。

私はmath.randomでそれを行う方法があると思っていましたが、私はJavaScriptの初心者であり、使い方については分かりません。

これは私が少ない均一な外観を与えたいオブジェクトのコードです:コードは、ローカルで動作しますが、

function createObject() { 
    var geometry = new THREE.SphereGeometry(70, 31, 17); 
    var material = new THREE.MeshPhongMaterial({ 
     color:Colors.blue, 
     shading:THREE.FlatShading 
    }); 
    var sphere = new THREE.Mesh(geometry, material); 
    sphere.position.set(45,100,0); 
    sphere.castShadow = true; 
    sphere.receiveShadow = true; 
    scene.add(sphere); 
} 

ここで私は、可能なコードの残りの部分とフィドルだが、何らかの理由でそれをブラウザで実行するようにしないでください。それでも、あなたがそれを見たいのなら、それがあります。 https://jsfiddle.net/redheadedmandy/f8fy4Lg8/1/

誰かがthree.jsメッシュの均一性を粗くする方法について提案があれば、私はそれを高く評価します!

+0

奇妙なことに、数年前(r71)の旧版であるThree.jsの改訂版を使用した聖なる点は何ですか? :) – prisoner849

+0

私はフィドルのためのcdnを探していて、それが時代遅れのバージョンであることに気付かなかった!私が使用していたローカルファイルが最新のアップデートです。 –

+0

私の回答は役に立ちましたか? – prisoner849

答えて

1

あなたの意見に基づいて、exampleがあります。まあ、主にあなたの例ですが、わずかに変更されていて、Three.jsの最新バージョンが使用されています。あなたがそのようにそれを行うことができ、「荒削り」のオプションとして

、:

var geometry = new THREE.SphereGeometry(70, 31, 17); 

    geometry.vertices.forEach(v => { 
    v.x += THREE.Math.randFloatSpread(2); 
    v.y += THREE.Math.randFloatSpread(2); 
    v.z += THREE.Math.randFloatSpread(2); 
    }); 

    geometry.computeFaceNormals(); // don't forget to do it, when you change vertices 

は実際には、幾何学的に頂点の座標を変更する方法の多くの方法があります。創造性はあなた次第です。

+1

OPが頂点を無作為化したいと思うかもしれません。私は各顔の重心をとり、ランダムなスケールを適用することを想像し、それが何を達成するのだろうと思っていました:D – pailhead

+0

@pailhead正直言っても、それは私の最初の考えでした。 – prisoner849

関連する問題