SDL_Draw - vykreslování kružnice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SDL_Draw -  vykreslování kružnice – C / C++ – Fórum – Programujte.comSDL_Draw - vykreslování kružnice – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
19. 5. 2009   #1
-
0
-

Už celé odpoledne sedím nad jednou záhadou. Potřebuji do okna vykresit kružnici, která občas trčí ven z okna. Metoda vykreslení kružnice z SDL_Draw toto neošetřuje. Tak si vytvořím pomocnou srface, kam vykreslím kružnici a její potřebnou část potom do okna. Můj kód vypadá takto (zatím je v tom bordel, jelikož mi to stále negunguje):

SDL_Surface *su = SDL_CreateRGBSurface(SDL_SWSURFACE, sa.kolk[i].kruh.r * 2 + 1, sa.kolk[i].kruh.r * 2 + 1 , 32,

#if SDL_BYTEORDER == SDL_LIL_ENDIAN
0x000000FF,
0x0000FF00,
0x00FF0000,
0xFF000000
#else
0xFF000000,
0x00FF0000,
0x0000FF00,
0x000000FF
#endif
);//Definice surface; sa.kolk[i].kruh.r získává z mé struktury poloměr kružnice, několikanásobného volání jsme s vědom.
//SDL_UnlockSurface (su);// toto jsme zkoušel, bohužel nepomohlo
SDL_SetAlpha(su, SDL_SRCALPHA, 255); ///Vyplnění surface průhlednou barvou
SDL_FillRect(su, NULL, 0xFF0000);//viz text níže
Draw_Circle(su, sa.kolk[i].kruh.r+1, sa.kolk[i].kruh.r+1, sa.kolk[i].kruh.r, 0xFFFFFF);//Vykreslení kružnice
SDL_UpdateRect(su, 0, 0, su->w, su->h);//Obnovaní surface - bez ní nefunguje
SDL_Rect dst;
dst.x = sa.kolk[i].kruh.b.getb().x - sa.kolk[i].kruh.r - 1;
dst.y = sa.kolk[i].kruh.b.getb().y - sa.kolk[i].kruh.r - 1;
dst.h = dst.w = su->h;
SDL_BlitSurface(su, NULL, okno, &dst);//Vykreslení do okna

SDL_FreeSurface(su);


Teoreticky by mělo fungovat, ale nefunguje. Pouze když vyplním surface červenou barvou, tak se mi zobrazí černý obdélník s průhledný kruhem...
Nevíte co s tím? Děkuji za každou radu

Nahlásit jako SPAM
IP: 85.160.88.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
yaqwsx+9
Posthunter
20. 5. 2009   #2
-
0
-

Zkoušel jsem už všechno možné, ale stále to vypadá jakoby metoda Draw_Circle kreslila průhlednou barvu a metoda SDL_SetAlpha vůbec nefungovala... Vždy, když do surface dám nějaká data, vykreslím kružnici a potom vykreslím do okna, tak se mi vykreslí obsah surface, ale na místech kde je kružnice je surface průhledný...

Nahlásit jako SPAM
IP: 85.160.83.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Wizard0
Stálý člen
20. 5. 2009   #3
-
0
-

To yaqwsx : Hmm a co je zac funkcie 'Draw_Circle'? Pokial viem, tak to nieje standartna funkcia SDLka. Neni chyba v tej funkcii?

Nahlásit jako SPAM
IP: 85.216.182.–
yaqwsx+9
Posthunter
20. 5. 2009   #4
-
0
-

To Wizard : Je to funkce z SDL_Draw - doplněk k SDL na kreslení základních geometrických údajů. Funguje dobře při vykreslování přímo do okna. Bohužel nedefinuje co se stane, pokud kreslím mimo surface, proto musím kružnici prvně vykreslit do sub-surface a až tu do okna....

Nahlásit jako SPAM
IP: 85.160.83.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
bukaj_0010
Věrný člen
21. 5. 2009   #5
-
0
-

yaqwsx
V dokumentaci SDL k SDL_SetAlpha[1] je poznámka, že se při přechodu z verze na 1.1.4 na 1.1.5 naprosto obrátil význam posledního atributu (alphy) – co dříve znamenalo naprostou průhlednost dneska značí neprůhlednost a naopak.

Zkusil bych si taky pohrát s barvou předávanou fci Draw_Circle().

[1] http://www.libsdl.org/cgi/docwiki.cgi/SDL_SetAlpha

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
yaqwsx+9
Posthunter
21. 5. 2009   #6
-
0
-

To bukaj_001 : Díky. Nějak jsem to při pročítání změn musel přehlédnout anebo na to zapomenout...

Ale už vím, kde je zakopaný pes - funkce Draw_Circle neupravuje alpha kanál vrstvy, takže když spustím SDL_SetAlpha, tak se kružnice vykreslí, ale zůstane jí průhlednost. Jediné řešení, kromě psaní vlastní funkce pro kreslení kružnice, mě napadá vykreslit si patřičnou část okna do pomocné surface, do ní vykreslit kružnici a tu zpět okna. Ale to už mi přijde hodně neefektivní...
Nemá někdo lepší nápad?

Nahlásit jako SPAM
IP: 85.160.85.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 129 hostů

Podobná vlákna

Rovnice kružnice — založil Divisor

Polomer kružnice — založil Martin

Kružnice - jak na to — založil Bombon

Vykreslení kružnice — založil RePRO

Vykreslení kružnice v konzoli — založil Sir Andrew

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý