2013-05-10 3 views
6

मैं स्क्रीन पिक्सेल से संबंधित मनमाने ढंग से स्थितियों में कोनों के साथ एक आयताकार बनावट को मैप करना चाहता हूं। कुछ drawQuad(x1,y1, x2,y2, x3,y3, x4,y4) की तरह कुछ। क्या WebGL के साथ ऐसा करने का कोई डेमो है?वेबग्ल प्रोजेक्शन मैपिंग/क्वाड वारिंग/कोने पिन

वेबजीएल के साथ मैंने जो कुछ भी किया है वह तीन.जेएस के साथ रहा है, जो ज्यामिति प्रक्षेपण, प्रकाश और कैमरा को आसान बनाता है। लेकिन यह आसान है: प्रकाश या कैमरा कोणों की कोई आवश्यकता नहीं, केवल चार कोनों की पूर्ण स्थिति को इनपुट करना। यदि मैं इस निचले स्तर पर प्राप्त कर सकता हूं तो मैं Three.js का उपयोग करने का विरोध नहीं कर रहा हूं।

मुझे क्वार्ट्ज संगीतकार में an explanation with a GLSL vertex shader मिला।


अद्यतन

अपने प्रोजेक्ट में मैं अब के लिए सीएसएस के साथ जा रहा है क्योंकि मैं किसी भी तत्व (कैनवास, img, div, वीडियो) खिंचाव कर सकते हैं, और गैर के साथ फाड़ नहीं मिलता है समाप्त हो गया प्लानर आकार ... आखिर में मैं वेबजीएल विकल्प पर फिर से जा सकता हूं। अगर किसी के पास अनियंत्रित पदों पर चार कोनों को खींचने का उदाहरण है, तो मैं इसे यहां जोड़ दूंगा।

meemoo mapper

+0

मिले एक डेमो CSS3D का उपयोग कर: http://www.is-real.net/ प्रयोग/सीएसएस 3/आश्चर्य-वेबकिट/ – forresto

+0

यहां सी है मैट्रिक्स गणित के भयानक स्पष्टीकरण और डेमो को सीएसएस में ऐसा करने की आवश्यकता है: http://math.stackexchange.com/a/339033/78081 – forresto

+0

आपको सीएसएस 3 या वेबग्ल कोड की आवश्यकता है? –

उत्तर

3

मैं दृढ़ता से "सीखना WebGL" से पढ़ ट्यूटोरियल सुझाव देते हैं।

क्वाड के प्रत्येक चरम के लिए आप इसे "यूवी निर्देशांक" भेजते हैं। यूवी निर्देशांक vec2 डेटा हैं जो बताते हैं कि बनावट का कौन सा हिस्सा वर्टेक्स से बंधे हैं।

तो उदाहरण के लिए, (0,0) यूवी बनावट के ऊपरी बाएं कोने का प्रतिनिधित्व करता है, जबकि (0.3, 0.4) बनावट की स्थिति का प्रतिनिधित्व करता है जो बनावट की 30% चौड़ाई और 40% ऊंचाइयों के अनुरूप होता है।

GLSL शेडर में, वहाँ एक विशेष समारोह है - texture2D, और यहाँ उपयोग है:

uniform sampler2D uTexture; 
varying vec2 vUV; 
void main() 
    vec4 color_from_texture = texture2D (uTexture, vUV); 
    gl_FragColor = color_from_texture; 
} 

इस नमूने बनावट कहा जाता है, और आप texture2D कार्यप्रणाली को कॉल करके कुछ की स्थिति में बनावट से डेटा पढ़ने।

तो चौकोर के लिए, शिखरों में पदों (x1, y1), (x2, y1), (x1, y2), (x2, y2) और उनके संबंधित यूवी निर्देशांक (0.0, 0.0), (1.0 , 0,0), (0.0, 1.0), (1.0, 1.0)। ध्यान दें कि हमने यूवी निर्देशांक को पूरी तरह से एक बिंदु से दूसरे में परिभाषित करके बनावट को कैसे बनाया।

वर्टेक्स शेडर कुछ इस तरह दिखेगा:

attribute vec2 aUV; 
attribute vec2 aVertexPos; 
varying vec2 vUV; 
void main() { 
    vUV = aUv; 
    gl_Position = vec4(aVertexPos, 1.0); // maybe modelViewMatrix * projMatrix * vec4(aVertexPos, 1.0) 
} 

छायांकर्ता यूवी कोने है कि एक त्रिकोण गठबंधन इसलिए प्रत्येक खंड यूवी इधर-उधर अपने स्वयं के, अंतर्वेशित मूल्य मिल जाएगा और इस प्रकार अलग संरचना डेटा का नमूना होगा के बीच निर्देशांक को जोड़ देगा।

ध्यान से इस पढ़ें, और उसके बाद, ट्रैक्टर बनाने आसान होना चाहिए: http://learningwebgl.com/blog/?p=507

आशा इस मदद करता है।

      •  

लाइव उदाहरण: http://abstract-algorithm.com/quad.html

+0

मैं निश्चित रूप से उदाहरण से सीख सकता हूं, लेकिन एनीमेशन एक्स, वाई, जेड रोटेशन बदल रहा है। क्वाड के चार कोनों को सीधे परिभाषित करना कितना मुश्किल होगा? 'ड्रॉसेन (x1, y1, x2, y2, x3, y3, x4, y4) की तरह ' – forresto

+0

आप लाइव उदाहरण' वर्टिसेस 'सरणी के स्रोत कोड में पा सकते हैं। इसमें मूल्यों को बदलकर आप सीधे कोनों की स्थिति बदल सकते हैं। आप फंक्शन draw_quad (xy1, xy2, xy3, xy4) लिख सकते हैं जो आप चाहते हैं जो करेंगे। आप THREE.js या किसी अन्य इंजन का भी उपयोग कर सकते हैं, लेकिन मुझे नहीं पता कि यह आपकी आवश्यकताओं के अनुरूप कितना अच्छा होगा। –

+0

मुझे कोनों को अलग करने के लिए और अधिक कशेरुक और एक कशेरुक शेडर की भी आवश्यकता होगी, क्योंकि इस प्रकार की वार्प त्रिकोण स्पष्ट करता है: http://i.imgur.com/FvYeVzh.png – forresto

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