Wir schreiben ein einfaches 3D-Spiel als ein Projekt in einem Kurs, den wir an der Universität machen. (Die Zuordnung ist für Paare) wir JOGL verwenden müssen, so muss ich die Arbeit mit dieser API (Lösungen wie: Umstellung auf höhere Level-API wie JAVA3D wird nicht gut für mich sein ...) Wie auch immer, das Spiel, das wir implementieren wollten, ist eine Art 3D-Shooter. (der Code bisher, der von einem früheren Auftrag, den wir für den gleichen Kurs gemacht haben, gespalten wurde, findet man hier: http://code.google.com/p/mirzhcode/source/browse/?repo=cgex4) und jetzt versuche ich mich mit "Spezialeffekten" zu beschäftigen. genauer Partikel & Sprites (für das Schießen, Explosionen, etc‘...) i über eine Erklärung in Bezug auf Sprite-Emitter kam, die ich umsetzen will: http://bit.ly/KrrPM4java + JOGL, wie wird die Transparenz eingestellt, um Objekte in der Szene zu zeigen, anstatt einfach schwarz, wenn eine Textur gezeichnet wird?
i mit begann, wie es schien, die einfach zu sein Teil. der Shockwave-Ring, der aus einem einzigen schnell wachsenden Sprite besteht. Wenn ich versuche, das Bild, das ich gemacht habe, zu zeichnen, bekomme ich schwarzen Hintergrund statt der Transparenz, die ich wollte. das Texturbild ist eine transparente PNG-Datei (so gibt es einen Alpha-Kanal) und was ich von ihm erhalten ist: der Code i dies zu generieren verwendet:
in init()
Methode:
//loading textures
try {
shockwave = TextureIO.newTexture(new File("textures/shockwave_128X128.png"),false);
} catch (GLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
gl.glShadeModel(GL.GL_SMOOTH);
gl.glClearColor(0f, 0f, 0f, 1f);
gl.glClearDepth(1.0);
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE);
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
gl.glHint(GL.GL_POINT_SMOOTH_HINT, GL.GL_NICEST);
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glEnable(GL.GL_DEPTH_TEST);
//UNCOMMENT THE FOLLOWING LINE OF CODE
//FOR REALISTIC COLORS. NOTE THAT ICC
//BUTTON WON'T CHANGE THE COLORS ANYMORE.
//gl.glEnable(GL.GL_LIGHTING);
//two (soft) lights (red and blue) setup.
//each in an opposite corner of the room.
float color0[] = {1f, 0f, 0f, 0.5f};
float ambient0[] = {1.0f, 1.0f, 1.0f, 0.5f};
float position0[] = {(float) (0.95*expansionFactor), (float) (0.95*expansionFactor), (float) (0.95*expansionFactor)};
float color1[] = {0f, 0f, 1f, 0.5f};
float ambient1[] = {1.0f, 1.0f, 1.0f, 0.5f};
float position1[] = {(float) (0.95*expansionFactor), (float) (0.95*expansionFactor), (float) (0.95*expansionFactor)};
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, ambient0,1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE,color0 , 1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, color0 , 1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position0, 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, ambient1,1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE,color1 , 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, color1 , 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, position1, 1);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_LIGHT1);
start();
und auch in display()
Methode:
gl.glEnable(GL.GL_BLEND);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
shockwave.bind();
gl.glColor4f(1f,1f,1f,1f);
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3d(0.0-10, 0.2, 0.0-10);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3d(0.0+10, 0.2, 0.0-10);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3d(0.0+10, 0.2, 0.0+10);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3d(0.0-10, 0.2, 0.0+10);
gl.glEnd();
zu su m it up, meine Frage ist, wie bekomme ich die Textur zu verwenden, es ist Alpha-Kanal, und wenn es nicht so einfach ist, gibt es eine Bibliothek, die Sie vielleicht wissen, dass ich verwenden kann?