Ho bisogno di sapere come posso far apparire skybox in quanto è all'infinito ?? So che è qualcosa legato alla profondità, ma non conosco la cosa esatta da disabilitare o abilitare ??OpenGL: Come posso mettere skybox all'infinito
risposta
Innanzitutto, spegnere la profondità scrive/test (non è necessario preoccuparsi di spegnere il test di profondità se si disegna la prima skybox e svuotare la buffer di profondità):
glDisable(GL_DEPTH_TEST);
glDepthMask(false);
Quindi, spostare la fotocamera l'origine e ruotarla l'inverso della matrice modelview:
// assume we're working with the modelview
glPushMatrix();
// inverseModelView is a 4x4 matrix with no translation and a transposed
// upper 3x3 portion from the regular modelview
glLoadMatrix(&inverseModelView);
Ora, disegnare la tua casella di cielo e girare la profondità scrive nuovamente:
DrawSkybox();
glPopMatrix();
glDepthMask(true);
glEnable(GL_DEPTH_TEST);
Probabilmente vorrete usare glPush/PopAttrib()
per assicurarvi che gli altri stati vengano correttamente impostati dopo aver disegnato anche lo skybox (assicuratevi di spegnere le cose come illuminazione o miscelazione se necessario).
È necessario eseguire questa operazione prima di disegnare qualsiasi cosa, in modo che tutte le scritture del buffer del colore si verifichino in cima al riquadro del cielo.
Non c'è infinito. Un skybox è solo una scatola con texture, con uno 0,0 0,0 normale nel mezzo. Ecco un breve tutorial: link text
Genius. Devi disegnarlo all'infinito (senza profondità), perché non ci può essere nulla di più lontano della skybox. Fai la tua ricerca proprio la prossima volta. – Tara
L'approccio migliore che riesco a pensare è disegnarlo su un primo passaggio (o livello), quindi cancellare solo il buffer di profondità. Dopo di ciò, trascina il resto della scena in un altro passaggio. In questo modo lo skybox rimarrà sempre "dietro" la scena. Ricorda solo di usare la stessa fotocamera per entrambi i passaggi e in qualche modo far scattare il skybox sulla fotocamera.
Prima, cancellare il buffer.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Quindi, salvare la matrice modelview corrente e caricare l'identità.
glPushMatrix();
glLoadIdentity();
Quindi rendere il tuo skybox.
Skybox.render();
Poi, cancellare il buffer di profondità e continuare normalmente con il rendering
glClear(GL_DEPTH_BUFFER_BIT);
OtherStuff.render();
glutSwapBuffers();
L'unico problema con il disegno della scatola di cielo è il primo è che il pixel shader verrà eseguito per ogni pixel nella casella di cielo. Solo per essere sovrascritto da un altro oggetto nel tuo mondo in seguito. La cosa migliore è rendere tutti gli oggetti opachi prima di renderizzare il cielo. In questo modo, il pixel shader per la sky box viene eseguito solo per il pixel che supera il test del buffer z.
- 1. cuciture Skybox in OpenGL
- 2. Come posso mettere un div su un'immagine?
- 3. Dove trovare il pacchetto skybox in Unity5?
- 4. Come posso creare ombre economiche in OpenGL?
- 5. Come posso disabilitare OpenGL nella piattaforma Haskell?
- 6. Come aggiungere cielo notturno utilizzando skybox procedurale di Unity 5?
- 7. Mappatura cubo in OpenGL
- 8. OpenGL gluLookAt() non funziona come previsto
- 9. Come posso mettere a fuoco una casella di selezione selectize?
- 10. Come posso ottenere Vim per mettere automaticamente le parentesi graffe?
- 11. Come posso mettere in pausa tutte le animazioni jQuery?
- 12. Come posso mettere in pausa una NSOperation in NSOperationQueue?
- 13. Come posso mettere $ HOME/opt/git/bin al mio PERCORSO?
- 14. come posso mettere in scena una singola riga in SmartGit?
- 15. Perché le persone non usano i tetraedri per le skybox?
- 16. come mettere UISlider verticale?
- 17. Come posso creare una sfera di luce in openGL?
- 18. Come posso trovare la mia versione OpenGL su Ubuntu 13.04
- 19. Come posso convertire questo matematico del puntatore OpenGL in Swift?
- 20. Come posso generare immagini mipmap in OpenGL ES?
- 21. OpenGL o OpenGL ES
- 22. Come mettere un CookieJar sottaceto?
- 23. Come esportare Java OpenGL (JOGL) da Eclipse?
- 24. Come utilizzare OpenGL in JavaFX?
- 25. Come disattivare mipmap in OpenGL
- 26. Come mettere il margine sull'area?
- 27. Come mettere a fuoco div?
- 28. Come mettere propper DBFLow annotazione
- 29. Come riscrivere l'app OpenGL 2D per OpenGL ES?
- 30. Come utilizzare le funzioni OpenGL su un QT OpenGL Widget?
skybox come prima cosa resa è il modo migliore per sprecare un po 'di banda. – Bahbar
Vero, tuttavia, penso che l'OP non sia ancora interessato alle prestazioni. Disegnare la skybox per ultima è più complicato in quanto è necessario assicurarsi di aver gestito correttamente oggetti trasparenti e lontani in modo da non agganciarsi allo skybox. L'ottimizzazione per il test iniziale Z dovrebbe essere eseguita dopo aver implementato correttamente. –