Hallo liebe Community!
Ich bins mal wieder und hab auch schonwieder ein Problem.
In letzter Zeit beschäftige ich mich mit Java und OpenGL in Java (mit LWJGL).
Bisher funktioniert auch alles super, aber seit ca. einer Stunde sitze ich an einem Motion Blur Skript und komme nicht weiter.
Ich möchte mehrere Quads semi-transparent zeichnen, aber OpenGL will das anscheinend nicht.
Leider finde ich mittels Google keine Lösung
Hier ist der Codeschnipsel der Betroffen ist:
Spoiler anzeigen
// steps = 10 opacity = 1.0f
// vertexarray im nächsten spoiler
public static void moveQuad(int[][] vertexArray, boolean mblur, int steps){
float opacity = 1.0f;
int distance;
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){
for (int pnt=1; pnt<=4; pnt++){
vertexArray[pnt][0] += 5; // Zeichnet das Original neu!
}
if (mblur == true && steps > 1){
for (int qds=1; qds<=steps; qds++){
distance = 100 / qds;
glColor4f(0.8f,0.1f,1.0f, opacity); //Das eigentliche Problem!
glBegin(GL_QUADS);
for (int pnt=1; pnt<=4; pnt++){
glVertex2f((vertexArray[pnt][0] - distance), vertexArray[pnt][1]);
}
glEnd();
opacity -= (1/steps);
}
}
}
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
for (int pnt=1; pnt<=4; pnt++){
vertexArray[pnt][0] -= 5;
}
}
}
Alles anzeigen
VertexArray
//keine panik die variable wird an die funktion erfolgreich übergeben also wundert euch nicht
//warum die variable hier quadVertexes heißt
//Aufbau: Die erste Dimension (1,2,3,4) regelt den Punkt der von OpenGl gezeichnet wird (mittels glVertex2f)
// Die zweite Dimension (0,1) sind die x(0) und y(1) Koordinaten des Punktes
//Der Typ des Arrays ist int quadVertexes[][] = new int[5][2]; falls das wichtig ist
quadVertexes[0][0] = 0;
quadVertexes[1][0] = 100;
quadVertexes[1][1] = 100;
quadVertexes[2][0] = 300;
quadVertexes[2][1] = 100;
quadVertexes[3][0] = 300;
quadVertexes[3][1] = 400;
quadVertexes[4][0] = 100;
quadVertexes[4][1] = 400;
Ich habe bereits viel versucht, das könnt ihr mir glauben, aber ich schaffe es nicht, dass
glColor4f(0.8f,0.1f,1.0f, opacity);
transparenz erstellt,
nicht einmal wenn ich in der Schleife das opacity durch 0.2f ersetze.
Falls ihr euch wundert, wie ich versuche Motion Blur damit zu erstellen, ich versuche folgendes:
Ich will bei Bewegung einfach Quads zeichnen, die genau so aussehen wie das Original,
die neuen Quads sind aber verschoben (nach links wenn es sich nach rechts bewegt),
und zudem transparent.
Die Variable "steps" gibt an, wie viele Quads gezeichnet werden für die unschärfe,
desto mehr steps, desto detailierter der/die/das Motion Blur.
Ich hoffe, dass jemand, der sich mit OpenGL auskennt, mir dabei helfen kann.
Und ich hoffe auch, dass ich keinen Anfängerfehler begangen habe.
MfG. PrideRage
Edit:
Folgende 2 Zeilen haben mir den Weg zur Transparenz ermöglicht
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Nun funktioniert alles so wie es soll.