2012-11-29 11 views
6

से पिक्सल पढ़ें मेरे पास एक वेबजीएलटेक्चर ऑब्जेक्ट है। मैं उस बनावट के पिक्सल कैसे प्राप्त करूं (वेबजीएल के रीड पिक्सेल के समान, लेकिन बनावट के लिए)?वेबजीएल बनावट

एक विचार है कि मेरे पास एक कैनवास और वेबग्ल संदर्भ को संरक्षित करने के लिए है, ड्रॉइंगबफर = सत्य, और इस कैनवास पर अपना बनावट प्रस्तुत करें ताकि यह 2 डी फ्लैट दिखाए, और फिर रीड पिक्सेल का उपयोग करें। क्या यह दृष्टिकोण उचित है? क्या इसके लिए किसी के पास नमूना कोड है?

उत्तर

7

आप फ़्रेमबफर को बनावट को जोड़ने और फ्रेम बफर पर रीड पिक्सेल को कॉल करने का प्रयास कर सकते हैं।

init समय

// make a framebuffer 
fb = gl.createFramebuffer(); 

// make this the current frame buffer 
gl.bindFramebuffer(gl.FRAMEBUFFER, fb); 

// attach the texture to the framebuffer. 
gl.framebufferTexture2D(
    gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, 
    gl.TEXTURE_2D, texture, 0); 

// check if you can read from this type of texture. 
bool canRead = (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE); 

// Unbind the framebuffer 
gl.bindFramebuffer(gl.FRAMEBUFFER, null); 

पर पढ़ा समय

if (canRead) { 
    // bind the framebuffer 
    gl.bindFramebuffer(gl.FRAMEBUFFER, fb); 

    // read the pixels 
    gl.readPixels(......); 

    // Unbind the framebuffer 
    gl.bindFramebuffer(gl.FRAMEBUFFER, null); 
} 

प्रारूप = gl.RGBA की बनावट के लिए पर, type = gl.UNSIGNED_BYTE canRead हमेशा सच होना चाहिए। अन्य प्रारूपों और प्रकारों के लिए गलत हो सकता है।

+0

क्या एक अच्छा विचार है! धन्यवाद!! :) – Andy

+0

तो, जैसा कि मैं समझता हूं, यह केवल स्तर = 0 के बनावट के लिए काम करेगा, क्योंकि gl.framebufferTexture2D को स्तर = 0 की आवश्यकता होती है। क्या शून्य-शून्य स्तरों को संभालने का कोई तरीका है? – Andy

+0

आप अपने शेडर्स में बनावट 2 डीएलओडी का उपयोग करके एक विशेष स्तर को दूसरे बनावट के स्तर 0 में प्रस्तुत कर सकते हैं, फिर उसे पढ़ें। – gman