Vertex zu Bildschirm Coordinate ermitteln?

DerTherion

Mitglied
Hallo,

ich suche nach einem Weg eine Vertex Position in XY Window Koordinaten
umzurechnen.

Es geht darum das ich in einer Landschaft eine Sonne darstelle und per
gl.glReadPixels ermitteln will ob zwischen der Sonne und der Kamera
Objekte sind um bei bedarf Blendeffekte einzubringen.

glReadPixels des Backbuffers hab ich im soweit Griff, es geht nur um eine Rückrechnung
der Sonnenkoordinaten (sun_x,sun_y,sun_z) in bildschirm XY Koordinaten.
Oder kann man glReadPixels auf vertexe loslassen?


viele grüße

theri
 
G

Guest2

Gast
Moin,

am einfachsten geht das mit gluProject:

Java:
    private final GLU     glu          = new GLU();
    private final float[] p            = new float[16];
    private final float[] mv           = new float[16];
    private final int[]   vp           = new int[4];

    private final float[] result       = new float[3];


    @Override
    public void display(final GLAutoDrawable drawable) {

	[..]

        gl.glGetFloatv(GLMatrixFunc.GL_MODELVIEW_MATRIX, mv, 0);
        glu.gluProject(x, y, z, mv, 0, p, 0, vp, 0, result, 0);

        System.out.println(result[0] + " " + result[1]);

    }


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

	[..]

        gl.glGetFloatv(GLMatrixFunc.GL_PROJECTION_MATRIX, p, 0);
        gl.glGetIntegerv(GL.GL_VIEWPORT, vp, 0);

    }

Gruß,
Fancy
 

Marco13

Top Contributor
Trotz der SEHR knappen Informationen versuch' ich's mal: Man kann eine Position im 3D-Raum notfalls wohl per Hand in 2D umrechnen, indem man den Punkt mit der Modelview- und Perspective matrix transformaiert, und dann noch schaut, dass er in den Viewport gequetscht wird. Der Zusammenhang zu glReadPixels erschließt sich mir nicht direkt, aber ... ja .... :bahnhof:
 

DerTherion

Mitglied
vielen dank für die schnelle antwort :) ich werd es gleich mal probieren umzusetzen

mit der umrechnung per formeln hab ich krampf gekriegt...das war mein erster ansatz gewesen.

im vertex shader bekommt man per funktion die nötigen fragment infos (vx,vy,vz->bx,by) freihaus...
nur in opengl ansich fand ich vorher nix :)


Der Zusammenhang zu glReadPixels erschließt sich mir nicht direkt, aber ... ja ....

Das ganze testet ob die als erstes gerendete sonne an der ermittelten XY koordinate auch die schlüsselfarbe liefert (also gelb) und nicht von der landschaft oder anderen objekten verdeckt ist
..ist dieser test positiv so ist die sonne voll im sichtbereich und
am ende des render vorganges wird eine lens flare/glow effekt drübergerendet



vielen dank für die hilfe :)


update p.s.: @Guest2 -> das funktioniert wunderbaaaaaar :)
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben