2016-05-07 5 views
6

Three.js में, मैं एक 3 डी वस्तु जहाँ मैं करने के लिए स्थानीय कतरन विमानों का उपयोग कर रहा केवल वस्तु का एक हिस्सा प्रस्तुत करना है।काटा सतहों रेंडर करने के लिए कैसे के रूप में ठोस वस्तुओं

हालांकि, बाद से 3 डी वस्तुओं "खोखला" कर रहे हैं (जिसका अर्थ केवल बाहरी सतह प्रदान की गई है), जब हम उस सतह हम वस्तु "में देख" सकता है बंद कुछ भी क्लिप। मेरा मतलब क्या है, clipping a corner off a cube का एक उदाहरण यहां दिया गया है। ध्यान दें कि हम विपरीत कोने के बैकसाइड को कैसे देख सकते हैं।

मैं वस्तु ठोस किया जा रहा है की उपस्थिति देने के लिए करना चाहते हैं। this issue के आधार पर, ऐसा लगता है कि इसे पूरा करने का सबसे अच्छा तरीका क्लिप किए गए क्षेत्र पर सतह बनाना है, इस प्रकार छेद को कैप करना और ऑब्जेक्ट को दिखाना जैसे खोखला नहीं है।

मेरा प्रश्न, मैं कैसे पता चलेगा है, जहां इस सतह के निर्माण के लिए? क्या Three.js एक विमान और किसी भी मनमाने ढंग से सतह के बीच छेड़छाड़ की एक सूची प्राप्त करने का एक तरीका प्रदान करता है? यदि नहीं, तो मैं इस समस्या से कैसे संपर्क कर सकता हूं?

मैं this question पाया है, लेकिन लेखक का वर्णन नहीं किया कि वे किस तरह समस्या मैं यहाँ कर रहा हूँ हल किया। अर्थात, खोखले नहीं -

+0

क्या आप यथार्थवादी उपयोग के मामले में एक लाइव लिंक प्रदान कर सकते हैं जो आपकी वास्तविक बाधाओं को प्रदर्शित करता है? क्या बनावट शामिल हैं? आप किस सामग्री का उपयोग कर रहे हैं? आप समझौता करने के लिए क्या तैयार हैं? – WestLangley

+0

@WestLangley निश्चित रूप से, यह [सरल उदाहरण] (http://threejs.org/examples/#webgl_clipping) मेरी समस्या का प्रदर्शन करता है। मैं उद्घाटन को कवर करना चाहता हूं ताकि आप आकार के अंदर नहीं देख सकें। मैं बनावट का उपयोग नहीं कर रहा हूं, सिर्फ मूल मेषफोंगमटेरियल। प्रदर्शन मेरी प्राथमिकता है, इसलिए यदि यह केवल सरल आकारों पर एक कलाकार के तरीके में किया जा सकता है, तो हो सकता है। लेकिन मैं जानना चाहता हूं कि इसे सामान्य तरीके से करना संभव है जिसे किसी भी आकार पर लागू किया जा सकता है। –

उत्तर

7

आप एक काटा सतह रेंडर करने के लिए जैसे कि यह एक ठोस थे चाहते हैं।

आप उस प्रभाव के लिए MeshPhongMaterial - या किसी भी तीन.जेएस सामग्री के साथ उस प्रभाव को प्राप्त कर सकते हैं - सामग्री शेडर के लिए एक साधारण हैक के साथ।

/src/renderers/shaders/ShaderLib/meshphong_frag.glsl में इस लाइन को बदलें:

gl_FragColor = vec4(outgoingLight, diffuseColor.a); 

साथ
if (gl_FrontFacing) { 

    gl_FragColor = vec4(outgoingLight, diffuseColor.a); 

} else { 

    gl_FragColor = diffuseColor; 

} 

यह बहुत अच्छी दिखना चाहिए। इसे material.side = THREE.DoubleSide की आवश्यकता होगी;

clipped torus

Three.js r.76

+0

बिल्कुल वही जो मुझे चाहिए, धन्यवाद! –

+1

@WestLangley एक बनावट का उपयोग करते समय मुझे क्लिपेड सतहों पर ज़ेड-फाइटिंग मिलती है। क्या यह कुछ मैं बच सकता हूं? –

+0

@ वेस्ट लांगले, मुझे भी ज़ेड लड़ाकू मिलती है। मैं जानना चाहूंगा कि इससे बचना संभव है या नहीं! –

2

मैं एक THREE.SectionHelper वर्ग जो दिलचस्प आप जाल है कि आप कतरन कर रहे हैं के अंदर के लिए एक अलग सामग्री/रंग सेट करना चाहते हैं हो सकता है बनाया है। a demo in this fiddle देखें।

var sectionHelper = new THREE.SectionHelper(mesh, 0xffffff); 
scene.add(sectionHelper); 
संबंधित मुद्दे

 संबंधित मुद्दे