मैं meshes के लिए मैं OBJLoader से निम्नलिखित आवरण समारोह के माध्यम से में लोड एक सामग्री परिभाषित करने के लिए कोशिश कर रहा हूँ कारण बनता है:तीन जे एस मानचित्र सामग्री WebGL चेतावनी
function applyTexture(src){
var texture = new THREE.Texture();
var loader = new THREE.ImageLoader();
loader.addEventListener('load', function (event) {
texture.image = event.content;
texture.needsUpdate = true;
// find the meshes from the loaded OBJ and apply the texture to it.
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
if(child.name.indexOf("Lens") < 0){
child.dynamic = true;
child.material = new THREE.MeshLambertMaterial({ color: 0xdddddd, shading: THREE.FlatShading, map : texture });
// also tried:
//child.material = new THREE.MeshPhongMaterial({ color: 0x000000, specular: 0x666666, emissive: 0x000000, ambient: 0x000000, shininess: 10, shading: THREE.SmoothShading, map : texture});
// and:
//child.material = new THREE.MeshBasicMaterial({map : texture});
child.material.map = texture; // won't throw the WebGL Warning, but won't show the texture either;
} else {
// works just fine.
child.material = new THREE.MeshPhongMaterial({ color: 0x000000, specular: 0x666666, emissive: 0x000011, ambient: 0x000000, shininess: 10, shading: THREE.SmoothShading, opacity: 0.6, transparent: true });
}
}
});
});
loader.load(src);
}
बनावट लोड है और यह सामग्री लागू करने के लिए समय आ गया है जब जाल के लिए, मुझे कंसोल पर निम्नलिखित चेतावनी मिलना शुरू हो गया:
.WebGLRenderingContext: GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 0
और जाल स्वयं गायब हो जाता है।
मैं यहाँ क्या गलत कर रहा हूं?
अद्यतन
@WestLangley के रूप में टिप्पणी पर बताया: कभी के बाद चीजों को प्रस्तुत किए गए हों बनावट/सामग्री लागू करने के लिए प्रयास करें। दृश्य करने के लिए वस्तु प्रतिपादन से पहले सामग्री बनाने और उसके बाद का उपयोग कर उन्हें बदलने के लिए:
obj.material.map = texture
क्या यह काम करता है यदि आप शुरुआत से सामग्री में बनावट जोड़ते हैं, तो जाल के पहले प्रतिपादन में बनावट शामिल है? – WestLangley
@WestLangley जाल लोड होने पर और दृश्य में जोड़े जाने से पहले एक बनावट लागू होती है और जब यह विफल हो जाती है। जब मैंने "child.material.map = बनावट" का उपयोग करने का प्रयास किया तो मुझे वेबजीएल चेतावनी नहीं मिली, लेकिन बनावट लागू नहीं हुई थी। किसी भी कारण से, "child.material = new THREE.MeshLambertMaterial ({रंग: 0xdddddd, छायांकन: तीन। फ्लैटशैडिंग, मानचित्र: बनावट});" WebGL से कैनवास में रेंडरर को बदलते समय बनावट को लागू करता है। यहां पूरा कोड: https://gist.github.com/jrmoretti/81047c9d6821e4bbaac5 – JayMoretti
WebGLRenderer में, आप इस तथ्य के बाद एक बनावट नहीं जोड़ सकते हैं। हालांकि, आप केवल बनावट बदल सकते हैं। एक साधारण सफेद बनावट वाली सामग्री के साथ एक काम शुरू करना है। – WestLangley