2010-09-24 5 views
5

Je suis nouveau sur OpenGL. J'utilise JOGL. Je voudrais créer un ciel pour mon monde que je puisse texturer avec des nuages ​​ou des étoiles. Je ne suis pas sûr de la meilleure façon de le faire. Mon premier instinct est de faire une très grosse sphère avec l'orientation quadrique GLU_INSIDE, et de la texturer. Y a-t-il un meilleur moyen?OpenGL: Créer un skybox?

+0

Voici un [exemple de carte du cube jogl] (https://github.com/java-opengl-labs/jogl-samples/blob/master/jogl-samples/src/tests/gl_320/texture/Gl_320_texture_cube.java) – elect

Répondre

5

Oui. Faire une sphère vraiment grande a deux problèmes majeurs. D'abord, vous pouvez rencontrer des problèmes avec l'écrêtage. Le ciel peut disparaître s'il se trouve en dehors de votre distance de coupure éloignée. De plus, les objets qui pénètrent à distance dans votre skybox passeront visuellement à travers un mur très solide. Deuxièmement, vous gaspillez beaucoup de polygones (et beaucoup de douleur) pour un effet très simple.

La plupart des gens utilisent un petit cube (d'où le nom "Sky box"). Vous devez rendre le cube dans la pré-passe avec les tests de profondeur désactivés. Ainsi, tous les objets seront rendus sur le cube, quelle que soit leur distance réelle par rapport à vous. Assurez-vous juste que la longueur d'un côté est supérieure à deux fois votre distance de coupure proche, et vous devriez aller bien.

10

Une skybox est une très bonne solution. Vous devrez utiliser un cube map pour cela. Fondamentalement, vous rendez un cube autour de la caméra et mappez une texture sur l'intérieur de chaque face du cube. Je pense qu'OpenGL peut inclure cela dans son pipeline de fonctions fixes, mais si vous utilisez l'approche shader (la fonction fixe est de toute façon déconseillée), vous devrez utiliser des samplers de carte de cube (samplerCUBE en Cg, pas sûr de GLSL). Lorsque vous dessinez la carte du cube, vous voulez également supprimer la traduction de la matrice modelview mais conserver la rotation (cela fait que la skybox "suit" la caméra mais vous permet de regarder autour des différentes parties du ciel).

La meilleure chose à faire est de dessiner la carte du cube après dessinant tous les objets opaques. Cela peut sembler étrange car par défaut le ciel bloquera d'autres objets, mais vous utiliserez l'astuce suivante (si vous utilisez des shaders) pour éviter cela: lors de l'écriture de la position de sortie finale dans le vertex shader, écrivez .xyww . Cela va forcer le ciel au plan lointain qui le fait être derrière tout. L'avantage à ceci est qu'il y a absolument 0 overdraw!

+0

+1 - Bon point sur l'overdraw. En général, cette réponse est plus complète que la mienne. – Andres

0

Les sphères sont agréables à manipuler car elles évitent facilement les distorsions, les coins, etc., qui peuvent être visibles dans certaines situations. Une autre possibilité est un cylindre. Pour un ciel de très haute qualité, vous pouvez simuler l'éclairage du ciel, régler les couleurs de la sphère en fonction de l'heure (=> position du soleil!) Et de la direction, et ajouter des nuages ​​comme objets 3D entre la sphère et la vue position.

Questions connexes