Rechtecke unter DirectX



  • Zuerst dachte ich einfach an Rectangle(....); über WINAPI aber ich dachte vlt gibt es schon fertige Funktionen in DirectX....

    Ich beschäftige mich erst seid 2 monaten mit DirectX und dass auch nur nebenbei ...
    Das Alpha(blending!?) hab ich noch ned durschaut...
    ich hab mehrere Dinge draüber gefunden aber nirgends was konkretes wie man damit was anstellen kann und wo ich dafür welche Parameter übergeben muss oder dgl.

    Nebenfrage:
    Programmiert ihr auf rechnern mit verschiedenen OS?
    ich programmiere daheim mit ME und in der schule mit XP und wenn ich auf dem einen was mache streikt das meistens bei dem andern PC.
    (Große Surfaces werden von Xp ned zugelassen, Pointer zeigen irgendwo hin und dgl.)



  • @Dadi es geht hier um das Auswahlrechteck für die Einheiten, nicht um nen Markierung für ausgewählte Einheiten (wobei das dürfte dann die nächste Frage sein =)).

    @Kuldren jetzt verrate uns doch mal mit was du deine Grafiken zeichnest (wenn du jetzt DirectX antwortest hau ich dich 😛 ;)), dann kann man dir auch sagen wie du das Rechteck zeichnen kannst. Also nimmst du DirectDraw oder Direct3D?



  • Jup Auswahlrechteck...
    aber ich dachte das mit dem markieren einer ausgewählten einheit kann ich ja mit einem andern rechteck um die einheit odereinem kleinen balken darüber lösen...

    DirectX : Direct3D....zumindest nehm ich das an weil ich grad kein schimmer hab was der unterschied zwischen Direct3D und DirectDraw wär...
    +in dem Buch das ich hab und von dem aus ich mir das beigebogen hab, steht auch nur Direct3D (objekte anlegen und dgl)

    Ich hab das ganze spiel (zumindest die GrundGrafik"Engine") auch mal nur mit WINAPI programmiert aber dashat mir grad mal 7 FPS gebracht also hab ich mich für directx entschieden...



  • @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?
    @Kuldren: DirectDraw ist für 2d Sachen aber schon lang veraltet darum nimm Direct3d passt schon.



  • es soll einfach wie die WINAPI Funktion sein...
    nur weiß ich ned ob die so sonderlich performant is...
    mit nem Pixel kantenbreite oder so und halt einer möglichkeit die farbe der kante zu ändern...



  • 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.

    Quelle

    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.)


Anmelden zum Antworten