AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Direct3D - Kapselung der Routinen
Thema durchsuchen
Ansicht
Themen-Optionen

Direct3D - Kapselung der Routinen

Ein Thema von Vitus · begonnen am 16. Feb 2004 · letzter Beitrag vom 21. Feb 2004
Antwort Antwort
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#1

Re: Direct3D - Kapselung der Routinen

  Alt 21. Feb 2004, 13:58
Nun, ein in 3D korrekt gerendertes Sprite sieht genauso aus wie ein 2D-Sprite!
Der Unterschied ist, dass zum einen die Geschwindigkeit viel höher ist, und du zum anderen mit vergleichsweise geringen Performance-Einbußen das Sprite drehen, skalieren oder auch alphablenden kannst. Und die CPU hat eidieweil für andere Dinge Zeit.

Und die Dreiecke musst du ja eben nicht neu errechnen. Das übernimmt ja die Grafikkarte für dich, wenn du ihr die nötigen Transformationsmatrizen gibst. Die Errechnung der Matrizen ist wiederum relativ trivial, zumal du sie ja zwischenspeichern kannst. Der Witz ist, dass es eine enorme "Performance-Strafe" gibt, wenn du andauernd auf die Vertexbuffer zugreifst, denn deren Daten liegen ja im Grafikkartenspeicher und die gibt den nur ungern her (muss gesperrt werden etc.), und das mit den Matrizen geht halt einfach schneller, selbst wenn du sie immer neu errechnest.

Hier noch ein paar Tipps aus dem SDK (Performance Optimization: General Performance Tips)
Zitat von Microsoft:
Minimize vertex buffer switches.
Use static vertex buffers where possible.
Use one large static vertex buffer per flexible vertex format (FVF) for static objects, rather than one per object.
Insbesondere die ersten beiden treffen hier zu. Der dritte trifft dann zu, wenn du trotzdem lieber die Dreieckdaten verändern willst, als Transformationsmatrizen zu verwenden.
Ach ja, und zum Theme Matrizen, wie ich bereits erwähnte:
Zitat von Microsoft:
Direct3D uses the world and view matrices that you set to configure several internal data structures. Each time you set a new world or view matrix, the system recalculates the associated internal structures. Setting these matrices frequently—for example, thousands of times per frame—is computationally time-consuming. You can minimize the number of required calculations by concatenating your world and view matrices into a world-view matrix that you set as the world matrix, and then setting the view matrix to the identity. Keep cached copies of individual world and view matrices so that you can modify, concatenate, and reset the world matrix as needed. For clarity in this documentation, Direct3D samples rarely employ this optimization.
Im selben Dokument stehen auch noch eine Reihe weiterer Performance-Tipps, einfach mal reinschauen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz