2010-11-22 12 views
5

मुझे ओपनजीएल के साथ सी ++ में चिकनी कोनों और चिकनी किनारों के साथ घन बनाने की आवश्यकता है। मुझे पता है कि मेरे पास तीन विकल्प हैं: बेजियर वक्र (शायद, क्या यह संभव है?), कोनों के लिए किनारों और गोलाकारों के लिए सिलेंडर के साथ एक घन या घन के .3ds लोड करें।चिकनी किनारों के साथ घन खींचने का सबसे अच्छा तरीका? Bezier वक्र, एक .3ds या अन्य लोड?

कोई विचार?

+0

[बनाने एक पासा चिकनी किनारों है] (http पर इस सवाल देखें: //stackoverflow.com/q/3480161/59303) - विशेष रूप से मेरा जवाब। – ChrisF

+0

धन्यवाद, यह मेरी खोज में नहीं आया – QuantumKarl

+0

एक .3ds लोड हो रहा है स्वचालित रूप से आपके लिए एक छवि प्रस्तुत नहीं करता है। आपको 3 डी को पार्स करना होगा और इसे स्वयं प्रस्तुत करना होगा। प्रतिपादन के प्रश्न में फ़ाइल प्रारूप से कोई लेना देना नहीं है। –

उत्तर

2

आप सीधे केंद्र से बाहर निकलने वाले मानकों को इंगित करके चिकनी प्रकाश के साथ एक घन अनुकरण कर सकते हैं (एक 8 कोने वाले क्षेत्र को अनुकरण)। यह पूरी तरह से निर्भर करता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। उपर्युक्त विधि का उपयोग करना काफी अच्छा हो सकता है।

यदि आप घुमावदार कोनों (ऊपर बंद) के साथ घन को परिभाषित करना चाहते हैं तो आपको घन को उप-विभाजित करना होगा। वास्तव में यदि आप कोनों के चारों ओर दृढ़ता से उपनिवेश करते हैं लेकिन फ्लैट चेहरों को अनदेखा करते हैं तो आपको एक अच्छा प्रभाव मिलेगा।

यह सब कुछ नीचे आता है कि आप किनारों पर कैसे विभाजित होते हैं। आप इसे कैसे बाहर चिकनी सकता है के बारे में सोचो और आप होगा, निश्चित रूप से, ऊपर एक अच्छा समाधान :) के साथ आते हैं

+0

घन स्वयं एक रूबिक घन को प्रस्तुत करने के लिए एक बाल वर्ग का हिस्सा बनने जा रहा है, इसलिए इसे नज़दीक देखने की आवश्यकता नहीं है लेकिन काफी अच्छी लग रही है। क्या अन्य क्यूब्स के पीछे घन होना बिल्कुल प्रभावित होगा? आपको लगता है कि यह सीखने में कितना समय लगेगा? मैं समय के लिए काफी सीमित हूं – QuantumKarl

3

pseduocode:

mesh rounded_cube(int size, int edge_radius) 
{ 
    mesh result = sphere(edge_radius) 
    vertex octants[] = result.verteces() 
    for each v in octants 
    { 
     if (v.x != 0.0) 
      v.x = size * (v.x/abs(v.x)); 
     if (v.y != 0.0) 
      v.y = size * (v.y/abs(v.y)); 
     if (v.z != 0.0) 
      v.z = size * (v.z/abs(v.z)); 
    } 

    for i in result.vertices().size() 
    { 
     result.vertex[i] += octants[i] 
    } 

    return result; 

} 
+0

+1: अगर मैं enuff प्रतिनिधि था :) – QuantumKarl

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