Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Pokaż wątki - bartekm

Strony: [1]
1
Projekty zaawansowane / Pivotris
« dnia: Kwiecień 13, 2017, 01:54:39 »
Przedstawiam mój tetrisowy projekt, czyli Pivotris. Pomysł na grę wziął się stąd, że chciałbym zagrać w tetrisa na obróconym monitorze, tzn. ustawionym w pozycji vertykalnej, która wydaje się najbardziej optymalną. Dotychczas nie znalazłem takiej gry, więc postanowiłem napisać ją sobie sam.

Póki co jest zrobiona: logika, jako taka grafika. Jest też obsługa gamepadów i pivota, ale dopiero jak dodam menu to będzie można te rzeczy włączyć prosto z gry. Gra powinna wyświetlać się na każdych rozdzielczościach począwszy od 800x600 wzwyż, niezależnie od proporcji ekranu.

Link do projektu: https://warsztat.gd/projects/pivotris

2
Matematyka i fizyka / Liczby Bernoulliego - algorytm
« dnia: Styczeń 09, 2017, 14:12:37 »
Mam problem z uzyskaniem kolejnych liczb Bernoulliego. Używam algorytmu Akiyama–Tanigawy, który u mnie wygląda tak:
double bernoulli_number(unsigned int n)
{
double* A = new double[n+1];

for (unsigned int m = 0; m <= n; m++)
{
A[m] = 1.0 / (m + 1.0);

for (unsigned int j = m; j > 0; j--)
{
A[j - 1] = j*(A[j - 1] - A[j]);
}
}

double res = A[0];

delete[] A;

return res;
}

Algorytm działa, ale każda kolejna liczba zaczyna być opatrzona coraz to większym błędem. Np dla 30 kolejnych liczb otrzymuje się:
1 0.5
2 0.1666666666666666
3 -2.220446049250313e-16
4 -0.03333333333333399
5 1.77635683940025e-15
6 0.02380952380956758
7 3.794742298168785e-13
8 -0.03333333333154209
9 -1.044986319698182e-11
10 0.07575757526731397
11 -9.93349424938117e-09
12 -0.2531137033204133
13 -1.556503844035717e-06
14 1.166667679153587
15 0.0006419491273961242
16 -7.068502074522296
17 0.6405601281966771
18 69.99698015616998
19 323.0140711709549
20 5986.641669860796
21 120040.0651014931
22 1589860.901390899
23 -19576696.20832111
24 -3163545259.292155
25 -195508362222.1589
26 -9583584454807.713
27 -413822699863629.6
28 -1.630954724494887e+16
29 -5.98305130690999e+17
W miejscach nieparzystych 3, 5, 7 itd powinno być 0.0. Np B18 = 54.97 a u mnie 69.99.
Ktoś wie co może być przyczyną tak szybko rosnącego błędu? Wydaje mi się, że to jest błąd zaokrąglenia, ale może są to jakieś ustawienia kompilatora.

3
OpenGL / OpenGL 3.2 - migające okno
« dnia: Sierpień 18, 2011, 11:45:33 »
Mam taki problem. Stwarzam sobie okno OpenGL zgodnie z tutorialem Janusza Ganczarskiego. Okno tworzy się i jest ok, ale kiedy czyszczę je na np. fioletowy kolor to zamiast ciągłego fioletowego koloru mam zmieniający się co klatkę fioletowy i czarny. Wygląda to tak jakby co klatkę zmieniał się rendering context. Raz jest to Ogl3.2 a innym razem jedzie na sofcie. W programie wykrywającym API (EVGA Precision) podaje informacje, że raz jest to OGL, a w następnej klatce APP. Ściągnąłem jakieś przykłady exec-ów z OGL3.2 i mam to samo. Próbowałem też tworzyć okno i context przy pomocy SDL i też jest to samo. Nie wiem czy to wina sterów, ale mam najnowsze, karta 8800 GS. Ktoś miał podobny problem albo ktoś wie dlaczego tak się dzieje? Załączam też aplikację, ciekawe jak to działa u innych. Kod jest ten sam co w przykładach J. G.

4
Programowanie grafiki / W jakim API programujesz?
« dnia: Wrzesień 27, 2010, 00:10:08 »
Witam, chciałbym się dowiedzieć jakie API jest najpopularniejsze wśród użytkowników Warsztatu. Czy jest więcej zwolenników OpenGL-a, czy też może Direct-a i z których wersji tych API najczęściej się korzysta. Nie chce wywoływać wojny OGL vs DX, od tego jest inny wątek, zależy mi bardziej na wypełnieniu ankiety.

5
Kupię / [Sprzedam] Książki dotyczące tworzenia stron WWW
« dnia: Czerwiec 03, 2010, 14:38:49 »
Sprzedam dwie książki dotyczące tworzenia stron WWW:

PHP i MySQL - 8 komponentów dla kreatywnych Webmasterów, Jono Bacon

http://www.allegro.pl/show_item.php?item=1067204825

Joomla! - Profesjonalne tworzenie stron WWW, Dan Rahmel

http://www.allegro.pl/show_item.php?item=1067227096

Stan obu książek jest bardzo dobry. Cena może być jeszcze do uzgodnienia.

6
Warsztat.gd / Znacznik [code]
« dnia: Maj 02, 2010, 15:35:21 »
Mam pytanie odnośnie znacznika "code". Czy nie dało by się powiększyć czcionki kodu, bo jak dla mnie jest trochę za mała i muszę przyznać, że mam czasami przez to problem z połapaniem się w kodzie. Przydało by się też zwiększyć pole wyświetlania kodu, bo to jakie jest teraz, jest trochę za małe. Taka zmiana nie jest trudna do wprowadzenia wystarczy poszperać w pliku stylów.

7
Szkółka / CUDA i działanie kernela
« dnia: Kwiecień 21, 2010, 15:11:12 »
Witam, mam taki problem, mam sobie taki kawałek kodu, jest to kernel CUDA, czyli funkcja wywoływana na GPU. Ten kod powinien obliczać przyspieszenie działające pomiędzy ciałem "i-tym" i "j-tym" ciałem. Jednak nie oblicza mi poprawnie tzn, zwraca a = 0. I moje pytanie co robię nie tak.


__global__ void ObliczPrzysp(float3 *pol, float3 *a, float *mass, int M, float GG, float pp)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;

int j = blockIdx.y * blockDim.y + threadIdx.y;

float4 delta;
float Q;

if(i<M && j<M)
{
if(i!=j)
{
delta.x = pol[i].x - pol[j].x;
delta.y = pol[i].y - pol[j].y;
delta.z = pol[i].z - pol[j].z;
delta.w = sqrtf(delta.x*delta.x + delta.y*delta.y + delta.z*delta.z + pp);
Q = GG*mass[j]/(delta.w*delta.w*delta.w);
a[i].x += Q*delta.x;
a[i].y += Q*delta.y;
a[i].z += Q*delta.z;
}
}
}


Ten sam kod napisany pod jedną iterację, tzn:

__global__ void ObliczPrzysp(float3 *pol, float3 *a, float *mass, int M, float GG, float pp)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;

float4 delta;
float Q;

for(j=0;j<M;j++)
{
if(i!=j)
{
delta.x = pol[i].x - pol[j].x;
delta.y = pol[i].y - pol[j].y;
delta.z = pol[i].z - pol[j].z;
delta.w = sqrtf(delta.x*delta.x + delta.y*delta.y + delta.z*delta.z + pp);
Q = GG*mass[j]/(delta.w*delta.w*delta.w);
a[i].x += Q*delta.x;
a[i].y += Q*delta.y;
a[i].z += Q*delta.z;
}
}
}


działa poprawnie, tzn. oblicza mi "a" i wszystko przebiega dobrze, ale wydajność nie jest taka jaką bym chciał, ze względu na umiejscowioną pętlę "for" wewnątrz kernela. Dla dużych M, wątek musi wykonać naprawdę dużo obliczeń, co znacznie spowalnia aplikację i zużywa grafikę tak, że nie da się normalnie pracować. Czy da się to jakoś zooptymalizować? Jak powinien wyglądać kod, żeby to działało pod "dwuwymiarowe bloki" tzn gdy:
int i = blockIdx.x * blockDim.x + threadIdx.x;

int j = blockIdx.y * blockDim.y + threadIdx.y;

8
Szkółka / SDL i wydajność
« dnia: Kwiecień 09, 2010, 10:35:44 »
Hej, zacząłem programować sobie w SDL-u i mam problem z wydajnością. Piszę sobie silnik, na którym będę robił gry przygodowe 2D typu point&click, kto grał w serię Monkey Island wie o co chodzi. Mam taki problem, że to co napisałem koszmarnie wolno mi chodzi, tzn zarzyna mi procka mimo, że ma dwa rdzenie. Domyślam się, że wszystko chodzi na sofcie, tzn. że do rysowania zmuszany jest procek, a nie karta grafiki. Teoretycznie rozwiązało by sprawę połączenie tego z OpenGL, ale wolałbym pozostać pod samym SDL z tego względu, że pod SDL łatwo się zarządza "powierzchniami" (ang. surfaces) i łatwo można animować obiekt. W OGL trzeba się bawić w jakieś loadery tekstur i w ogóle jest to wszystko bardziej zamotane. I teraz dwa pytania:
1. Czy jeśli połączył bym SDL z OpenGL, czy dalej mógłbym korzystać z SDL-owskich powierzchni, żeby wyświetlać coś na ekranie, czy muszę to zrobić tak jak to się robi pod OpenGL?
2. Czy da się poprawić wydajność np w taki sposób, żeby rysowanie przejęła karta grafiki, ale nie trzeba było korzystać z OGL-a?

Strony: [1]