Domanda

Sto scrivendo un'applicazione OpenGL Perl di base per visualizzatori di pianeti, solo per divertimento. Ho le basi che funzionano, con il glorioso pianeta, implementato attraverso un gluSphere () , ruotando con la classica mappa delle trame della terra applicata.

Ora, cosa succede se voglio applicare una seconda mappa di trama tramite OpenGL (diciamo, le "nuvole di terra")?

Ovviamente, posso mescolare da solo le due mappe delle trame in PhotoShop o in qualche altra applicazione grafica, ma c'è un modo attraverso l'API OpenGL?

Ho provato a caricare le due trame e a generare le mipmap ma il pianeta è mostrato con solo la prima trama applicata, non la seconda.

È stato utile?

Soluzione

Come ha detto Jim Buck, puoi ottenere l'effetto desiderato con il multitexturing.

Tuttavia, non penso che le quadriche GLU supportino la generazione di coordinate multitexture (cioè usando glMultiTexCoord * () vs. glTexCoord * (). Quindi, penso che avrai bisogno del tuo codice sfera per seguire il percorso multitexture.

In alternativa, potresti essere in grado di cavartela disegnando una sfera leggermente più grande attorno a quella attuale che ha la seconda mappa di trama su di essa (con l'uso appropriato del canale alfa e della fusione). È probabile che ciò causi il combattimento con z, quindi potrebbe essere più un problema di quanto valga la pena

Scrivere il proprio codice sfera non è difficile - probabilmente il percorso più semplice per ottenere risultati soddisfacenti.

Altri suggerimenti

Come vuoi combinare le tue trame? Dovresti essere in grado di ottenere l'effetto desiderato se usi semplicemente il multi-texturing:

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture1ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

Assicurati di impostare le tue chiamate glTexEnvf a seconda di come vuoi combinare le trame. Quindi chiama gluSphere ().

Sono d'accordo con Drew Hall. Forse più semplice creare una seconda sfera. E non tutte le carte opengl supportano il multi-texturing.

Puoi contrastare il combattimento con z con glPolygonOffset.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top