मेरे पास निम्न कोड है: https://pastebin.com/sxfmAAz9 (पेस्टबिन का उपयोग करना क्योंकि मुझे नहीं चाहिए ओपी से ध्यान हटाने के लिए, यह थोड़ा लंबा क्रम है)

मूल रूप से मैं एक विमान बना रहा हूं और इसे एक नुकीला विमान बनाने के लिए चौड़ाई और ऊंचाई खंडों में विभाजित कर रहा हूं। मैं फिर प्रत्येक चेहरे पर पुनरावृत्ति कर रहा हूं और मैं उस चेहरे की नकल करने की कोशिश कर रहा हूं ताकि मैं इसे ऊपर जा सकूं और धीरे-धीरे घुमा सकूं ताकि ऐसा लगे कि यह विमान से बाहर आ रहा है। मैंने इसे सफलतापूर्वक किया है, हालांकि जब मैं त्रिकोणों को घुमाता हूं, तो ऐसा लगता है कि वे एक साथ समूहीकृत हैं, जैसे वे एक ही जाल का हिस्सा हैं, भले ही मैं हर चेहरे के लिए एक नया जाल बना रहा हूं। यहां बताया गया है कि मैं त्रिकोण कैसे बना रहा हूं:

if (numberOfTriangles < possibleFloatingTriangles) {
  var randomIndices = [];

  while (randomIndices.length < possibleFloatingTriangles - numberOfTriangles) {
    var randomNumber = Math.ceil(Math.random()*150);
    if (randomIndices.indexOf(randomNumber) > -1) continue;
    randomIndices[randomIndices.length] = randomNumber;
  }

  scene.traverse(function (node) {
    if (numberOfTriangles >= possibleFloatingTriangles) return;

    if (node instanceof THREE.Mesh && node.geometry.type === "PlaneGeometry") {
      for(var i = 0; i < node.geometry.faces.length; i++) {
        if(randomIndices.indexOf(i) != -1) {
          var currentFace = node.geometry.faces[i];
          var triangleGeometry = new THREE.Geometry();

          // I assumed they might be getting referenced here initially hence the clone()
          var p1 = node.geometry.vertices[currentFace.a].clone();
          var p2 = node.geometry.vertices[currentFace.b].clone();
          var p3 = node.geometry.vertices[currentFace.c].clone();

          triangleGeometry.vertices.push(p1);
          triangleGeometry.vertices.push(p2);
          triangleGeometry.vertices.push(p3);

          var face = new THREE.Face3(0,2,1);

          triangleGeometry.faces.push(face);

          var triangleMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, wireframe: showWireframe, specular: 0x0, morphTargets: true, flatShading: true, side: THREE.DoubleSide });
          var triangle = new THREE.Mesh(triangleGeometry, triangleMaterial);

          triangle.rotation.set(-Math.PI/2, Math.PI/2000, Math.PI); ;

          scene.add(triangle);
        }
      }
    }
  }
}

मैं मूल रूप से व्यक्तिगत त्रिभुज मेष कैसे बना सकता हूं जिसे मैं विमान से अपने चारों ओर घुमाता हूं? मैं उन्हें समूहीकृत नहीं करना चाहता, मैं चाहता हूं कि प्रत्येक त्रिभुज अलग-अलग हो। अभी सभी त्रिभुज ऐसा व्यवहार कर रहे हैं जैसे वे एक ही जाल का हिस्सा हों, अगर मैं उनकी व्यक्तिगत ज्यामिति को घुमा रहा हूँ तो ऐसा लगता है जैसे मैं एक विमान को घुमा रहा हूँ जहाँ वे सभी स्थित हैं।

0
J.C. 11 सितंबर 2017, 19:44

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि प्रत्येक त्रिभुज का मूल अभी भी 0, 0, 0 पर है। आप सभी त्रिभुजों को एक ही धुरी बिंदु के चारों ओर घुमा रहे हैं, जिससे यह आभास होता है कि वे सभी जुड़े हुए हैं। आपको ज्यामिति पर अनुवाद का उपयोग करने की आवश्यकता है। इसके शीर्षों को मूल स्थान के चारों ओर रखें, और फिर स्थिति वापस अपने मूल मान पर:

उदाहरण के लिए, मान लें कि आपके पास एक त्रिभुज है जिसे आप बिंदु के चारों ओर घुमाना चाहते हैं [5, 3, 0]:

// First, translate geometry to origin
triangleGeometry.translate(-5, -3, 0);
var triangleMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, wireframe: showWireframe, specular: 0x0, morphTargets: true, flatShading: true, side: THREE.DoubleSide });
var triangle = new THREE.Mesh(triangleGeometry, triangleMaterial);
// Then move mesh back to its starting position
triangle.position.set(5, 3, 0);

आप प्रत्येक त्रिभुज के केंद्र की गणना कैसे करते हैं, मैं आपके ऊपर छोड़ता हूँ :)

0
Marquizzo 11 सितंबर 2017, 23:21