mesh problem



  • hallo zusammen

    ich hab ein problem mit einem mesh, dass ich mit indizierten primitiven zeichne (direct3D). anscheinend werden früher gezeichnete dreiecke von später gezeichneten überdeckt und ich hab einfach keine ahnung, was jetzt nun wieder los ist. ich hab das mesh mehrfach gecheckt und es ist wirklich in ordnung. ich verwende CCW-culling und das klappt auch prima. meine normalen müssten auch ok sein, lichter gehen und die richtung stimmt.

    ich hatte zuerst vermutet, dass der z-buffer disabled war und hab ihn manuell nochmal angeschaltet, was keine veränderung gebracht hat. also dürfte es auch am z-buffer nicht liegen (was mich grad total verwirrt, eigentlich sollte der doch klären, was vorne ist und was hinten).

    woran kann das noch liegen, dass sich dreiecke überlappen, die es eigentlich nicht sollten? gibt es noch irgendwas, was man beachten muss, was ich vergessen habe? vielleicht in den view- und projection matrizen? aber was nur? 😕

    wäre toll, wenn jemand mit etwas erfahrung einen tip für mich hat. bin wohl mal wieder total auf dem holzweg 😞



  • Die Projektionsmatrix kümmert sich nur ums Klipping und um die Optische Tiefe, solange sie den Regeln entsprechend erstellt wurde macht sie eigentlich keine probleme.

    Die Weltmatrix sorgt nur für die Ausrichtung des Objekts in der Welt, mehr nicht.

    Der ZBuffer hat 3 RenderStates, ZEnable (standart true) für ZBufefr an, ZWriteEnable (standart true) für Schreibrechte und ZFunc (standart lesserequal) für die Vergleichsfunktion. Wenn du ihn Ordnungsgemäß erstellt hast dürfte es keine Probleme geben. Wenn du ihn manuel getrennt zur Oberfläche erstellt hast solltest du Prüfen ob er richtig hinzugefügt wurde.

    Was mir sonst noch einfällt wäre das die Objekte in eienr gleichen Position stecken, dh das 2 3Ecke nach dem Umwandeln sehr nah oder ineinander stecken, es gibt ja kelien ungenauigkeiten, dadurch kann es zu überblendungen kommen man kennt das aus Spielen wenn eine Textur Flackert.

    Hoffe das hilft dir beid er Fehelrsuche etwas weiter.


  • Mod

    manchmal bringt ein screenshot etwas, wenn du dazu noch die fehlerstellen einzeichnest (falls nicht sofort sichtbar), kann man vielleicht mehr vermutungen anstellen 😉



  • hallo,

    danke für eure antworten.

    @ xebov: genau das, was du meinst habe ich alles schon durchgecheckt. es macht leider keinen unterschied

    hier mal ein screenshot

    deutlich zu erkennen ist es bei den beiden säulen links oben. sie ragen eigentlich aus der fläche heraus auf die kamera zu. sie müssten also über der ebene liegen, erscheinen aber darunter. gezeichnet wird die ebene von links unten nach rechts oben. es verdecken also die dreiecke, die später gezeichnet werden die säulen. bei den säulen, die gerade durch den blickwinkel so gezeichnet werden, dass keine dreiecke, die nach ihnen gezeichnet werden sie überdecken könnten scheint alles in ordnung zu sein. würde man jetzt scrollen, dann sehen die säulen, die in ordnung sind auch falsch aus.

    was kann das bloß sein? irgendwas muss ich ja nunmal falsch gemacht haben, aber ich hab inzwischen alles doppelt gecheckt, und werde einfach nicht schlau draus.


  • Mod

    zeig mal wie du die projektionsmatrix erstellst und wie du die depthbuffer states machst, und wie du den zbuffer erstellst.



  • hallo

    bin gestern leider nicht mehr dazu gekommen, weiter zu machen.

    also zur sache:

    projection = Matrix.PerspectiveFovLH(
                    (float)((2 * Math.PI * fieldOfView) / 360), // convert angle to radians
                    aspectRatio, nearPlaneDistance, farPlaneDistance);
    

    aspectRatio ist auflösung_x / auflösung_y, nearPlane = 0.1, farPlane = 500.0 und fieldOfView ist 120°

    kann mir nicht vorstellen, das es hiermit ein problem gibt

    die sache mit dem zbuffer ist die, dass ich managed direct3d verwende, mit c#. man ruft einfach einen konstruktor der direct3d-device klasse auf und D3D läuft, was dann so aussieht:

    PresentParameters pp = new PresentParameters();
    pp.Windowed = true;
    pp.SwapEffect = SwapEffect.Discard;
    
    device = new Device(
        Manager.Adapters.Default.Adapter,
        DeviceType.Hardware,
        this,
        CreateFlags.HardwareVertexProcessing,
        pp);
    

    vielleicht war mein approach da auch etwas zu naiv. dein hinweis, rapso, hat mir auf jedenfall schonmal einen anhaltspunkt zum recherchieren gegeben; ich werde der spur erstmal nachgehen. außerdem ist mir beim checken grad aufgefallen, dass ich meine kamera schrecklich unübersichtlich designed habe und werde die nochmal überarbeiten

    ich hab grad noch gesehen, man kann beim kreieren des devices noch den parameter AutoDepthStencilFormat setzen. habe mal stichprobenartig damit rumgespielt, kann aber keine veränderung erkennen und weiss leider noch nichtmal, was das nun genau macht.

    also du meinst, dass das problem wahrscheinlich im zusammenhang mit projection / depthbuffer / zbuffer steht? ich fürchte, mir bleibt wohl erstmal nix anderes als weiter msdn und tutorials zu wälzen. danke für die tips soweit 🙂



  • jaa, juhu, ich habs geschafft

    pp.EnableAutoDepthStencil = true;
    pp.AutoDepthStencilFormat = DepthFormat.D16;
    

    das hat beim erstellen des devices gefehlt. danke rapso, du hast mir geholfen in die richtige richtung zu denken 😃



  • Freut mich das es funktioniert.

    jule37 schrieb:

    projection = Matrix.PerspectiveFovLH(
                    (float)((2 * Math.PI * fieldOfView) / 360), // convert angle to radians
                    aspectRatio, nearPlaneDistance, farPlaneDistance);
    

    aspectRatio ist auflösung_x / auflösung_y, nearPlane = 0.1, farPlane = 500.0 und fieldOfView ist 120°

    Ich hätte da noch ne kleine Anmerkung zu machen, auch was deine Kamera angeht. Du gibst bei Field of View 120° an, das haut so aber nicht hin, nach dem was ich dazu gelesen habe gibt man in diesem wert nur eine Seite an, dh also Kurz gesagt mit deinen 120° würdest du einen 240° sichtwinkel haben, Dadurch bekommst du nen Frosch Blick versuch mal 65° das sollte gehen.



  • Xebov schrieb:

    Ich hätte da noch ne kleine Anmerkung zu machen, auch was deine Kamera angeht. Du gibst bei Field of View 120° an, das haut so aber nicht hin, nach dem was ich dazu gelesen habe gibt man in diesem wert nur eine Seite an, dh also Kurz gesagt mit deinen 120° würdest du einen 240° sichtwinkel haben, Dadurch bekommst du nen Frosch Blick versuch mal 65° das sollte gehen.

    hm, komisch. es sieht eigentlich recht "normal" aus. aber danke für den hinweis, ich werde mal ein wenig damit experimentieren



  • jule37 schrieb:

    Xebov schrieb:

    Ich hätte da noch ne kleine Anmerkung zu machen, auch was deine Kamera angeht. Du gibst bei Field of View 120° an, das haut so aber nicht hin, nach dem was ich dazu gelesen habe gibt man in diesem wert nur eine Seite an, dh also Kurz gesagt mit deinen 120° würdest du einen 240° sichtwinkel haben, Dadurch bekommst du nen Frosch Blick versuch mal 65° das sollte gehen.

    hm, komisch. es sieht eigentlich recht "normal" aus. aber danke für den hinweis, ich werde mal ein wenig damit experimentieren

    Das Fällt bei Geraden Flächen auf, stell dir nen Würfel hin bei dem du auf eine Seite schaust und fahr den mal an den Rand, dann siehst du das die Seiten nicht ganz gerade sind, sobald man was zwischen 60 und 70° benutzt sind sie gerade.


Log in to reply