2010-11-22 24 views
5

OpenGL ile C + + düzgün köşeleri ve pürüzsüz kenarları olan bir küp yapmam gerekiyor. i üç seçenek vardır bildiğim : Bezier eğrileri köşeler için kenarları ve küreler için silindir bir küp, (belki mümkün olduğu) ya da bir küp .3 ds yükleyin.Pürüzsüz kenarlı bir küp çizmenin en iyi yolu? Bezier Eğrisi, .3ds veya başka bir tane mi yüklüyor?

Herhangi bir fikrin var mı?

+0

(http [Bir zar düzgün kenarlara sahip yapım] bu soruya bakın: //stackoverflow.com/q/3480161/59303) - özellikle cevabım. – ChrisF

+0

teşekkürler, aradığım sonuç bulamadı. – QuantumKarl

+0

Bir .3ds dosyası sizin için otomatik olarak bir imaj oluşturmaz. 3ds'ı ayrıştırıp kendin yapmalısın. Oluşturma sorusunun dosya formatıyla ilgisi yoktur. –

cevap

2

edebilir (8 köşeli küre taklit) merkezden doğrudan dışarı normaller işaret ederek pürüzsüz aydınlatma ile küp simüle edebilirsiniz. Tam olarak ne yapmaya çalıştığınıza bağlı. Yukarıdaki yöntemi kullanmak yeterince iyi olabilir.

Eğer kavisli köşelere sahip bir küp (kadar yakın) o zaman küpü bölmek zorunda olacak tanımlamak isterseniz

. Aslında, köşelerin etrafına güçlü bir şekilde bölünür ama düz yüzleri görmezden gelirseniz, iyi bir etki elde edersiniz.

Tüm bu size kenarlarında bölmek nasıl düşünüyor aşağı gelir. Bunu düzeltmek nasıl düşünün ve siz, mutlaka ince bir solüsyon :) ile geleceğiz

+0

küpün kendisi bir rubik küpü oluşturmak için bir çocuk sınıfının bir parçası olacak, bu yüzden yakından görülmesi gerekmez, ancak oldukça iyi görünmesi gerekir. Diğer küplerin arkasında yer alan bir küp bunu etkiler mi? Bunun ne kadar süreceğini öğrenmek istersin? – 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 için oldukça sınırlıyım. – QuantumKarl

İlgili konular