Force Napisano Lipiec 6, 2008 Zgłoś Share Napisano Lipiec 6, 2008 Napisałem sobie kod, który w założeniu ma generować mapę wysokości używając szumu Perlina. przepisałem go z książki z C++ i tam działa u mnie nie. Parametr jaki przesyłam do mojej funkcji szumu jest za duży po pewnej iteracji pętli i dostaje wyjątek z tego powodu, i to wszystko jedno czy użyje integer czy int 64. Mapa ma wymiary - (0..623,0.493). Mój kod: for y := 0 to Height do for x := 0 to Width do begin xf := x/Width*NoiseSize; yf := y/Height*NoiseSize; total := 0; for k := 0 to Octaves - 1 do begin // Obliczam frekwencje i amplitudę freq := Power(2,k); amp := Power(Persistence,k); // Obliczam kordynaty szumu tx := xf*freq; ty := yf*freq; tx_int := Round(tx); ty_int := Round(ty); //Oblicam ułamki x i y fracX := tx-tx_int; fracY := ty-ty_int; // Dla oktawy obliczam szumy 4 punktów v1 := Noise(tx_int+ty_int*57+Generateseed); v2 := Noise(tx_int+1+ty_int*57+Generateseed); v3 := Noise(tx_int+(ty_int+1)*57+Generateseed); v4 := Noise(tx_int+1+(ty_int+1)*57+Generateseed); //Wygałdzam po x i1 := CosInterpolate(v1,v2,fracX); i2 := CosInterpolate(v3,v4,fracX); //Wygładzam po y i dodaje do sumy total := total+CosInterpolate(i1,i2,fracY)*amp; end; b := Round(128+total*128); if b<0 then b := 0 else if b>255 then b := 255; fHeights[x,y] := Round(b/255*MaxHeight); end; Czy ktoś kiedyś pisał szum w Delphi i czy miał podobne obliczanie wartości dla każdej oktawy? Bo chyba to nie wina wymiaru map? Błąd sie pokazuje prawie natychmiast (y=0, a x Edit: Problem rozwiązany. Po debugowaniu kodu w c++, okazało się, że.. integer ma być przepełniany i powinienem wyłączyć w tym miejscu czepianie się o to. Głupie C Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.