Autor Wątek: Tworzenie nowej tekstury na przeźroczystym tle  (Przeczytany 2343 razy)

Offline michal_2

  • Użytkownik

# Kwiecień 15, 2013, 11:44:13
Piszę grę. Chciałbym malować na przeźroczystym tle. Chodzi mi o rysowanie w spriteBatch'u. Jak wyczyszczę RenderTarget2D kolorem Color.Transparent, to i tak jest czarne.

Chciałbym zmiksować kilka tekstur i zapisać do wspólnej tekstury, a następnie nałożyć całość na główną grę. Jednak nie wiem jak uzyskać przeźroczyste tło.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Kwiecień 15, 2013, 14:54:37
Może zamiast czyścić powierzchnię kolorem przezroczystym (bo prawdopodobnie chodzi o to, że z powodu alpha blendingu nic się nie czyści), podmień powierzchnię na nową o takich samych wymiarach i całą przezroczystą. Nie wiem jak to konkretnie zrobić, nigdy w XNA nie kodziłem.

Offline Chimerian

  • Użytkownik
    • Profil na Warsztat.GD

# Kwiecień 16, 2013, 10:33:57
Chciałbym zmiksować kilka tekstur i zapisać do wspólnej tekstury, a następnie nałożyć całość na główną grę. Jednak nie wiem jak uzyskać przeźroczyste tło.

Moje pytanie - po co zapisywać do wspólnej tekstury ? To tylko zbędne dodatkowe operacje dla komputera. Jeżeli chcesz zmiksować tekstury, to masz moim zdaniem dwa logiczne wyjścia:
  • Miksujesz je w jakimś programie graficznym (np. gimp) i zapisujesz jako plik PNG (ma obsługę przeźroczystości). W XNA ustawiasz kolor tła na biały i wyświetlasz jedynie plik wynikowy.
  • Ustawiasz kolor tła na biały i wyświetlasz kilka tekstur za pomocą spritebatch jedna na drugiej. Oczywiście pliki muszą obsługiwać przeźroczystość (polecam pliki PNG).

Pierwszy sposób jest zdecydowanie lepszym rozwiązaniem pod względem wydajności - wyświetlasz tylko jedną teksturę. Drugi sposób daje Ci większe pole do popisu (tekstura wynikowa może się zmieniać w trakcie działania programu po przez podmianę jednej z tekstur składowych), ale kosztuje to większą ilość operacji (trzeba narysować kilka tekstur).

Offline Pawelx156

  • Użytkownik

# Kwiecień 16, 2013, 11:28:33
Pierwsze słyszę że nie można wyczyścić stworzonego przez siebie RenderTarget2D na color transparent.

RenderTarget2D Paralax = new RenderTarget2D(GraphicsDevice, ResolutionMenager.VirtualWidth, ResolutionMenager.VirtualHeight);

GraphicsDevice.SetRenderTarget(Paralax);
GraphicsDevice.Clear(Color.Transparent);

//  wszystko co rysujesz będzie tutaj

GraphicsDevice.SetRenderTarget(null);


Skoro mi to działa to i tobie też musi.

Offline michal_2

  • Użytkownik

# Kwiecień 16, 2013, 15:57:08
Tekstury miksuję co framkę, gdyż zmieniam co framkę ich wielkość. A muszę je mieć w jednej teksturze, bo potem nakładam na nią maskę i wycinam tylko fragment tej tekstury, który następnie nanoszę na grę.