C# i Directx

0

Witam, stawiam pierwsze kroki w programowaniu z wykorzystaniem Directx i ostatnio natknąłem się na dość oporny problem.
Robię prostą gierkę w visualu 2008, język C#, windows Form aplication.
Udało mi się już z wykorzystaniem directx wyświetlić grafikę 3D, zrobiłem obsługę obracania kamery myszą, zmienianie pozycji kamery z użyciem klawiatury. Niestety dalej natknąłem się na problem z wyświetleniem oddzielnej grafiki która by pełniła role małej tabelki z statystykami.
Chciałbym abym mógł wyświetlić pomieszczenie w 3D, obracać kamerą, przemieszczać kamerę, ale dodatkowo wyświetlić niezależny prostokąt który by służył jako tabelka do wyświetlenia różnych statystyk. Wyświetlenie samego tekstu to nie problem, ale żeby to nie było takie denne, chcę aby ten tekst był na tle jakiegoś obrazka(cos w tym stylu).

wygląd w chwili obecnej:
http://k00.img-up.net/gra1qx0eu.jpg

wygląd oczekiwany(coś w takim stylu):
http://l82.img-up.net/gra24bq5b.jpg

W chwili obecnej utknąłem w miejscu przez ten szczegół :/
Prosił bym o jakieś proste przykłady, linki do tutoriali itp.

0

http://riemers.net/ - bardzo dobry kurs grafiki 3D m.in. w C#, jest opisane XNA oraz czysty DirectX.net własnie w sharpie. Sam niestety na razie mogę Cię wspomóc tylko tym linkiem, gdyż za dużo w DirectX nie potrafię zdziałać :) Bawiłem się tym kiedyś, ale poddałem się. Mam nadzieję, że znajdziesz tam rozwiązanie :)

0

Dotarłem do tej strony, niestety albo nie potrafię tam wydobyć potrzebnych dla mnie informacji, albo ich tam nie ma.
Z tego co tam widziałem, w żadnym przykładzie ktoś nie pokusił się o coś takiego co ja chcę osiągnąć.
Mimo wszystko dzięki za odp, i zachęcam do dalszych podpowiedzi, cały dzień przy google spędziłem i nie znalazłem, może wam się poszczęściło, albo sami posiadacie taką wiedzę :)

0

Dla GUI potrzebujesz osobnej macierzy projekcji: rzut ortograficzny gdzie jednostce odpowiada piksel. Wtedy rysujesz quada z teksturą w wybranym miejscu.
Nie wiem jak jest w Managed DirectX (po co w ogóle się w to bawić?), ale w XNA wyglądałoby to tak:

//po narysowaniu sceny
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture, area, Color.White);
spriteBatch.DrawString(font, "tekst", new Vector2(area.X, area.Y), Color.White);
spriteBatch.End();

SpriteBatch to klasa w XNA która robi z grubsza to co powiedziałem.

0
chrabeusz napisał(a):

Dla GUI potrzebujesz osobnej macierzy projekcji: rzut ortograficzny gdzie jednostce odpowiada piksel. Wtedy rysujesz quada z teksturą w wybranym miejscu.
Nie wiem jak jest w Managed DirectX (po co w ogóle się w to bawić?), ale w XNA wyglądałoby to tak:

//po narysowaniu sceny
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture, area, Color.White);
spriteBatch.DrawString(font, "tekst", new Vector2(area.X, area.Y), Color.White);
spriteBatch.End();

SpriteBatch to klasa w XNA która robi z grubsza to co powiedziałem.

Dzięki twojej pomocy coś już się udało zrobić, daje się wyświetlić texture która zawsze jest przed resztą sceny.

device.BeginScene();
//jakis kod
device.EndScene();
sprite.Begin(SpriteFlags.SortDepthBackToFront);
sprite.Draw(Textury[2], new Vector3(0, 0, 0), new Vector3(0, 300, 0), 16777215);
sprite.End();
device.BeginScene();
font.DrawText(null, ((int)time / 1000).ToString(), 8, 310, Color.FromArgb(250, Color.Red));
device.EndScene();

Teraz mam tylko problem, nie wiem jak mogę ustalić rozmiar tego elementu co rysuje metoda sprite.Draw
I też mam pytanie czy nie jest to jakieś nie zalecane zaczynać 2x "scene" podczas pojedynczego renderowania ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1