2D Grafik JOGL

Runtime

Top Contributor
Hi Leute,

ich hab mich mal mit JOGL auseinander gesetzt und bin ein bisschen enttäuscht :(. Nirgends hab ich etwas gefunden wie man mit JOGL Linear- oder Radialgradients zeichnen könnte. Wie kann ich das machen? Und warum finde ich nichts?
 

Marco13

Top Contributor
Etwas vorgefertigtes wie "GradientPaint" gibt es da eben nicht. (Du solltest nicht speziell nach so etwas in JOGL, sondern in OpenGL allgemein suchen, da findet man eher was). Je nachdem, wie viel Aufwand man da reinstecken will (und WO man hin zeichnen will) gäbe es da unterschiedliche Ansätze.
 

Marco13

Top Contributor
Arbeitszeit oder Rechenzeit? (Genau darum geht es ;) )

Wenn das ganze aber nur "irgendwie" auf den Bildschirm gebracht werden soll, würde man natürlich einfach ein Rechteck (GL_QUAD) malen, bei dem alle Eckpunkte unterschiedliche Farben haben. Für ein Radiales GradientPaint würde man einen rechteckigen TRIANGLE_FAN malen, bei dem der Mittelpunkt die gewünschte Farbe hat. In beiden Fällen übernimmt OpenGL das Interpolieren. Wenn man noch irgendwie an die Farben rankommen will, (und/oder das mit GL >= 3.2 und daher mit einem eigenen Shader gemacht werden soll) wird's aufwändiger....

Bestimmt postet Fancy gleich ein paar Beispiele :)
 

Marco13

Top Contributor
Es ging darum, dass man oft diw Wahl ein, ein Programm mit 10 Zeilen zu schreiben, das 1 Minute lang rechnet, oder ein Programm mit 100 Zeilen, das 10 Sekunden lang rechnet (und im übertragenen Sinn: Bei OpenGL geht's meistens um letzteres ;) ).
Also, wo sollen die Daten hin? Einfach irgendwie auf den Bildschirm, oder in ein PBO, oder einen Array (oder in ein BufferedImage :autsch: ) ?
 
G

Guest2

Gast
Moin,

und auch: Wo kommen die Daten her und wie sehen die konkret aus.

Ein linearer Farbverlauf auf einem Dreieck ist ja keine Raketenwissenschaft. ;)
Z.B. bei nehe im 3. Tutorial. Ein radialer auf einem Dreieck, wäre da schon spannender. ;) Wobei mir ehrlich gesagt der Sinn nicht klar wäre. (Außer das man danach wohl weis wie shader funktionieren ;))

Gruß,
Fancy
 

Runtime

Top Contributor
Ich will z. B. ein Polygon mit einem Linearen Gradient füllen, der von einem Punkt zum ander geht, die auch ausserhalb des Polygons sein können.
 
G

Guest2

Gast
Entweder Du rechnest für Deinen Gradienten kurz die Farbwerte an den einzelnen Eckpunkten aus und setzt die Farben der Vertices entsprechend (innerhalb des Polygons interpoliert OpenGL dann (hoffe ich zumindest, schon ewig kein Polygon mehr gezeichnet)) oder Du schreibst einen Fragmentshader, der die beiden Koordinaten und Farben des Gradienten als uniforme Variablen bekommt und die Farbe des Fragments entsprechend berechnet.

Grundsätzlich ist ein Polygon aber schon hässlich. Schöner ist es, seine Geometrie zu triangulieren.

Gruß,
Fancy
 

Runtime

Top Contributor
Ich kenn mich noch nicht so mit JOGL aus, von Shadern hab ich noch nie etwas gehört.
Warum sind Polygons hässlich?
Wie würde ich ein Polygon mit einem MultiLinearGradient oder RadialGradient füllen?
 

Marco13

Top Contributor
Polygone sind häßlich, weil sie konkav und nicht-planar sein können. Die Grafikkarte kann ohnehin nur Dreiecke, alles andere sind Pseudo-Vereinfachungen für den Benutzer.

Aber in deinem Fall geht es ja nur um 2D...?

Hast du dir schon einen "Rahmen" gebastelt, so dass JOGL erstmal läuft? In Richtung des o.a. Nehe-Beispiels?
 
G

Guest2

Gast
Shader haben nur indirekt was mit jogl zu tun. Eigentlich sind die ein Teil von OpenGL, mit dem man "eine Art von Berechnungsvorschrift" definieren kann, welche genau beschreibt, wie "Geometrien" dargestellt werden sollen. Man hat damit wesentlich mächtigere Möglichkeiten zu bestimmen, wie etwas dargestellt wird. Allerdings ist der Einstig in die Shader auch "wesentlich" schwieriger.

Polygone sind hässlich, weil sie nicht von der Grafikkarte dargestellt werden können. Der Grafikkartentreiber wandelt alles, was kein Dreieck ist, per Software in Dreiecke um. Wenn man ein Polygon einfach per glVertex definiert, geschieht dies wohl auch für jedes Frame neu.

Insbesondere können durch die Triangulierung merkwürdige Effekte entstehen, welche man von einem Polygon so nicht erwarten würde. Z.B. der oben angedeutete Ansatz mit der Farbberechnung für die Eckpunkte eines Polygons um einen linearen Gradient darzustellen:

Java:
package yc021;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.fixedfunc.GLMatrixFunc;

import com.jogamp.opengl.util.Animator;


public class Poly implements GLEventListener {


    private static final float[] g1pos    = { -1f, -0f };
    private static final float[] g2pos    = { +1f, +0f };

    private static final float[] g1col    = { 1f, 0f, 0f };
    private static final float[] g2col    = { 0f, 1f, 0f };

    private static final float   g1g2dist = (float)(Math.pow(g2pos[0] - g1pos[0], 2) + Math.pow(g2pos[1] - g1pos[1], 2));

    private GL2                  gl;


    @Override
    public void init(final GLAutoDrawable drawable) {

        gl = drawable.getGL().getGL2();

    }


    @Override
    public void display(final GLAutoDrawable drawable) {

        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
        gl.glBegin(GL2.GL_POLYGON);
        setVertex(+0.0f, -1.0f);
        setVertex(+1.0f, -0.0f);
        setVertex(+0.0f, +1.0f);
        setVertex(-1.0f, +0.0f);
        gl.glEnd();

    }


    private void setVertex(final float... pos) {

        final float factor = ((pos[0] - g1pos[0]) * (g2pos[0] - g1pos[0]) + (pos[1] - g1pos[1]) * (g2pos[1] - g1pos[1])) / g1g2dist;

        final float r = (1 - factor) * g1col[0] + factor * g2col[0];
        final float g = (1 - factor) * g1col[1] + factor * g2col[1];
        final float b = (1 - factor) * g1col[2] + factor * g2col[2];

        gl.glColor3f(r, g, b);
        gl.glVertex2f(pos[0], pos[1]);

    }


    @Override
    public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) {

        gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
        gl.glLoadIdentity();

    }


    @Override
    public void dispose(final GLAutoDrawable arg0) {

    }


    public static void main(final String[] args) throws IOException {

        final Poly base = new Poly();
        final Frame frame = new Frame();
        final GLCanvas canvas = new GLCanvas();
        final Animator animator = new Animator(canvas);

        canvas.addGLEventListener(base);
        frame.add(canvas);
        frame.setSize(500, 400);
        frame.addWindowListener(new WindowAdapter() {


            @Override
            public void windowClosing(final WindowEvent e) {

                new Thread(new Runnable() {


                    public void run() {

                        animator.stop();
                        System.exit(0);

                    }

                }).start();
            }
        });

        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        animator.start();

    }

}


Sieht im Ergebnis erstmal so aus:

poly1.png


Also so wie man es erwarten würde. Verschiebt man nun die Koordinaten des Gradienten:

Java:
    private static final float[] g1pos    = { -0f, -0f };
    private static final float[] g2pos    = { +1f, +0f };

Sieht das Ergebnis immer noch erwartungsgemäss aus:

poly2.png


Ändert man nun aber die Reihenfolge des Polygons auf:

Java:
        gl.glBegin(GL2.GL_POLYGON);
        setVertex(+1.0f, -0.0f);
        setVertex(+0.0f, +1.0f);
        setVertex(-1.0f, +0.0f);
        setVertex(+0.0f, -1.0f);
        gl.glEnd();

Ist es leider vorbei:

poly3.png



Der Hintergrund ist einfach: OpenGL transformiert das Polygon in Dreiecke. Die Dreiecke werden dargestellt, indem die Farben der Eckpunkte linear über die Kanten interpoliert werden. Linear über die Kanten der Dreiecke ist aber nicht zwangsläufig linear über die Fläche des Polygons.

Abhilfe würden hier nur Shader bringen, da dort der Farbwert für jeden einzelnen Pixel berechnet werden kann, unabhängig der Geometrie. Aber Shader sind eben nicht so einsteigerfreundlich und ihmo sollte man schon etwas OpenGL Erfahrung haben, ehe man dort einsteigt.

Gruß,
Fancy
 
G

Guest2

Gast
Ja, das wäre kein Problem. Einfach den Abstand zwischen dem gewünschten Zentrum und dem aktuellen Fragment berechnen und anhand dessen dann die Farbe des Fragments bestimmen.

Im Verhältnis zu dem, was es braucht, ehe man den ersten eigenen Shader wirklich verstanden hat, ist das aber Kindergeburtstag. Ein paar OpenGL Grundlagen sollten vorher schon sitzen.

Gruß,
Fancy
 

Runtime

Top Contributor
Kennst du eine Library, mit der man Shapes definieren kann, Effekte wie GaussianBlur, MotionBlur, Outer/InnerGlow usw. und das ganze OpenGL basiert ist?
 
G

Guest2

Gast
Nein, leider nicht. Aber vielleicht bietet eine der fertigen Engines das, was Du suchst, dann könnte auch der Nachbarthread interessant sein / werden.

Gruß,
Fancy
 

Runtime

Top Contributor
Ok geht mir zu lange. Kennst du ein gutes tut über Shader?
Edit:
Oder könntest du ein Beispiel machen mit Shader?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Feste Blöcke mit Grafik Spiele- und Multimedia-Programmierung 9
Anfänger2011 Wichtig: Grafik und Sprites erstellen Spiele- und Multimedia-Programmierung 1
T grafik in bereiche einteilen (dartboard) Spiele- und Multimedia-Programmierung 14
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
D einfache 2D Grafik in JAVA. absoluter Anfänger Spiele- und Multimedia-Programmierung 5
Developer_X 3D Grafik Formeln Spiele- und Multimedia-Programmierung 35
S Grafik erstellen für Java Spiel Spiele- und Multimedia-Programmierung 8
Developer_X Java3D Grafik Boni Spiele- und Multimedia-Programmierung 8
H Grafik verschwindet durch Größenveränderung von GridBag Spiele- und Multimedia-Programmierung 5
N Felder auf Grafik Spiele- und Multimedia-Programmierung 2
R Grafik-Engine? MemoryImageSource? Spiele- und Multimedia-Programmierung 10
E Tester mit Intels Onboard-Grafik (o.ä.) gesucht! Spiele- und Multimedia-Programmierung 28
N Grafik als Hintergrund eines Rechtecks verwenden? Spiele- und Multimedia-Programmierung 4
G Entscheidungshilfe: Grafik-API Spiele- und Multimedia-Programmierung 5
T Spiel mit schöner Grafik, bitte testen Spiele- und Multimedia-Programmierung 10
V Wie bewege ich eine eingefügte Grafik (img) ? Spiele- und Multimedia-Programmierung 2
S Wie kann ich das Zeichnen der Grafik feiner machen? Spiele- und Multimedia-Programmierung 9
E JOGL kein zugriff auf manche methoden Spiele- und Multimedia-Programmierung 5
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
M [JOGL] eclipse export Runnable Jar - startet nicht Spiele- und Multimedia-Programmierung 3
D [JOGL] bibliothek aus jar laden Spiele- und Multimedia-Programmierung 3
A JOGL Shader Anfängerprobleme Spiele- und Multimedia-Programmierung 2
A JOGL FloatBuffer vs Buffers Spiele- und Multimedia-Programmierung 2
A JOGL glBindBuffer einmalig oder mehrmalig? Spiele- und Multimedia-Programmierung 3
A Aufbau einer JOGL Anwendung Spiele- und Multimedia-Programmierung 12
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
A Jogl-Projekt unter 32-Bit kompiliert und unter 64-Bit ausführen, geht das überhaubt ?? Spiele- und Multimedia-Programmierung 9
turing JOGL Cubes performant Spiele- und Multimedia-Programmierung 17
M JOGL Cubus mit Rand darstellen Spiele- und Multimedia-Programmierung 3
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
X JOGL - wie zum laufen bringen? Spiele- und Multimedia-Programmierung 2
M Schatten mit JOGL Spiele- und Multimedia-Programmierung 4
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
D [JOGL] Freibewegliche Lichtquelle im Raum Spiele- und Multimedia-Programmierung 4
H JOGL 2.0 jars fehlen Spiele- und Multimedia-Programmierung 8
R JOGL: glUniformLocation gibt immer -1 zurück Spiele- und Multimedia-Programmierung 4
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
Mikescher [JOGL] Access restriction Spiele- und Multimedia-Programmierung 6
K jogl einbinden Spiele- und Multimedia-Programmierung 6
X JOGL - Textur auf Quad verzerrt Spiele- und Multimedia-Programmierung 2
X JOGL - 2D Sprite richtig platzieren Spiele- und Multimedia-Programmierung 4
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
J JOGL konfigurieren / Windows 7 64-bit Spiele- und Multimedia-Programmierung 7
R JOGL polygon smooth Spiele- und Multimedia-Programmierung 20
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
BattleMaster246 Schussrichtung festlegen - JOGL Spiele- und Multimedia-Programmierung 8
BattleMaster246 Jogl Libs werden nicht geladen Spiele- und Multimedia-Programmierung 5
A [JOGL] TextRenderer malt Fläche hinter Buchstaben aus Spiele- und Multimedia-Programmierung 2
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
U [JOGL]Libs und Dlls mitliefern: Spiele- und Multimedia-Programmierung 9
S JOGL Perspektive Spiele- und Multimedia-Programmierung 2
D jogl downloaden ... wo? Spiele- und Multimedia-Programmierung 3
S JOGL 64 bit Spiele- und Multimedia-Programmierung 7
A jogl 2d performance Spiele- und Multimedia-Programmierung 20
J JOGL mit Netbeans Spiele- und Multimedia-Programmierung 3
S Jogl findet keine GLProfile ? Spiele- und Multimedia-Programmierung 6
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
F Game mit LWJGL/JOGL in executable JAR packen, wie? Spiele- und Multimedia-Programmierung 6
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
F LWJGL Smoother animieren lassen (wie bei JOGL = Animator) Spiele- und Multimedia-Programmierung 3
F JOGL 2.0 Bug? Spiele- und Multimedia-Programmierung 3
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M JOGL - Mehr als nur ein Canvas - Texturpool Spiele- und Multimedia-Programmierung 7
S Jogl, no gluegen-rt :-( Spiele- und Multimedia-Programmierung 4
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
I JOGL: Problem mit Blending bei Billboards (Transparenz) Spiele- und Multimedia-Programmierung 2
1 JOGL: Fensterinhalt verschwindet sofort wieder Spiele- und Multimedia-Programmierung 3
jemandzehage JOGL 3D-Koordinaten des Klicks bestimmen Spiele- und Multimedia-Programmierung 2
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
E JOGL nur weißes Fenster Spiele- und Multimedia-Programmierung 2
Y 3D Koordinatensystem==> JOGL Spiele- und Multimedia-Programmierung 7
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A JOGL Würfel hat durchsichtige Seiten? Spiele- und Multimedia-Programmierung 13
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
A Bewegungen mit JOGL Spiele- und Multimedia-Programmierung 12
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
S Jogl Problem bei Darstellung Spiele- und Multimedia-Programmierung 9
G JOGL Color stimmt nicht Spiele- und Multimedia-Programmierung 3
S JOGL Maven Dependency Spiele- und Multimedia-Programmierung 7
Developer_X JOGL - Sichtweite Spiele- und Multimedia-Programmierung 3
Developer_X JOGL Texturing Spiele- und Multimedia-Programmierung 31
Developer_X JOGL- Ich möchte mitmachen! Spiele- und Multimedia-Programmierung 23
X JOGL GL Kontext Initialisierung Spiele- und Multimedia-Programmierung 3
X Vertex Buffer Objects mit JOGL Spiele- und Multimedia-Programmierung 7
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
P JOGL Cubemap Spiele- und Multimedia-Programmierung 7
P JOGL Installation Spiele- und Multimedia-Programmierung 15
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Antoras J3D / JME oder JOGL Spiele- und Multimedia-Programmierung 2
P GLSL in JOGL Spiele- und Multimedia-Programmierung 15
S jogl ins system einbinden Spiele- und Multimedia-Programmierung 3
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
S java /jogl /Texturen mit j3d Spiele- und Multimedia-Programmierung 3
S JOGL Fonts Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben