Sto lavorando a un'applicazione di scrittura a mano su iOS. Ho trovato il progetto di esempio "GLPaint" dalla documentazione di iOS, implementato da OpenGL ES, e ho apportato qualche modifica su di esso.Come evitare la sovrapposizione della trasparenza usando OpenGL?
Tracciamento dei punti di contatto e calcolo delle curve tra i punti e disegno solo le immagini delle particelle per far sembrare che il dito sia il punto di passaggio.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, brushData); // burshData is from CGImage, it is
// vertexBuffer is generated based on the calculated points, it's just a sequence of point where need to draw image.
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
Quello che ho ottenuto è una linea solida che sembra abbastanza buona. Ma ora voglio disegnare l'evidenziazione semitrasparente invece della linea continua. Quindi sostituisco l'immagine delle particelle con una trasparenza del 50% senza modificare il codice.
Result of 50% transparency particle image
c'è qualcosa di sbagliato con la miscela.
I disegnare tre punti tramite l'immagine di particella semitrasparenza, e l'area di intersezione dovrebbe tenere trasparenza del 50%.
Qual è la soluzione?
Il problema è che è necessario eliminare il superamento, che _per il caso generale_ non è possibile con "solo fusione". È possibile utilizzare il buffer di profondità (con test alfa) ma ciò non sarà propriamente l'antialias. Se vuoi che questo sia correttamente antialiasing, non è banale ragionare, almeno non nel caso generale. Dovresti prima eseguire il rendering su un framebuffer extra e compilarlo in un secondo passaggio. – Damon
Grazie per la risposta. Sono un principiante di OpenGL, non sono ancora chiaro riguardo la maggior parte delle concezioni in OpenGL. Penso che l'antialias non sia il problema. Potresti specificare il codice con maggiori dettagli? –