Archiv verlassen und diese Seite im Standarddesign anzeigen : direct3d für 2d-grafik
hi!
vorab: ich arbeite mit managed directx und c#. ich habe schon etwas mit direct3d experimentiert und möchte nun etwas ernsthafter an die sache herangehen.
zur frage: ich möchte gerne zunächst mal mit 2d-grafiken anfangen. ich denke mir, daß ich dazu einfach die z-koordinate bei allen figuren mit einer konstanten z.b. 0 belege. ich habe als bildschirmauflösung 1024x768 pixel festgelegt. ich möchte jetzt gerne die kamera so positionieren und ausrichten, daß sie nicht mehr entlang der z-achse (+ also in die tiefe) "schaut", sondern so, daß der erste quandrant (positiver x- und y-achsenabschnitt) so im bild ist, daß der ursprung (0;0) in der unteren linken bildschirmecke ist. welche einstellungen muß das kamera-blickfeld (frustum) haben?
wäre sehr dankbar, wenn mich jemand einweihen würde. ;)
gruß,
*Caesar*
Das wichtige bei 2D Arbeit in D3D ist mit pre-transformed vertices zu arbeiten.
Die "Kamera" spielt hierbei garkeine Rolle. Ich empfehle dir folgenden Link zu dem Thema: http://www.toymaker.info/Games/html/2d_games.html
danke, das sieht schon mal sehr interessant aus. ich werde erstmal ein weilchen lesen müssen. ;)
hi!
so, sprites zeichnen und animieren und text zeichnen, hab ich nun in managed directx hinbekommen.
jezt habe ich eine konzeptionelle frage : ich habe das OnPaint-event einer windows-form überschrieben und rufe dort die zeichen-funktionen auf:protected override void OnPaint(PaintEventArgs e)
{
device.Clear(ClearFlags.Target,Color.Black,1.0f,0);
// Scene
device.BeginScene();
sprite.Begin();
DrawSprite(200,500,grad2bogen(70),@"d:\yahtzee2\sechs.bmp");
sprite.End();
font.DrawText("Super",new Rectangle(50,50,1024,768),DrawTextFormat.NoClip | DrawTextFormat.ExpandTabs | DrawTextFormat.WordBreak,Color.Yellow.ToArgb());
device.EndScene();
// Present
device.Present();
}die frage ist nun: gibt es eine "pipeline" oder sowas, wo man zeichen-anweisungen reinschieben kann? denn ich kann ja schlecht alle zeichen-operationen, die sich durch benutzer-eingaben etc. ergeben, hier reinschreiben. gibt es da ein stichwort, wonach ich suchen sollte?
gruß,
*Caesar*
so, ich habe jetzt den quellcode eines kleinen spiels gesehen. dort wurden in der oben geposteten methode tatsächlich alle zeichen-anweisungen aufgelistet. kontrolliert wurden die anweisungen durch prüfen von bool-variablen. das habe ich bisher bei gdi+ genauso gemacht. ich hatte nur gehofft, daß das bei directx etwas komfortabler gelöst ist.
Wie komfortabel denn noch?
naja, superpraktisch wäre es, wenn man fast überall im quellcode schreiben könnte:device.BeginScene();
DrawWasTolles(x,y);
device.EndScene();und man das zeichnen dann nur noch mit dem neuzeichnen der "form" anstoßen müßte. aber das scheint nicht zu gehen. dann friert die anwendung ein.
naja, ich kann damit leben, aber das wird die onpaint-methode bei zunehmender komplexität in ein hübsches if- und switch-kunstwerk verwandeln. :)
gruß,
*Caesar*
Peter Bucher
18.09.2006, 16:56
Hallo
Hmm, täusch ich mich jetzt da oder kannst du nicht einfach die Referenz des Devices an eine beliebige Zeichenmethode übergeben und diese dann nutzen?
àla:
DrawSomething(device, x, y);
// Und in der Methode:
DrawSomething(Device device, int x, int y) {
device.Draw....x, y
}
Gruss Peter
Also erstmal, zwichen BeginScene und EndScene kannst du soviele Draw Commands anstoßen wie du willst (bzw es deine Hardware zulässt). Und wo du das machst ist auch vollkommen egal. Das was eigentlich gezeichnet werden sollte, sollte man der Schönheit halber eh in eine andere Klasse packen.
ja, so habe ich das auch verstanden.
folgendes: nach dem device.EndScene() muß doch aber device.Present() folgen, bevor man wieder device.BeginScene() machen darf, oder?
Naja nich zwingend. Aber ansonsten sieht man halt nix ;)
jo, ok.
"wie sie sehen, sehen sie nichts." :)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.