Rechtecke unter DirectX
-
Ich verstehe wirklich nicht wo das Problem ist.. Einfach ein Rechteck auf den Bildschirm bringen wird doch wirklich kein Problem sein schließlich hast du ja auch irgendwie den Boden und die Figuren auf den Bildschirm bringen müssen. Einfach in der Mitte Transparenz das ist auch kein Problem zieh dir einfach ein Tutorial rein kannst und wirst es auch für Figuren, Objekte etc brauchen. Einfach so ein Rechteck zeichnen wird sicher Performant sein auf den heutigen Karten ein Witz...
-
dali schrieb:
@Kuldren: DirectDraw ist für 2d Sachen aber schon lang veraltet darum nimm Direct3d passt schon.
Was war es nochmal, das man einrichten musste, bevor man Direct3D initialisiert?

Im Übrigen bieten dir Surfacen eine Funktion, um für sie einen DC - ja, ganz richtig, einen DC für GDI - zu erfragen, mit dem du dann mit den WinAPI Funktionen rummalen kannst.
Das machst du einmal für dein Rechteck und blittest sie dann.
Bzw. nimmst du sie als Textur.
-
zeichne einfach mit einem D3DPT_LINESTRIP und den 4 punkten des rechtecks selbiges aus vertices mit D3DFVF_XYZRHW (also bereits transformierte koordinaten, da kannst du sogar gleich die mauskoordinaten nehmen) auf den schirm.
die farbe lässt sich über ein material machen.
so schwer is das nicht.wenn du dann noch sachen wie z.b. antialiasing, einstellbare linienbreite usw. haben willst, schau dir mal das ID3DXLine interface an.
-
dali schrieb:
@user: ist ja vollkommen scheiß egal ob es sich um das "Auswahlrechteck" oder um das "Markierungsrechteck" handelt
. Es handelt sich bei beidem um Rechtecke bei dem einen halt nur ein Rahmen oder was?Ne nicht ganz, das eine rechteck befindet sich im 3D Raum und das Auswahlrechteck ist ein Screenelement und somit 2D.
-
Das Reckteck soll zum auswählen der Einheiten gezeichnet werden und wird ja größer und kleiner je nachdem wie man den Cursor bewegt...
Also kein Rechteck das immer gleich groß is und in der Mitte transparent...Ich hab schon versucht mir das DC der Surface zu holen.
Allerdings muss ich dafür ja wieder mit einem Brush das Rechteck zeichnen...
Udn ich dachte vlt gibt es da schon etwas fertiges unter Direct3D!
Aber anscheinend muss das mit den WINAPI Funktionen gelöst werden.....
-
dot schrieb:
zeichne einfach mit einem D3DPT_LINESTRIP und den 4 punkten des rechtecks selbiges aus vertices mit D3DFVF_XYZRHW (also bereits transformierte koordinaten, da kannst du sogar gleich die mauskoordinaten nehmen) auf den schirm.
die farbe lässt sich über ein material machen.
so schwer is das nicht.Meine Grabesstimmen sagen mir: mach weiter.
Bye, TGGC (Das Eine, welches ist.)
-
Kuldren schrieb:
Ich hab schon versucht mir das DC der Surface zu holen.
Allerdings muss ich dafür ja wieder mit einem Brush das Rechteck zeichnen...
Udn ich dachte vlt gibt es da schon etwas fertiges unter Direct3D!
Aber anscheinend muss das mit den WINAPI Funktionen gelöst werden.....warum machst dus nicht einfach so wie ich oben beschrieben hab!?
einen linestrip zu zeichnen kann doch nicht so schwer sein.
und bei dem gedanken mit GDI auf surfaces rumzumalen hab ich nicht so das gefühl von hoher performance.
-
dot schrieb:
und bei dem gedanken mit GDI auf surfaces rumzumalen hab ich nicht so das gefühl von hoher performance.
Wieso? Im günstigsten Fall malt er einmal in die Surface und behält sie dann.
-
SeppSchrot schrieb:
Wieso? Im günstigsten Fall malt er einmal in die Surface und behält sie dann.
Warum sollte er dann überhaupt reinmalen? Dann könnte man es auch am Anfang laden.
Bye, TGGC (Das Eine, welches ist.)
-
Dieses Statement kommt von jemanden mit ner 4K in seiner Sig...

-
GDI und Direct3D sind ziemlich inkompatibel zueinander warum sollte man sich also so quälen, wenn es nen einfacher Aufruf von DrawPrimitiveUP tut und vor allem das Rechteck verändert sich ja mit jeder Bewegung der Maus.
-
User-- schrieb:
GDI und Direct3D sind ziemlich inkompatibel zueinander warum sollte man sich also so quälen, wenn es nen einfacher Aufruf von DrawPrimitiveUP tut und vor allem das Rechteck verändert sich ja mit jeder Bewegung der Maus.
Kein Ahnung, warum denn?
Bye, TGGC (Das Eine, welches ist.)
-
For DirectDraw programmers moving to Direct3D 8, I've pointed out that the first question is usually "Where's the blit function?" We've covered that topic, but the second question, almost as common, is "How do I get GDI functions to work?" In DirectX 7, programmers could get the GDI DC (Device context) handle and then use Win32 GDI commands directly on the surface. While GDI is generally slow, in many situations (particularly where execution speed is not a big issue) GDI provides very robust functions that handle a lot of graphic basics, saving programmers from much of the effort of creating routines from scratch. If nothing else, GDI routines could be used during prototype development, to be replaced by custom optimized routines later on. With Direct3D 8, that option is gone. It is no longer possible to "legally" get a DC handle to the primary surface, and so GDI commands to the screen are not possible. There are two possible solutions to this. First, you can create an off-screen bitmap surface with the CreateCompatibleDC/ CreateCompatibleBitmap() combination, do your GDI commands to this bitmap, and then copy the bitmap data to a texture that you can then draw to the screen. Second, you can replace the GDI commands with new custom versions.
Das Workaround find ich dann doch etwas umständlicher als nen einfacher Aufruf von DrawPrimitiveUP
-
Ich hab das mal ausprobiert mit dem DC der Surface holen...
Also mit Rectangle geht das sowieso nicht weil alles zwischen den Kanten des Rechtecks weiß bzw irgendeine Farbe annimmt!
Also hab ich mal MoveToEx und LineTo probiert aber das problem ist dass das alles nicht so ganz funktioniert...
Ich werd weiter damit rumprobieren, anscheinend is das ja das Einzige was funktionieren würde (?)Ich beschäftige mich erst seid kurzem mit Direct3D und das
zeichne einfach mit einem D3DPT_LINESTRIP und den 4 punkten des rechtecks selbiges aus vertices mit D3DFVF_XYZRHW (also bereits transformierte koordinaten, da kannst du sogar gleich die mauskoordinaten nehmen) auf den schirm.
die farbe lässt sich über ein material machen.sagt mir leider nicht viel
Kennt ihr ne andere Möglichkeit?
-
Ich kenn das Andere "In der Doku nachschauen". Da steht sowas nämlich alles drin.
Bye, TGGC (Das Eine, welches ist.)
-
Nur so aus Interresse wie weit bist du mit deinem Spiel?
-
Bis jetzt kann man Karten laden.
Panzer erstellen, markieren, an einen Punkt schicken oder einen gegnerischen Panzer angreifen.
Grafisch funktioniert auch alles.
Nur das mit dem Markieren fehlt.Das Problem ist bei der GetDC Variante, dass wenn ich mit Rectangle oder dgl das Rechteck zeichne, dass ja der Rest (wenn ich es in eine zweite Surface zeichne, die ich dann über die anderen drüber lege) mit dem Schwarz( weil das ja tranparentes Schwarz wird wenn ich es beim Erstellen angebe) überlagert wird und im Endeffekt nichts außer dem Markierungsrechteck angezeigt wird!
Das mit dem D3DPT_LINESTRIP hab ich mir angesehen aber leider keine Beispiele gefunden. und nur mit den Definitionen .. kann ich leider wenig anfangen