Domanda

In C ++ OpenGL, voglio disegnare ogni pixel manualmente (come una trama presumo) a un semplice quadrato primitivo o anzi 2 poligoni che formano un quadrato.

Non ho idea da dove cominciare, o ciò che le frasi da cercare. Sto cercando texture mapping o la creazione di strutture? La maggior parte degli esempi sono per caricare da un file, ma non voglio farlo.

Ho provato a leggere la mia guida OpenGL programmazione libro, ma il suo solo un labirinto come io sono abbastanza nuovo per OpenGL. Si prega di aiutare.

È stato utile?

Soluzione

Date un'occhiata da vicino a glTexImage2D. Questa è la chiamata che carica l'immagine in OpenGL per una texture 2D.

glTexImage2D ha effettivamente un puntatore prima per i dati dei pixel nell'immagine. È possibile allocare la memoria se stessi, e impostare direttamente i dati di immagine (come volete), quindi chiamare questa funzione per passare l'immagine di OpenGL.

Dopo aver creato la trama, è possibile associare allo stato in modo che i triangoli utilizzano quella struttura.

Non c'è nulla in OpenGL che richiede direttamente immagini utilizzate come texture per essere caricati da file. Una buona risorsa per le texture può essere trovato in questo articolo GameDev.

Altri suggerimenti

Se la piazza si sta disegnando a 2 è dimensionale e non ruotati, si può essere alla ricerca di glDrawPixels . Esso permette di disegnare un'area rettangolare di pixel direttamente al buffer senza usare poligoni.

Se sei nuovo allora mi sento di raccomandare a partire dal tutorial di uno su NeHe .

Da notare che, mentre glTexImage2D() prende un puntatore ai pixel da caricare, che non si preoccupa di eventuali modifiche a tali dati dopo la chiamata. Cioè, i dati vengono caricati in realtà dall'area di memoria specificata, e OpenGL crea una copia della propria.

Questo significa che se le modifiche dei dati, è necessario sia ri-fare la chiamata glTexImage2D (), o usare qualcosa come glTexSubImage2D() di fare un aggiornamento parziale. Vorrei raccomandare test e profiling per vedere se l'aggiornamento sub-struttura è veloce, non so come vero e proprio driver di ottimizzare per questo caso.

Grazie a Reed Copsey per me che punta verso glTexImage2D . Risulta questo è molto semplice; solo passare una matrice di GLubyte alla funzione <=> (così come tutte le funzioni necessarie per impegnare la struttura, ecc). Non ho provato questo frammento esatto di codice, ma dovrebbe funzionare bene. Gli elementi dell'array rappresentano una versione seriale delle righe, colonne e canali.

int pixelIndex = 0;
GLubyte pixels[400];

for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; x++)
    {
         for (int channel = 0; channel < 4; channel++)
         {
             // 0 = black, 255 = white
             pixels[pixelIndex++] = 255;
         }
    }
}

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, pixels);

ho letto nel libro OpenGL è possibile utilizzare una matrice 2D per le immagini in bianco e nero, quindi immagino che si potrebbe utilizzare un array 3D anche.

Quello che state cercando è generalmente chiamato "il rendering di texture."

http://developer.nvidia.com/object/gdc_oglrtt.html

Questo tutorial è piuttosto vecchio. Direi che alcune di quelle estensioni non sono in realtà estensioni in versioni più recenti di OGL. Mi dispiace non posso essere più di aiuto. Io non lavoro direttamente con API grafiche di molto di più, e se l'ho fatto io userei D3D se potevo (per evitare la zuppa di estensione, e per altre ragioni che non voglio annoiarvi con qui.)

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