Ich bin aktuell dabei, mir OpenGL beizubringen, aber ich weiß nicht weiter.
Mein Ziel ist es, einen Teilausschnitt einer Textur auf eine andere kopieren so das ich eine Subtextur der ersten haben, aber irgendwie funktioniert es nicht.
Ich probiere schon seit mehreren Tagen alles mögliche aus und habe auch das Netz bereits viele male durchsucht doch die Beispiele und Doku dazu ist mehr als dürftig.
Unten ist mein Code zu sehen, der "nicht ganz" funktioniert. Ich habe den Viewport korrekt eingestellt und alles weitere bedacht, aber irgendwie bekomme ich beim versuch es zu rendern immer keine Ausgabe.
Wenn ich diese Methode vor meiner Game Loop aufrufe und dann das besagte ergebnis anzeigen lassen will -> fail.
Rufe ich diesen Teil allerdings in jedem Frame auf sehe ich in der Tat ein Quadrat von der angegebenen Größe am rechten Rand in der Mitte. Es ist allerdings völlig schwarz.
Wenn ich weitere Bilder davor und/oder danach rendere sehe ich auf dem schwarzen Dreieck die rote Schrift der original Texturen. Es sieht praktisch aus wie ein Thumbnail. Die anderen Bilder und Texturen sind allerdings komplett schwarz und flimmern hin und wieder.
Ich hab dafür mal ein paar Bilder hochgeladen, dann sieht man sicher besser was ich meine:
Einmal wie es ohne den Versuch aussieht, also die Ausgangssituation: imageshack.us/photo/my-images/814/copyotherwise.png/
Einmal wie es mit dem Code oben, ohne andere Texture/Primitive zu rendern, aussieht: imageshack.us/photo/my-images/…rentingamelooprender.png/
Einmal wie es mit dem Code von oben mit dem rendern von anderen Texturen/Primitiven aussieht: imageshack.us/photo/my-images/…yingameloopmitrender.png/
Einmal, wenn ich den Code nicht (wie in den obigen 3 Situationen) _in_ der GameLoop aufrufe, sondern davor deklariere und dann in der GameLoop zeichnen möchte: imageshack.us/photo/my-images/…yvorgameloopmitrende.png/
Einmal wenn ich die Quelltextur binde und dann _nur_ das Quad zeichne: imageshack.us/photo/my-images/141/copyonlyprimitive.png/
Und einmal wie es aussieht, wenn ich
verwenden: imageshack.us/photo/my-images/…pywithglloadidentity.png/
Mein Ziel ist es, einen Teilausschnitt einer Textur auf eine andere kopieren so das ich eine Subtextur der ersten haben, aber irgendwie funktioniert es nicht.
Ich probiere schon seit mehreren Tagen alles mögliche aus und habe auch das Netz bereits viele male durchsucht doch die Beispiele und Doku dazu ist mehr als dürftig.
Unten ist mein Code zu sehen, der "nicht ganz" funktioniert. Ich habe den Viewport korrekt eingestellt und alles weitere bedacht, aber irgendwie bekomme ich beim versuch es zu rendern immer keine Ausgabe.
Quellcode
- Texture my_sub_image(const Rect rect) { assert(rect !is null); /// Damit bleibt das gesamte Fenster weiß. /* glMatrixMode(GL_MODELVIEW_MATRIX); glLoadIdentity(); */ glViewport(0, 0, rect.width, rect.height); GLuint subId; glGenTextures(1, &subId); // Binden den Zieltextur glBindTexture(GL_TEXTURE_2D, subId); // Parameter der Zieltextur glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, this._format, rect.width, rect.height, 0, this._format, GL_UNSIGNED_BYTE, null); // Quelltextur binden this.bind(); // Quelltextur zeichnen glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(1, 0); glVertex2f(rect.width, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(rect.width, rect.height); // bottom left glTexCoord2i(0, 1); glVertex2f(0, rect.height); glEnd(); // Zieltextur binden glBindTexture(GL_TEXTURE_2D, subId); // kopieren glCopyTexSubImage2D( GL_TEXTURE_2D, 0, rect.get_x(), rect.get_x(), // x, y 0, 0, rect.width, rect.height ); glViewport(0, 0, 400, 400); return new Texture(null, subId, this); }
Wenn ich diese Methode vor meiner Game Loop aufrufe und dann das besagte ergebnis anzeigen lassen will -> fail.
Rufe ich diesen Teil allerdings in jedem Frame auf sehe ich in der Tat ein Quadrat von der angegebenen Größe am rechten Rand in der Mitte. Es ist allerdings völlig schwarz.
Wenn ich weitere Bilder davor und/oder danach rendere sehe ich auf dem schwarzen Dreieck die rote Schrift der original Texturen. Es sieht praktisch aus wie ein Thumbnail. Die anderen Bilder und Texturen sind allerdings komplett schwarz und flimmern hin und wieder.
Ich hab dafür mal ein paar Bilder hochgeladen, dann sieht man sicher besser was ich meine:
Einmal wie es ohne den Versuch aussieht, also die Ausgangssituation: imageshack.us/photo/my-images/814/copyotherwise.png/
Einmal wie es mit dem Code oben, ohne andere Texture/Primitive zu rendern, aussieht: imageshack.us/photo/my-images/…rentingamelooprender.png/
Einmal wie es mit dem Code von oben mit dem rendern von anderen Texturen/Primitiven aussieht: imageshack.us/photo/my-images/…yingameloopmitrender.png/
Einmal, wenn ich den Code nicht (wie in den obigen 3 Situationen) _in_ der GameLoop aufrufe, sondern davor deklariere und dann in der GameLoop zeichnen möchte: imageshack.us/photo/my-images/…yvorgameloopmitrende.png/
Einmal wenn ich die Quelltextur binde und dann _nur_ das Quad zeichne: imageshack.us/photo/my-images/141/copyonlyprimitive.png/
Und einmal wie es aussieht, wenn ich
verwenden: imageshack.us/photo/my-images/…pywithglloadidentity.png/