2010-04-23 7 views
12

तो, डी 3 डी और ओपनजीएल दोनों में इंडेक्स बफर से आकर्षित करने की क्षमता है।3 इंडेक्स बफर

ओबीजे फ़ाइल प्रारूप हालांकि कुछ अजीब करता है। ऐसा लगता है कि कोने का एक समूह निर्दिष्ट करता है:

 
v -21.499660 6.424470 4.069845 
v -25.117170 6.418100 4.068025 
v -21.663851 8.282170 4.069585 
v -21.651890 6.420180 4.068675 
v -25.128481 8.281520 4.069585 

तो यह की तरह normals के एक झुंड .. निर्दिष्ट करता

 
vn 0.196004 0.558984 0.805680 
vn -0.009523 0.210194 -0.977613 
vn -0.147787 0.380832 -0.912757 
vn 0.822108 0.567581 0.044617 
vn 0.597037 0.057507 -0.800150 
vn 0.809312 -0.045432 0.585619 

तो यह

 
vt 0.1225 0.5636 
vt 0.6221 0.1111 
vt 0.4865 0.8888 
vt 0.2862 0.2586 
vt 0.5865 0.2568 
vt 0.1862 0.2166 

तरह tex coords का एक समूह तो निर्दिष्ट करता है यह मॉडल पर "फेस" निर्दिष्ट करता है जैसे:

 
f 1/2/5 2/3/7 8/2/6 
f 5/9/7 6/3/8 5/2/1 

जहां हम v/t/n हैं, पहला नंबर शीर्षांक सरणी में एक सूचकांक है, दूसरा सूचकांक सरणी सरणी में तीसरा, मानक सरणी में तीसरा है।

तो, मैं glVertexPointer, glNormalPointer और glTexCoordPointer शिखर से प्रत्येक के लिए संकेत सेट करने के लिए उपयोग कर सकते हैं, शिखर बफ़र्स के साथ इस रेंडर करने के लिए

ओपन में की कोशिश में, सामान्य और बनावट सरणियों क्रमशः समन्वय .. लेकिन जब यह बात आती है glDrawElements के साथ ड्राइंग करने के लिए, मैं केवल एक इंडेक्स का सेट निर्दिष्ट कर सकता हूं, यानी संकेतों का उपयोग करते समय इंडेक्स का उपयोग करना चाहिए।

ठीक है, तो क्या? मेरे पास अभी भी सूचकांक के सेट देखने के लिए हैं।

D3D में इसकी ज्यादा एक ही है - मैं 3 धाराओं की स्थापना कर सकते हैं: कोने के लिए एक, texcoords के लिए एक, और normals के लिए एक, लेकिन जब यह IDirect3DDevice9 :: DrawIndexedPrimitive का उपयोग कर की बात आती है, मैं अभी भी केवल एक निर्दिष्ट कर सकते हैं इंडेक्स बफर, जो कोनेक्स सरणी में अनुक्रमणित करेगा।

इसलिए, यह संभव शिखर, texcoord से प्रत्येक के लिए अलग सूचकांक सरणियों का उपयोग कर शिखर बफ़र्स से आकर्षित करने के लिए, और सामान्य बफ़र्स है (या तो D3D या ओपन!), या मैं एक एकल interleaved सरणी बनाने और उसके बाद का दौरा करना चाहिए आईटी?

+0

संभावित सूचकांक [एकाधिक इंडेक्स के साथ रेंडरिंग मेष] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/11148567/rendering-meshes-with-multiple-indices) –

उत्तर

7

ओबीजे को ओपनजीएल या डायरेक्टएक्स पर मैप करने के लिए डिज़ाइन नहीं किया गया था।

जो भी आपने कहा वह सत्य है, और नहीं, प्रति-विशेषता सूचकांक का उपयोग करना संभव नहीं है।

आपको ओबीजे प्रतिनिधित्व को किसी ऐसे चीज में परिवर्तित करना है जो प्रति वर्क्स (केवल संभवतः कुछ चरम डेटा को डुप्लिकेट कर रहा है) का उपयोग करता है।

+0

तो, फॉलो अप के रूप में, __can मुझे लगता है कि एक ओबीजे फ़ाइल __never__ स्विच वर्टेक्स प्रारूप मिडवे स्विच करेगा? – bobobobo

+0

@bobobobo: ठीक है, यह बहुत लंबा रहा है, जबकि मैंने ओबीजे फाइलों से निपट नहीं लिया, लेकिन मुझे लगता है कि अजीब मामले थे जहां एक बनावट मॉडल के कुछ हिस्सों पर ही लागू होती थी। नतीजतन, मुझे लगता है कि केवल ऊर्ध्वाधर हिस्सों के कुछ हिस्सों में इसी तरह के बनावट निर्देशांक थे। यह लगभग 10 साल पहले था, इसलिए, इस पर मेरा भरोसा न करें। – Bahbar

+0

हा हा। अब आप किससे निपटते हैं? – bobobobo

2

आप वास्तव में क्या करना चाहते हैं (बाड़ के डी 3 डी पक्ष से बोलते हुए, मुझे ओपनजीएल क्षमा नहीं है) ओबीजे को कस्टम वर्टेक्स प्रारूप की सरणी में लोड कर रहा है - इस तरह आपके पास एक संरचना है इंडेक्स, कशेरुका, सामान्य और टेक्स्ट समन्वय इसमें है और आप इसे केवल एक DrawIndexedPrimtive का उपयोग करके प्रस्तुत कर सकते हैं।

क्या मैं यहां आपकी समस्या परिभाषा को गलत समझ रहा हूं? मुझे लगता है कि आपको थोड़ी अधिक जानकारी देने की आवश्यकता है - आपको एक एकल ओबीजे फ़ाइल प्रस्तुत करने के लिए एकाधिक इंडेक्स बफर की आवश्यकता नहीं है (जब तक कि आप जानबूझकर इसे बैच नहीं कर रहे हों)। यदि ऐसा है, तो आप जानबूझकर इसे बैच कर रहे हैं, तो आपको DrawIndexedPrimitive के तर्कों पर एक नज़र डालना चाहिए जो आपको उपयोग करने के लिए वीबी में ऑफसेट निर्दिष्ट करने की अनुमति देता है।

+0

मुझे कई इंडेक्स बफर की आवश्यकता है कशेरुका, सामान्य और टेक्सकोर्ड वास्तव में चेहरे के विनिर्देशन में "अलग-अलग दरों" पर अनुक्रमित होते हैं। 'F 1/3/5 2/8/1 4/2/2' में, पहला वर्टेक्स वर्टिस एरे से इंडेक्स 1 का उपयोग करता है, टेक्सास सरणी से इंडेक्स 3 और मानक एरे से इंडेक्स 5 का उपयोग करता है। – bobobobo

+0

हां - आपको ओबीजे डेटा को डीडीडी में सही ढंग से प्रस्तुत करने के लिए कस्टम structs में लोड करने की आवश्यकता है। इस प्रक्रिया के भाग को फेस प्रारूप को सही तरीके से संदर्भित करने के लिए डुप्लिकेटिंग कोड्स की आवश्यकता होती है। डायरेक्टएक्स एसडीके (आपके द्वारा उपयोग किए जा रहे संस्करण के आधार पर) में एक उदाहरण शामिल है। यह \ नमूने \ C++ \ Direct3D10 \ MeshFromOBJ10 –

+0

@JoshuaAtkins पर पाया जा सकता है कि कार्यान्वयन को देखने के लिए यह एक अच्छी जगह थी, मैं आलस्य से बाहर लूप के लिए एक जोड़े के साथ गया। –

3

मैंने एक ही समस्या में भाग लिया है और एक समाधान की तलाश में है। समस्या क्या है कई वर्ट्रिटीज में 1 से अधिक बनावट समन्वय है। मेरा समाधान उस सरणी में प्रत्येक चरम को डुप्लिकेट करना था जिसमें 1 से अधिक बनावट समन्वय है।

समाधान यहाँ है: wavefront obj file format opengl vertex mapping

हालांकि मैं एक समाधान है कि शिखर डेटा OpenCL साथ फ्रेम के बीच में प्रसंस्करण के लिए बरकरार छोड़ देता है प्राप्त करना चाहते हैं,

एक समाधान 1 बनावट को सीमित करने के लिए शिखर प्रति समन्वय है। मुझे पता है कि ओपनग्ल में प्रति वर्क्स एकाधिक बनावट निर्देशांक हैं। मैं इन्हें glGenBuffersARB आदि के साथ कैसे उपयोग कर सकता हूं, मुझे नहीं पता। किसी के पास सुझाव हैं?

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