Skalierung+Normals



  • Halli Hallo!
    Ich bin's mal wieder!

    Euch ist ja mit Sicherheit bekannt, dass jeder ernstzunehmende 3DModeller über eine Skalierungsfunktion verfügt. Auch OpenGL als Library bietet die Möglichkeit eine Skalierungsmatrix zu erzeugen. Nur verfälscht eine solche Matrix ja leider die verwendeten Normalenvektoren.
    Heisst das, ich sollte lieber auf 'glScale' verzichten und stattdessen eine Kopie des betroffenen 3DModells erzeugen, die ObjektVertices dieser Kopie skalieren und die Normalenvektoren der Kopie neu berechnen?
    Oder wird's anders gemacht?

    Danke!

    Grüße,
    TS++


  • Mod

    du kannst mit glEnable GL_NORMALISE einschalten, damit wird die normale wieder richtig skaliert oder überseh ich da noch ein problem ?

    rapso->greets();



  • Kommt drauf an wie du skalierst. z.B. uniform (gleicher Skalierkoeffizient fuer x, y, z)...dabei wird Normalenrichtung nicht veraendert. Jedoch bei nonunifrom wird sie veraendert.

    Also: bei unifrom GL_RESCALE_NORMAL verwenden.
    bei nonuniform GL_NORMALIZE verwenden.

    GL_RESCALE_NORMAL ist schneller als GL_NORMALIZE.

    ~tOmUsA


  • Mod

    ab geforce soll das für die performance an sich egal sein und deswegen sollte man das grundsätzlich einschalten (NVidias aussage).

    (das macht man heute doch per pixel mehrmals 😉 )

    rapso->greets();



  • Danke euch beiden!
    Ich meinte tatsächlich nonuniform (mein Fehler!) 🙄
    Damit komm ich jetzt schon wesentlich weiter!

    Grüße,
    TS++

    [ Dieser Beitrag wurde am 18.06.2003 um 12:34 Uhr von TS++ editiert. ]



  • Original erstellt von rapso:
    **ab geforce soll das für die performance an sich egal sein und deswegen sollte man das grundsätzlich einschalten (NVidias aussage).

    (das macht man heute doch per pixel mehrmals 😉 )

    rapso->greets();**

    ok kann sein, wer halt ne geforce hat...vielleicht triffts ja auch bei ATIs zu. Aber per-pixel und per-vertex kann man trozdem noch nicht gleichsetzen.~tOmUsA


  • Mod

    Original erstellt von tOmUsA:
    Aber per-pixel und per-vertex kann man trozdem noch nicht gleichsetzen.~tOmUsA[/QB]

    wie meisnt du das?

    und klar, die ati karten machen das auch, wollte nur damit sagen, dass es heutzutage eigentlich nicht schlimm ist grundsätzlich normalize einzuschalten, leute mit noch älterer hardware erwarten eh nicht dass die 3d darstellung flüssig läuft, hauptsache sie läuft.. oder sie spielen WiSims oder so. (obwohl halflife2 wohl noch mit einer TnT2 laufen soll)

    rapso->greets();



  • [QUOTE]Original erstellt von rapso:
    [QB]wie meisnt du das?
    Ja, so wie ich das geschrieben habe kann man das nicht verstehen. 🙂 Ich habe gemeint, dass man die Performanz von Operationen die auf der 'per-pixel'-Ebene ablaufen nicht mit den entsprechenden Dingen die auf der 'per-vertex'-Ebene ablaufen vergleichen. Z.B. muss es nicht sein nur weil das Normalending per-pixel schnell laeuft nicht unbedingt schnell laufen muss, wenns mans per-vertex macht.

    Stimm dir mit "immer GL_NORMALIZE" schon zu, wuerds davor aber vielleicht trotzdem nochmal testen. Geht ja schnell. ~tOmUsA


Anmelden zum Antworten