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.
Alternative, für die, die C++ besser beherrschen
:
Danke
Edit:
Frage vergessen
. Wo liegt der Fehler?
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