OpenGL und GL_SELECT



  • moin allerseits 😉
    seid einigen tagen versuche ich mich an opengl und habe mich auch schon eifrig durch einige tuts geschlagen.
    nun bin ich gerade an dem punkt wo ich per mausklick objekte auswaehlen moechte.
    also mich an den SELECT-tuts ausgelassen und bin gerade mitten im einbinden der funktion in meinem projekt , als ich so nebenbei erfahre das nvidia's treiber ab v 90.xx aufwaerts die ogl eigene SELECT funktion nicht mehr unterstuetzt. nach weiteren suchen lese ich nu auch noch das ogl v3.0 diese und andere aeltere funktionen rausnimmt(glbegin(),glEnd usw.).
    wie auch immer, meine frage waere jetzt wie ich so eine selection selber bewerkstelligen koennte.
    an die Z position kommt man ja nu leicht heran, auch das umrechnen der maus x und y ist kein problem (hab ich schon drin, weil ich mir eine eigene "Create3DFenster" function geschrieben hab ( erstellt ein 2d fenster mit blend in dem ogl contex).
    nur wie bekomm ich nun raus ob und welches objekt an der x y pos ist?
    diese werden ja nun auch um die eigene achse gedreht usw.
    bin da doch etwas verwirrt als anfaenger.
    im mom arbeite ich mit glGetPixel() aber wenn es eine andere meoglichkeit gibt, immer her damit.
    mfg donny



  • Entweder Du berechnest den vordersten Schnittpunkt zwischen Deiner Geometrie und dem Strahl durch (x,y,z) oder Du machst einen zweiten Rendergang in dem Du jedem Objekt eine eindeutige Farbe zuordnest und liesst diese einfach an der Mouseposition aus.



  • erstmal vielen dank fuer die schnelle antwort 😉

    jep, das mit dem zweiten renderpass ist das was ich mit getpixel gemacht habe.
    ich render jedes objekt ohne texture mit einer festen farbe in den backbuffer und lese mit getpixel die werte aus.
    also einen renderpass pro objekt in reichweite mehr fuer den hittest ...
    das mit der farbe fuer jedes objekt hatte ich auch schon ueberlegt, waeren immerhin 16.581.374 objekte + 0 fuer nichts, nur bin ich mir nicht sicher ob die farben 100% sind oder beim rendern nicht verfaelscht werden.
    hoffe halt nur das es vielleicht eine elegantere loesung gibt.
    die objekte sind zu komplex und nicht gerade wenige , was eine menge zeit in anspruch nehmen wuerde , um auszurechnen welches objekt von dem vektor der maus beruehrt wird.

    mfg donny



  • nur bin ich mir nicht sicher ob die farben 100% sind oder beim rendern nicht verfaelscht werden

    Solche Probleme kann es je nach Treiber-Implementierung mit Anti-Aliasing, Dithering und 16Bit-Framebuffer geben.
    Am besten ein zusaetzliches FBO verwenden und entsprechende Features deaktivieren.


  • Mod

    donbubu schrieb:

    das mit der farbe fuer jedes objekt hatte ich auch schon ueberlegt, waeren immerhin 16.581.374 objekte + 0 fuer nichts, nur bin ich mir nicht sicher ob die farben 100% sind oder beim rendern nicht verfaelscht werden.

    waren es nicht 16777214 oder so? 😃
    ich hatte das farbproblem auch mal, lag daran dass die benutze hardware intern alles mit float hatte und irgendwie manchmal falsch rundete. als alternative kann man dann bei neuerer hardware occlusionqueries nehmen. dazu setz du um den zu zeichnenden pixel das scissorrect und schaut welches objekt einen pixel mit den queries gesetzt hatte. (im zweiten pass). der existierende z-buffer wird alle dahinterliegenden pixel normalerweise verwerfen. das schoene ist, dass das auch mit alphatest objekten noch funktioniert und man nichts an shadern usw. aendern/anpassen muss.



  • occlusionqueries hoert sich interessant an ...
    wird ab gf3 und Radeon 7500 unterstuetzt, ausser die gf4 mx.
    aber da muss ich mich erstmal reinarbeiten.
    wie gesagt ... anfaenger ^^
    bin seit 2 wochen damit beschaeftigt mich schlau zu machen und das ist nich gerade wenig.
    sowas wie FBO suche ich schon die ganze zeit. nirgends infos zu einem seperaten framebuffer gefunden gehabt, danke.

    mfg donny


  • Mod

    ist nicht sonderlich aufwendig. eigentlich steht hier alles was man braucht. unten das beispiel ist schon alles, eigentlich :).

    alternativ, wenn du es geometrisch machen wollen wuerdest, kannst du auch eine fertige collision lib nehmen. dann waerst du ein wenig flexibler was raycasts generell angeht.



  • nix 😉
    wenn, dann will ich dass auch verstehn.
    interessant find ich das hier : http://wiki.delphigl.com/index.php/Tutorial_NVOcclusionQuery
    und dazu boundingbox und octree.
    das ist zwar delphi aber gut erklaert finde ich. ich vergrei.. meine versuch mich mit c++ an opengl.
    alles neuland fuer mich ^^
    octree finde ich recht heftig, erinnert mich an a* .
    naja , also werd ich wohl erstmal etwas beschaeftigt sein .

    big thx 😉
    mfg donny



  • NV_Occlusion_Query

    Du solltest nicht herstellerspezifische Extensions (ARB statt NV, siehe rapsos Link) bevorzugen.


Anmelden zum Antworten