JOGL polygon smooth

Runtime

Top Contributor
Hallo Leute,

ich will eine 2D-Grafikengine in Java programmieren. Da die Polygone einfach hässlich aussehen, muss ich sie natürlich antialisen lassen, wo auch schon den springenden Punkt wäre.. Es funktioniert nicht.
Java:
package cyrill.primate2d;

import com.sun.opengl.util.Animator;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;

public class PolygonSmooth implements GLEventListener {

    public static void main(String[] args) {
        Frame frame = new Frame("Polygon smooth");
        GLCanvas canvas = new GLCanvas();

        canvas.addGLEventListener(new PolygonSmooth());
        frame.add(canvas);
        frame.setSize(640, 480);
        final Animator animator = new Animator(canvas);
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                new Thread(new Runnable() {

                    public void run() {
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        animator.start();
    }

    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
	gl.glEnable(GL.GL_BLEND);
        gl.glEnable(GL.GL_POLYGON_SMOOTH);
        gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
        gl.glClearColor(1, 1, 1, 1);
    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
    }

    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
	gl.glBegin(GL.GL_POLYGON);
            gl.glColor4f(0.5f, 0.8f, 0.2f, 0.5f);
            gl.glVertex2f(-0.6f, 0.9f);
            gl.glColor4f(0.1f, 0.2f, 0.5f, 0.8f);
            gl.glVertex2f(0.2f, -0.4f);
            gl.glColor4f(0.3f, 0.6f, 0.7f, 0.3f);
            gl.glVertex2f(0.4f, 0.6f);
	gl.glEnd();

        gl.glFlush();
    }

    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
    }
}

Alternative, für die, die C++ besser beherrschen :):
Code:
#ifdef WIN32
#include <Windows.h>
#endif
#include <GL\GLUT.h>
#include <GL\GLU.h>
#include <GL\GL.h>

void initGraphics() {
	glClearColor(1, 1, 1, 1);
	glEnable(GL_BLEND);
	glEnable(GL_POLYGON_SMOOTH);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

void display() {
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glBegin(GL_POLYGON);
		glColor4f(0.5f, 0.8f, 0.2f, 0.5f);
		glVertex2f(-0.6, 0.9);
		glColor4f(0.1f, 0.2f, 0.5f, 0.8f);
		glVertex2f(0.2, -0.4);
		glColor4f(0.3f, 0.6f, 0.7f, 0.3f);
		glVertex2f(0.4, 0.6);
	glEnd();

	glutSwapBuffers();
}

void reshape(GLint width, GLint height) {
}

void updateScene() {
	glutPostRedisplay();
}

int main(int argc, char **argv) {
#ifdef WIN32
	HWND hWnd = GetConsoleWindow();
	ShowWindow( hWnd, SW_HIDE );
#endif

	glutInit(&argc, argv);
	glutInitWindowSize(600, 400);
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
	glutCreateWindow("GLUT Window!");

	initGraphics();

	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutIdleFunc (updateScene);

	glutMainLoop();

	return 0;
}

Danke :)

Edit:
Frage vergessen :D. Wo liegt der Fehler?
 
G

Guest2

Gast
Moin,


Ok, habs langsam gemerkt, dass Grafik und Java nicht zusammenpasst. Gehe mal in einem C++ Forum nachfragen.

na, das würde ich so nicht unterschreiben wollen! ;)

Wenn es ein gutes C++ Forum (oder besser noch ein OpenGL Forum) wäre, dann wird man Dir da vermutlich wohl sagen das GL_POLYGON_SMOOTH einfach böse ist ;) (Mag sein, dass es bei reinem 2D trotzdem okey sein kann). Grundsätzlich würde ich Dir aber ehr zu MSAA raten (sofern die Zielplattform das hergibt:

Java:
		final GLCapabilities glCapabilities = new GLCapabilities();
		
		glCapabilities.setNumSamples(2);
		glCapabilities.setSampleBuffers(true);
		
		final GLCanvas glCanvas = new GLCanvas(glCapabilities);

Gruß,
Fancy
 

Marco13

Top Contributor
Ok, habs langsam gemerkt, dass Grafik und Java nicht zusammenpasst. Gehe mal in einem C++ Forum nachfragen.

KCA, oder -1... Vielleicht ist das Problem einfach schwierig zu lösen (egal in welchem Forum). Habe kurz im Netz gesucht, und teilweise sogar gelesen, dass Polygon Smoothing heute nicht mehr von allen GraKas unterstützt wird. Aber so wie Fancy es angedeutet hat...
Code:
        GLProfile profile = GLProfile.get(GLProfile.GL3bc);
        GLCapabilities glCapabilities = new GLCapabilities(profile);
        glCapabilities.setNumSamples(4);
        glCapabilities.setSampleBuffers(true);
        GLCanvas canvas = new GLCanvas(glCapabilities);
sieht das Polygon zumindest bei mir schön glattgelutscht aus.
 

Runtime

Top Contributor
Grundsätzlich würde ich Dir aber ehr zu MSAA raten
Dann hätte ich nicht in Java programmiert :D

Hab setNumSamples mal ausprobiert, hat aber nicht funktioniert. Vllt ist es noch nützlich zu sagen, dass es bei den Linien funktioniert, allerdings nur wenn ich GL_LINE_SMOOTH aktiviere.

@Marco13
Die Klasse GLProfile gibts bei mir gar nicht, welche Version brauchst du?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ja, da hat sich in den letzten (nicht oder kaum unterscheidbaren) Versionen von JOGL einiges geändert. Die, die in bezug auf die API "die aktuellste" sein sollte, sollte unter Index of /deployment/webstart/archive zu finden sein.


EDIT: In deiner Signatur fehlt noch was:
Code:
boolean stupidCodeReturns = getValue();
if(stupidCodeReturns == true) {System.out.println("true");}
else if(stupidCodeReturns == false) {System.out.println("false");}
[b]else throw new IllegalStateException("A boolean must be true or false!");[/b]
:D
 

Runtime

Top Contributor
:D Danke, habs irgendwie hinbekommen, dass JOGL jetzt läuft :). Aber sobald irgendeine Methode von GLProfile aufgerufen wird, gibt es eine NullPointerException:
Code:
        at javax.media.opengl.GLProfile.getProfileMap(GLProfile.java:1576)
        at javax.media.opengl.GLProfile.isGL4bcAvailable(GLProfile.java:147)
        at javax.media.opengl.GLProfile.glAvailabilityToString(GLProfile.java:238)
        at javax.media.opengl.GLProfile.glAvailabilityToString(GLProfile.java:306)
        at javax.media.opengl.GLProfile.initProfilesForDefaultDevices(GLProfile.java:1279)
        at javax.media.opengl.GLProfile.access$000(GLProfile.java:67)
        at javax.media.opengl.GLProfile$1.run(GLProfile.java:113)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.media.opengl.GLProfile.initSingleton(GLProfile.java:111)
        at javax.media.opengl.GLProfile.validateInitialization(GLProfile.java:1420)
        at javax.media.opengl.GLProfile.getProfileMap(GLProfile.java:1572)
        at javax.media.opengl.GLProfile.isGL3bcAvailable(GLProfile.java:155)
        at javax.media.opengl.GLProfile.isGL3bcAvailable(GLProfile.java:194)
        at jogl2test.Main.main(Main.java:16)
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: Could not initialize class javax.media.opengl.GLDrawableFactory
        at javax.media.opengl.GLDrawableFactory$2.run(GLDrawableFactory.java:171)
        at java.lang.Thread.run(Thread.java:619)
Edit:
Hab jetzt mal wahllos Natives in den Projektordner kopiert und dann kommt die Exception nicht mehr :D
GL3bc ist aber nicht available, nur GL2* und das Anti-Aliasing funktioniert noch immer nicht.:noe:
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ach ja, die Frage welche JARs/DLLs benötigt werden ist auch ziemlich diffizil. Hatte mir irgendwann mal (durch Iteration über die Potenzmenge der vorhandenen Libs :D ) diese Liste zusammenklamüsert
Code:
gluegen-rt.dll
gluegen-rt.jar
jogl.all.jar
jogl_desktop.dll
nativewindow.all.jar
nativewindow_awt.dll
nativewindow_win32.dll
newt.all.jar
newt.dll

Wenn er GL3 nicht unterstützt ... hm - hast du irgendwie eine ältere Grafikkarte (oder vielleicht einen veralteten Treiber...?)
 
M

maki

Gast
Anti-alisasing sollte auch schon bei OpenGL 1.5 funktionieren.

Kannst mal versuchen das direkt beim Treiber einzustellen?
 

Runtime

Top Contributor
Joa hab natürlich auch gegoogelt, einfach nach Einstellungen allgemein.
Edit:
Steht nichts darüber, wie man direkt beim Treiber etwas einstellt, nur dass Intel Grafikkarten kein Antialiasing unterstützen... Warum kann Flash das denn tun?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Was da gemeint war, war wohl ein Rechtsklick auf den Windows-Desktop, im Menü "Eigenschaften" auswählen, im Dialog dann den Tab "Einstellungen", dort dann rechts unten "Erweitert..." und dann schauen, ob dort irgendwelche Grafikkartenspezifischen Tabs sind. Evtl. auch mal schauen, ob mit dem Treiber zusammen irgendein Konfigurationsprogramm o.ä. installiert wurde....

EDIT: Es KANN natürlich sein, dass die Grafikkarte das nicht in Hardware unterstützt, und dass z.B. Flash sowas mit Software nachbaut....
 

Runtime

Top Contributor
2D Antialiasing ist ja nicht gerade eine riesige Herausforderung, das dürfte meine GPU schon tun. Hab ja bald mal meine Konfirmation, dann bekomm ich genug Geld für einen neuen Laptop mit einer GeForce.
 
M

maki

Gast
Ein Netbook mit ION Chipsatz (da ist eine Geforce 9300/9400 drinnen) hätte es schon getan wenn dir ein Atom reicht, kostet auch nicht mehr als ein Netbook mit dem Intel GMA Schrott.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
R 2D Grafik JOGL Spiele- und Multimedia-Programmierung 18
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
S JOGL Selection By Color Spiele- und Multimedia-Programmierung 3
E JOGL und TextRenderer Spiele- und Multimedia-Programmierung 9
H JoGL mit Anwendung verteilen... Spiele- und Multimedia-Programmierung 9
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
H Jogl-Animator - Inhalt ändert sich nicht Spiele- und Multimedia-Programmierung 4
S JOGL + Multithreading Spiele- und Multimedia-Programmierung 2
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
J Alpha Blending (jogl) Spiele- und Multimedia-Programmierung 5
G JOGL - glTranslate - Unterschiede bei zweimal Ausführen Spiele- und Multimedia-Programmierung 9
Kr0e Schattenproblem, JOGL, gluPerspective. Spiele- und Multimedia-Programmierung 2
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J jogl - verschiedene Versionen Spiele- und Multimedia-Programmierung 7
Kr0e "gluSphere" (JOGL) soll Schatten werfen können Spiele- und Multimedia-Programmierung 5
A JOGL, Models Spiele- und Multimedia-Programmierung 4
A JOGL, etwas Grundlegendes Spiele- und Multimedia-Programmierung 8
Kr0e JOGL & Anpassung ins Fenster Spiele- und Multimedia-Programmierung 2
G JOGL: per Mausbewegung Objekt verschieben Spiele- und Multimedia-Programmierung 2
S In JOGL Java einbauen Spiele- und Multimedia-Programmierung 5
S Java 3D, JOGL, . Spiele- und Multimedia-Programmierung 3
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben