Texturen verschieben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Texturen verschieben

    Hallo,

    ich hab mal eine Frage. Wenn ich eine 3D Fläche zeichne und eine Textur drauf legen, z.B. so:

    d3d_draw_floor(130, -300,-50,x+94,y+100,-50, tex, 1, 1);

    gibt es dann eine Möglichkeit, die Textur da drauf nach Belieben zu platzieren und zu verschieben? Ich möchte eine Textur, die viel größer ist als die Fläche, langsam über die Fläche schieben und das dann so als scrollenden Hintergrund benutzen. Kann man so was irgendwie machen?
  • Mal doch den gewollten Ausschnitt der Textur auf ein Surface. dann kannst du die surfacetextur der draw floor methode übergeben.

    Hatte mir das so gedacht das du ne variable fürs scrolling hast und dann die textur auf das surface malst mit sowas wie x+scrollingOffset
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Ich würde eher die Fläche manuell mit d3d_vertex_texture zeichnen. Dadurch hast du die Möglichkeit die Texturkoordinaten selber zu bestimmen. Du brauchst dann nur noch ein paar Variablen, für die Koordinaten, die dann in jedem Step verschoben werden.

    Hab mal eben ein kleines Beispiel zusammengebastelt. Der eigentlich relevante Code steht in obj_floor.

    An die Admins: Bitte erlaubt doch mal gmk Dateien im Anhang.
    Dateien
    • example.zip

      (3,49 kB, 321 mal heruntergeladen, zuletzt: )
  • Die 2 Ideen sind ganz gut. Die mit dem Surface sollte aber die idealere sein. Da die Vertexe zu viel Draw-Calls verschwenden. Im gegensatz zum Surface werden die ja immer wieder gezeichent.
    Fals du dir aber nicht dei mühe mit dem Surface machen willst und doch die Vertex nutzen willst...mach es bitte in einem Model zu sammen fassen und zeiche ( berechne ) das model dann neu wenn es gebraucht wird. So hast du nich tin jeden step die Vertex neu berechnung.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Das mit Vertex_Texture könnte funktionieren, auch wenn ich da nicht so ganz die Kontrolle habe, wie die Texture positioniert wird. Ich wollte ja immer nur einen Teil einer grossen Texture anzeigen und nicht eine Fläche langsam mit einer Textur füllen. Aber wenn ich die Fläche riesen gross mache und nur zum Teil anzeige, könnte das auch so funtionieren...

    Das mit den Surfaces würde ich gerne mal probieren, hab da aber im Moment noch keinen Plan von. Hab jetzt gerade erst die ganzen D3D-Sachen und -Projektionen begriffen, mit Surfaces wollte ich mich dann demnächst mal beschäftigen...scheint man ja ne Menge cooler Sachen mit machen zu können!

    Ich hab das jetzt erst mal so gelöst: Ich verschiebe einfach die ganze Fläche mit der Textur. Da hängt dann nahtlos eine zweite Fläche mit der Fortsetzung der Textur dran. Wenn die erste Fläche aus dem Bild ist, wird sie an die zweite Fläche hinten drangehängt mit dem dritten Stück der Textur usw.

    Die Kommentare von Euch waren auf jeden Fall mal wieder nützliche Infos...danke dafür!
  • Ich möchte hier noch eine weitere alternative Methode zu den bereits oben genannten hinzufügen.
    > Shader

    Das Problem mit den oberen Methoden ist, dass du das Modell mit den jeweiligen UV-Koordinaten immer weider neu berechnen musst.
    Entweder jedes Step oder (wie x-sascha es bereits sagte) jedes n-te step. Auch die Surface Methode kann sowohl GPU als auch CPU leistung ziehen.

    Shader hingegen sind Programme die direkt auf der GPU laufen und dir somit erlauben die Informationen einen Modells in realtime zu manipulieren. (z.B: verschiebung der UV-koordinaten.)
    Da das ganze auf der GPU läuft (und diese sehr leistungsfähig sind was solche sachen anbelangt) hast du so gut wie keinen Performanceverlust.

    Das wollte ich nur mal für die Zukunft gesagt haben. Da du wahrscheinlich nur einen einzigen Background haben wirst der so berechnet wird, ist die Art wie dieser umgesetzt wird prinzipiell egal (da der performanceverlust vernachlässigbar ist).
    Sobald du aber anfängst mehrere grafische Elemente nach diesen Methoden umzusetzen verbrauchst du mehr rechenleistung als es nötig sein sollte.

    Mir ist auch bewusst dass ich sehr oft (bei vielen Problemen) auf Shader verweise aber es ist nunmal so dass diese im grafischen Bereich in den meisten Fällen die beste Lösung sind, da eben die Performance (vor allem auf der CPU seite) nicht darunter leidet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LEWA ()