PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : direct3d für 2d-grafik


Caesar
15.09.2006, 14:20
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*


gencha
15.09.2006, 15:02
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

Caesar
15.09.2006, 15:24
danke, das sieht schon mal sehr interessant aus. ich werde erstmal ein weilchen lesen müssen. ;)

Caesar
16.09.2006, 23:35
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*

Caesar
17.09.2006, 22:58
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.

gencha
18.09.2006, 12:14
Wie komfortabel denn noch?

Caesar
18.09.2006, 14:57
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

gencha
18.09.2006, 18:42
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.

Caesar
18.09.2006, 18:47
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?

gencha
18.09.2006, 18:59
Naja nich zwingend. Aber ansonsten sieht man halt nix ;)

Caesar
18.09.2006, 19:01
jo, ok.
"wie sie sehen, sehen sie nichts." :)