Wie platziere ich Text in einer 3D-Scene?



  • Tag'chen,
    Ich habe mich mal versucht etwas in Direct3D einzuarbeiten (benutze die Direct3D 8 SDK) und weiß nun auch wie man Text auf den Bildschirm platziert, dabei habe ich immer ID3DXFont benutzt.

    Meine Frage ist nun, wie kann ich den Text in einer 3D-Scene rendern?, also z.B habe ich auf Position 1/1/1 eine kleine Kugel, wie könnte ich genau über der Kugel einen Text darstellen? Mit ID3DXFont schaffe ich es nur Text direkt auf die Scene zu rendern.

    Hoffe ihr könnt mir helfen.

    Gruß Tobi



  • Ich kenne mich nur mit OpenGL aus, aber es sind ja schnittstellen zu der selben hardware

    als erstes musst den depth-Buffer deaktivieren, dann berechnest du die Position, die die Kugel auf dem Bildschirm hat, und plazierst etwas darüber mit einer neuen Projektionsmatrix den Text.

    Ok war sehr grob.



  • Hm schon nur wie mach ich das in Direct3D?
    Wenn ich einen Test auf den Moni rendern will mach ich das hier:

    RECT rectFont = { 0, 0, 4000, 4000 };
    
        // ***** Start Font Process *****
        m_d3DisplayFont->Begin( );
    
        // ***** Setup font position *****
        rectFont.left = iXPos;
        rectFont.top  = iYPos;
    
        // ***** Draw Font *****
        m_d3DisplayFont->DrawText( szTextBuffer, iLength, &rectFont, DT_LEFT, 0xFFFFFF00 );
    
        // ***** End Font Process *****
        m_d3DisplayFont->End( );
    

    Das ist aber alles nur 2D.



  • Krux schrieb:

    ... dann berechnest du die Position, die die Kugel auf dem Bildschirm hat ...

    Das ist schon der Knackpunkt. Du musst den Vektor an dem die Kugel liegt transformieren. Also mit den Matrizen MWord * MView * MProj (kann sein, dass ich jetzt die Reihenfolge vertauscht habe).
    Das Ergebnis der x und y Koordinaten entsprechen dann den Bildschirmkoordinaten an denn sich der 3D Vektor der Kugel befindet!

    Gruß
    Markus



  • Ja okay, diese x/y/z Koordinaten raus zu bekommen geht denk ich noch, nur wie kann ich dann dort an dieser Stelle den Text zeichnen?



  • Also wenn das was HMarkus sagt nicht das ist was du meinst und möchtest, dass dieser Text "wirklich" über dem 3D-Objekt im Raum umherschwebt und auch verschwindet wenn das Objekt hinter einem Sichthindernis steht (text immer zur Kamera gerichtet), wäre es eine Möglichkeit den Text zuerst in einer Textur zu speichern die du dann anzeigst, "Billboard" heißt das zeug glaub ich falls du danach suchen möchtest.


Anmelden zum Antworten