2010-11-22 22 views
5

Ho bisogno di creare un cubo con angoli smussati e bordi lisci in C++ con openGL. per quanto ne so ho tre opzioni: curve di Bézier (forse, è possibile?), Un cubo con cilindri per i bordi e sfere per gli angoli o caricare un .3ds di un cubo.Il modo migliore per disegnare un cubo con bordi smussati? Bezier Curve, carica un .3ds o altro?

Qualche idea?

+0

Vai a questa domanda su [fare un dado hanno bordi lisci] (http: //stackoverflow.com/q/3480161/59303) - specificamente la mia risposta. – ChrisF

+0

grazie, questo non è venuto nella mia ricerca – QuantumKarl

+0

Caricamento di un .3ds non esegue automaticamente il rendering di un'immagine per voi. Devi analizzare i 3d e renderlo da solo. La questione del rendering non ha nulla a che fare con il formato del file. –

risposta

2

È possibile simulare un cubo con illuminazione uniforme puntando le normali direttamente fuori dal centro (simulando una sfera a 8 angoli). Dipende totalmente da cosa esattamente stai cercando di fare. L'utilizzo del metodo sopra può essere perfettamente buono.

Se si desidera definire un cubo con angoli curvi (da vicino), si dovrà suddividere il cubo. Infatti se dividi con forza intorno alle curve ma ignori le facce piatte otterrai un buon effetto.

Tutto si riduce a pensare a come suddividere ai bordi. Pensate a come si potrebbe liscia fuori e ti, sicuramente, arriva con una bella soluzione :)

+0

il cubo stesso farà parte di una classe figlia per il rendering di un cubo di rubik, quindi non ha bisogno di essere visto da vicino ma deve essere abbastanza bello. Un cubo che si trova dietro ad altri cubi lo influenzerebbe del tutto? quanto pensi che ci vorrebbe per imparare? sono abbastanza limitato per il tempo – 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: se avessi un rappresentante enuff :) – QuantumKarl

Problemi correlati