Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pixelgenaue Positionierung mit DirectX (https://www.delphipraxis.net/27493-pixelgenaue-positionierung-mit-directx.html)

Fingolfin 11. Aug 2004 07:19


Pixelgenaue Positionierung mit DirectX
 
Hallöle,

ich habe mich etwas mit Direct3D beschäftigt und auch schon einige Versuche damit gemacht. Ich kriege es aber nicht hin, pixelgenau zu positionieren.

Ich möchte sowas wie FillRect(x1, x2, y1, y2, color) realisieren. Da ich beim besten Willen keine Möglichkeit gefunden habe, einen Bildbereich so ohne weiteres zu füllen, habe ich eine neue Fläche (3D-Objekt) erstellt und allen Vertizes dieselbe Diffuse-Farbe zugeordnet.

Jetzt kannn ich dieses Viereck aber immer noch nicht pixelgenau positionieren, lediglich über die Daten des Vertexbuffers skalieren und translieren. Aber die übergebenen Pixelwerte jetzt in eine Matrix umzurechnen, erscheint mir dann doch etwas sehr umständlich.

Gibt es denn da keine einfachere Möglichkeit, Positionierungen auf Pixelebene vorzunehmen?!?
Oder vielleicht eine einfachere Variante das umzusetzen?

Vielen Dank im Voraus,

Fingolfin

maximov 11. Aug 2004 09:29

Re: Pixelgenaue Positionierung mit DirectX
 
hab dir in DelphiDX was zu geschrieben! ...du cross poster :twisted:

Fingolfin 11. Aug 2004 09:45

Re: Pixelgenaue Positionierung mit DirectX
 
Danke. Sorry, aber ich bin nicht wirklich davon ausgegangen darauf überhaupt eine Antwort zu erhalten und wollte meine Chancen maximieren. Besonders da nicht viele Threads zu dem Thema hier herumschwirren. :(

Der Vollständigkeit halber maximovs Antwort:

Zitat:

Moin,

am einfachsten wäre es, wenn du die viewmatrix einfach auf die pixelmetrik skalierst:


Code Sample
Code:
 viewmatrix:= D3DXMatrixIdentity;
 viewmatrix._00 := 2/backBufferWidth;
 viewmatrix._11 := 2/backBufferHeight;
Dann wäre eine einheit im 3D-raum genau ein pixel und du kannst prima damit arbeiten.

Wenn der nullpunkt in der oberen, linken ecke sein soll, dann musst du _11 vermutlich noch negieren
:) Fingolfin


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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-2025 by Thomas Breitkreuz