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?
Répondre
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.
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!
+1 - Bon point sur l'overdraw. En général, cette réponse est plus complète que la mienne. – Andres
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.
- 1. coutures Skybox en OpenGL
- 2. Skybox OpenGL ES iPhone et iPad
- 3. Lignes étranges dans Skybox
- 4. OpenGL: créer ma propre caméra
- 5. Comment créer un contexte OpenGL 3 avec Qt 4?
- 6. Utilisez OpenGL ES pour créer un outil de peinture iPhone?
- 7. Comment utiliser opengl pour créer un effet de cylindre
- 8. Créer un prisme triangulaire à angle droit dans OpenGL
- 9. comment créer une application opengl iphone sans un fichier .nib?
- 10. Comment créer un effet de lentille fisheye par openGL?
- 11. créer un effet de bulle sur une grille OpenGL-ES
- 12. Créer les liens d'une chaîne dans OpenGL
- 13. Montez la caméra à l'intérieur de mon skybox
- 14. OpenGL à OpenGL-ES - glBegin();
- 15. Comment utiliser les fonctions OpenGL sur un QT OpenGL Widget?
- 16. Comment créer une grille quadrillée multicolore dans OpenGL ES 2.0?
- 17. Créer de nombreux polygones avec OpenGL est lent?
- 18. Comment dessiner un arc en OpenGL
- 19. Problème avec un brouillard volumétrique dans OpenGL
- 20. Comment créer une fenêtre compatible OpenGL avec un arrière-plan transparent en utilisant xlib et glx
- 21. Opengl Games: Est-ce que je dois connaître les mathématiques 3D pour créer de bons jeux opengl?
- 22. Omni light dans OpenGL?
- 23. Comment sélectionner un objet dans OpenGL ES?
- 24. iPhone OpenGL: Texturer un problème de cube
- 25. OpenGL | ES sur un PC de bureau
- 26. Comment faire pivoter un GluCynlinder dans OpenGL?
- 27. Doublage de pixels OpenGL sur un NSOpenGLView
- 28. Comment dessiner un serpent dans opengl?
- 29. OpenGL ES - Comment dessiner un polygone rempli?
- 30. OpenGL: comment limiter à un composant d'image?
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