Desidero implementare un visualizzatore di immagini che consenta a un utente di eseguire lo zoom e una panoramica uniforme.Utilizzare l'indice come coordinata in OpenGL
Ho già eseguito l'opengl in modalità immediata, ma ora è deprecato a favore di VBO. Tutti gli esempi di VBO posso trovare le coordinate XYZ di ogni punto.
Sospetto di dover conservare tutti i miei dati in VRAM per ottenere un framerate durante il pan che può essere chiamato "liscio", ma ho solo i dati Y (la variabile dipendente). X è una variabile indipendente che può essere calcolata dall'indice e Z è costante. Se devo memorizzare X e Z, i requisiti di memoria (sia la dimensione del buffer che il trasferimento CPU-> GPU) sono triplicati. E ho decine di milioni di punti di dati attraverso i quali l'utente può scorrere, quindi l'utilizzo della memoria sarà non banale.
Esiste qualche tecnica per disegnare un array di vertici 1D, in cui l'indice viene utilizzato come altra coordinata oppure memorizzare un array 1-D (probabilmente in una trama?) E utilizzare un programma shader per generare il XYZ? Ho l'impressione che ho bisogno di un semplice shader in ogni caso con il nuovo modello di pipeline senza caratteristiche fisse per implementare il ridimensionamento e la traduzione, quindi se potessi combinare la generazione di coordinate X e Z e il ridimensionamento/traduzione di Y che sarebbe ideale.
È possibile? Conosci qualche codice di esempio che fa questo? O puoi almeno darmi qualche pseudocodice che dica cosa GL deve chiamare in quale ordine?
Grazie!
EDIT: Per assicurarsi che questo sia chiaro, ecco il codice immediatamente modalità equivalente, e il codice matrice vertice:
// immediate
glBegin(GL_LINE_STRIP);
for(int i = 0; i < N; ++i)
glVertex2(i, y[i]);
glEnd();
// vertex array
struct { float x, y; } v[N];
for(int i = 0; i < N; ++i) {
v[i].x = i;
v[i].y = y[i];
}
glVertexPointer(2, GL_FLOAT, 0, v);
glDrawArrays(GL_LINE_STRIP, 0, N);
nota che v[]
è il doppio di y[]
.
Grazie. Immagino che non sia chiaro come OpenGL sappia che voglio "coord_X" per indicare l'indice del vertice. –
@Ben Voigt: mi sono perso inizialmente, mi dispiace :) La risposta è ora riparata (usando gl_VertexID). – kvark
Grazie, ora ha molto più senso. E potrei usare 'glDrawArrays' per renderlo in massa? Sto chiedendo perché [la pagina di manuale per 'glDrawArrays'] (http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml) dice" Se GL_VERTEX_ARRAY non è abilitato, non vengono generate primitive geometriche. " Non si applica nel mondo OpenGL 3 in cui le posizioni dei vertici sono generate dallo shader? –