2010-11-22 24 views
5

J'ai besoin de faire un cube avec des coins lisses et des bords lisses en C++ avec openGL. pour tout ce que je sais j'ai trois options: courbes de Bézier (peut-être, est-ce possible?), Un cube avec des cylindres pour les bords et des sphères pour les coins ou charger un cube .3ds.La meilleure façon de dessiner un cube avec des bords lisses? Courbe de Bézier, charger un .3ds ou autre?

Des idées?

+0

Voir sur cette question [faire un dé ont des bords lisses] (http: //stackoverflow.com/q/3480161/59303) - spécifiquement ma réponse. – ChrisF

+0

merci, ceci n'est pas venu dans ma recherche – QuantumKarl

+0

Chargement d'un .3ds ne rend pas automatiquement une image pour vous. Vous devez analyser le 3ds et le rendre vous-même. La question du rendu n'a rien à voir avec le format de fichier. –

Répondre

2

Vous pouvez simuler un cube avec un éclairage régulier en dirigeant les normales directement depuis le centre (en simulant une sphère à 8 angles). Cela dépend totalement de ce que vous essayez de faire exactement. En utilisant la méthode ci-dessus peut être parfaitement suffisant.

Si vous voulez définir un cube avec des coins courbes (de près), vous devrez subdiviser le cube. En fait, si vous subdivisez fortement autour des coins mais ignorez les faces plates, vous obtiendrez un bon effet.

Tout ce qui revient à penser à la façon dont vous subdivisez sur les bords. Pensez à la façon dont vous pourriez lissez et vous, sûrement, venez avec une solution bien :)

+0

le cube lui-même va faire partie d'une classe enfant pour le rendu d'un cube Rubik, il n'a donc pas besoin d'être vu de près mais doit être assez beau. Est-ce qu'un cube se trouvant derrière d'autres cubes le ferait? Combien de temps pensez-vous que cela prendrait pour apprendre? Je suis assez limité pour le temps – 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: si j'avais rep enuff à :) – QuantumKarl