I
Inqui
Gast
hallo,
ich habe folgendes problem:
ich habe eine Szene erstellt, in der aus einer Shape-Datei Koordinaten von Bäumen ausgelesen werden.
In die Szene wird, an jedem in der Shape-Datei gefundenen Punkt, ein erstelltes Billboard gesetzt und eine entsprechende Baum-Textur geladen. Soweit funktioniert das.
Allerdings möchte ich natürlich, dass die Billboards selbst (2 rechteckige, überkreuzte Flächen) völlig transparent sind, sodass der Eindruck entsteht, dort stünden nur Bäume (also die Textur soll sichtbar sein).
nach langer recherche bin ich auf GL_BLEND gestoßen und BlendFunc, die scheinbar dafür geeignet sind, allerdings verändern sie an meiner Szene nichts.
hier der Ausschnitt aus meinem Code:
ich habe folgendes problem:
ich habe eine Szene erstellt, in der aus einer Shape-Datei Koordinaten von Bäumen ausgelesen werden.
In die Szene wird, an jedem in der Shape-Datei gefundenen Punkt, ein erstelltes Billboard gesetzt und eine entsprechende Baum-Textur geladen. Soweit funktioniert das.
Allerdings möchte ich natürlich, dass die Billboards selbst (2 rechteckige, überkreuzte Flächen) völlig transparent sind, sodass der Eindruck entsteht, dort stünden nur Bäume (also die Textur soll sichtbar sein).
nach langer recherche bin ich auf GL_BLEND gestoßen und BlendFunc, die scheinbar dafür geeignet sind, allerdings verändern sie an meiner Szene nichts.
hier der Ausschnitt aus meinem Code:
Java:
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_LIGHT0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
//Feature for Billboards
final Feature feat = new Feature();
Model mod = new Model();
FaceSet fs = new FaceSet();
fs.setAppearance(plataneAppearance);
Face billA = new Face();
Vertex[] points = new Vertex[4];
//Mittelpunkt des Baumstandorts aus Shapefile abzueglich
//halber Stammdicke ist Ecke eines Billboards
points[0] = new TexturedVertex(new Point3D(p2d.getX() - krone/2, p2d.getY(), 0),
new TextureCoordinate(0.0f, 0.0f));
points[1] = new TexturedVertex(new Point3D(p2d.getX() + krone/2, p2d.getY(), 0),
new TextureCoordinate(1.0f, 0.0f));
points[2] = new TexturedVertex(new Point3D(p2d.getX() + krone/2, p2d.getY(), hoehe/10),new TextureCoordinate(1.0f, 1.0f));
points[3] = new TexturedVertex(new Point3D(p2d.getX() - krone/2, p2d.getY(), hoehe/10),new TextureCoordinate(0.0f, 1.0f));
billA.setVertices(points);
//An der Stelle noch 3 weitere Teile für das Billboard
fs.addFace(billA);
fs.addFace(billAb);
fs.addFace(billB);
fs.addFace(billBb);
mod.addChild(fs);
feat.addModel(mod);
scene = (ISceneService)PlatformUI.getWorkbench().getService(ISceneService.class);
Display.getDefault().syncExec(new Runnable() {
public void run() {
scene.add(feat);
}
});
GL11.glEnable (GL11.GL_BLEND);
GL11.glDepthMask (false);
GL11.glBlendFunc (GL11.GL_ZERO, GL11.GL_ONE);
GL11.glDepthMask (true);
GL11.glDisable (GL11.GL_BLEND);