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 - radsun

Strony: [1] 2
1
DirectX / [DX9] Renderowanie do tekstury, multisampling
« dnia: Czerwiec 13, 2014, 12:13:55 »
Witam!
W menu mam tworzenie postaci gdzie renderuje do tekstury animowany model postaci. Wszystko działa dobrze o ile nie włączę multisamplingu. Gdy jest włączony wygląda jakby z-bufer był wyłączony.

Oto co robię:
1. Tworzę teksturę 128x256
2. W czasie aktualizacji:
SURFACE surf;
//device->SetRenderState(D3DRS_ZENABLE, TRUE);
//device->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
V( tChar->GetSurfaceLevel(0, &surf) );
V( device->SetRenderTarget(0, surf) );
V( device->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0x00FFFFFF, 1.f, 0) );
V( device->BeginScene() );

// renderowanie

V( device->EndScene() );
surf->Release();
V( device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &surf) );
V( device->SetRenderTarget(0, surf) );
surf->Release();

Patrzałem co tam widać w pixie i wyskakuje komunikat "The current file is using multisampling. Would you like to disable multisampling, so the pixel history will match the render targets?". Jak dam tak to wszystko jest ok, jak nie to wygląda tak jak widać. Debugowałem pixel tarczy i pisze że został odrzucony przez depth test a pomimo tego i tak go widać.

Próbowałem utworzyć DepthStencilBuffer o rozmiarze 128x256 ale nic to nie zmieniło.

2
DirectX / Całkowita przezroczystość tekstur
« dnia: Wrzesień 02, 2010, 11:55:41 »
Witam!

Mam problem z rysowaniem wierzchołków z całkowicie przezroczystą teksturą. W załączniku dałem obrazek żeby było wiadomo o co chodzi. Gdy najpierw jest rysowany ten pierwszy wierzchołek zapisuje pozycje w zbuforze i ten następny już się nie rysuje w tym miejscu bo jest dalej (przynajmniej tak to rozumiem :) ). Czy jest jakaś możliwość żeby nie zapisywać pozycji w zbuforze dla tych niewidocznych miejsc?

Wyczytałem żeby w przypadku particli sortować jest w zależności od odległości, tylko że ten problem występuje w przypadku jednego obiektu, konkretnie drzewa.

Tak ustawiam przezroczystość:
Kod: (cpp) [Zaznacz]
devi->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
devi->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
devi->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
devi->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

3
Programowanie grafiki / Liczenie normalnych
« dnia: Czerwiec 20, 2010, 23:20:07 »
Witam!
Mam pytanie dotyczące liczenia normalnych, programuje edytor poziomów który generuje siatkę którą następnie wczytuje w grze. Z samą geometrią nie ma problem jest natomiast z liczeniem normalnych. Jeśli wygeneruje je prostym sposobem, czyli każdy prostokąt ma te same normalne tworzą się brzydkie cięcia przy oświetleniu.

Z tego co wiem normalne na krawędziach muszą być tak poustawiane jak na obrazku numer 2. To nie było by jeszcze takie trudne, ale co na przykład z sytuacją numer 3 gdzie mamy krawędź. Czy istnieje jakaś metoda generowania normalnych dla takich i bardziej "skomplikowanych" wierzchołków?

4
Szkółka / VC++ dziwny błąd
« dnia: Czerwiec 20, 2010, 21:55:26 »
Witam! Mam dziwny problem ze środowiskiem Visual C++ 2008. Błąd jest w tym fragmencie kodu:
Kod: (cpp) [Zaznacz]
#define TO_I(x,y) (x)+(y)*20
struct Pole { int a; int b; };
Pole* teren;
Pole rpole[9];

// ..
rpole[9] = teren[TO_I(x-1,y+1)]; // <------------
Nie wiadomo dlaczego wywołanie tej linijki ustawia teren na 0. Sprawdziłem w disasemblerze i kod wygląda tak:
   307: rpole[9] = teren[TO_I(x-1,y+1)];
009B67BC  mov         eax,dword ptr [y]
009B67C2  add         eax,1
009B67C5  imul        eax,eax,14h
009B67C8  mov         ecx,dword ptr [x]
009B67CE  lea         edx,[ecx+eax-1]
009B67D2  mov         eax,dword ptr [teren (9EE50Ch)]
009B67D7  mov         ecx,dword ptr [eax+edx*8]
009B67DA  mov         edx,dword ptr [eax+edx*8+4]
009B67DE  mov         dword ptr [n (9EE508h)],ecx
009B67E4  mov         dword ptr [teren (9EE50Ch)],edx  ;<--------------------------
009B67EA  jmp         009B6819
Winowajcą jest przed ostatnia linijka, nie wiem dlaczego ustawiająca wartość rejestru edx za wartość *teren.

Zmieniłem kod rpole[9] = teren[TO_I(x-1,y+1)] na obszary->mapa[TO_I(x-1,y+1)] ale w kodzie nadal występuje ten błąd
   307: rpole[9] = obszary[i]->mapa[TO_I(x-1,y+1)];
011E682C  mov         eax,dword ptr [i]
011E6832  push        eax 
011E6833  mov         ecx,offset obszary (121E46Ch)
011E6838  call        std::vector<Obszar *,std::allocator<Obszar *> >::operator[] (11DBA87h)
011E683D  mov         ecx,dword ptr [eax]
011E683F  mov         edx,dword ptr [y]
011E6845  add         edx,1
011E6848  imul        edx,edx,14h
011E684B  mov         eax,dword ptr [x]
011E6851  lea         edx,[eax+edx-1]
011E6855  mov         eax,dword ptr [ecx+edx*8+8]
011E6859  mov         ecx,dword ptr [ecx+edx*8+0Ch]
011E685D  mov         dword ptr [n (121E508h)],eax
011E6862  mov         dword ptr [teren (121E50Ch)],ecx  ;<---------------- x]
011E6868  jmp         011E6897

Próbowałem rebuild, clean solution i własnoręcznego usuwania plików ale nic to nie pomogło. Czy teoretycznie błąd w innym miejscu w kodzie może doprowadzić do tak dziwnych błędów...?  :-X

5
Windows / VC++ 08 Błąd debuggera
« dnia: Czerwiec 13, 2010, 12:47:45 »
Witam!
Znalazłem pewien błąd w debugerze i mam pytanie czy mógłby ktoś to potwierdzić :) Natomiast jeśli ktoś ma wersje 2010 też mógłby sprawdzić czy ten błąd występuje.

Mamy taki kod:
Kod: (cpp) [Zaznacz]
#include <iostream>

int main()
{
for(int i=0;i<400;i++)
{
if(i==399)
std::cout<<i<<'\n';
}


int i=0;
std::cout<<i<<'\n';

i++;
std::cout<<i<<'\n';

std::cin.get();

return 0;
}

Output:
399
0
1

Po podejrzeniu zmiennej 'i' w debugerze pokazuje wartość 400 - czyli tyle ile miała na koniec pętli.
Otoczenie pętli { } powoduje że działa normalnie.



Uploaded with ImageShack.us

6
C++ / Rzutowanie w template
« dnia: Grudzień 15, 2009, 11:12:26 »
WItam.
Mam strukturę szablonową Pos2<int>(x,y) i Pos3<int>(x,y,z). W Pos2 mam:
operator TVec2<T>::TVec3<T> () const
   {
      return TVec3<T>(x,y,0);
   }

Ten kod jednak nie przejdzie :(
Kod: (cpp) [Zaznacz]
void f(Pos3 p)
{
}

int main()
{
f(   Pos2(0,0)   );
}

Jeśli jednak podpowiem kompilatorowi  " f( (Pos3) Pos2(0,0) ) " przechodzi to bez problemu. Przy innych klasach działa to bez podawania tego.  Jest tu jakiś błąd?

7
Szkółka / Tablica w tablicy
« dnia: Listopad 15, 2009, 16:54:00 »
Witam ;)

Mam tablice w tablicy (tablica jest const) w której są funkcje. W każdej strukturze mam liczbę argumentów i rodzaj każdego. Chciałbym zrobić coś takiego ale oczywiście się nie da. Więc może macie jakieś rozwiązanie?

Kod: (cpp) [Zaznacz]
struct Int
{
int args;
int* data;
};

Int t[] = {
Int(2,  {2,3}   ),
Int(3, {3,4,5} ),
Int(0,  {}      )
};

Mógłbym zrobić np. tak (lub używając va_args)
Kod: (cpp) [Zaznacz]
struct Int2
{
Int2()
{
args = 0;
}
Int2(int a)
{
v0 = a;
args = 1;
}
Int2(int a,int b)
{
v0 = a;
v1 = b;
args = 2;
}

//...

int args;
int v0;
int v1;
};

 :)

8
Matematyka i fizyka / Kwaternion
« dnia: Wrzesień 20, 2009, 12:19:23 »
Witam!
Jak można ustawić jedną z osi obrotu w kwaternionie? Chodzi o to że chcę ustawić kąt X na 90 stopni w kamerze gdy przekroczy 90 stopni. Używam ogre3d jakby coś ;)

Kod: (cpp) [Zaznacz]
Real pitchAngle = camera->getOrientation().getPitch().valueDegrees();
if(pitchAngle > 90.0f)
{
      // camera->setOrientation(Quaternion( ??? ));
}

9
Projekty rozpoczęte / Tankz Ice 2
« dnia: Marzec 19, 2009, 14:55:50 »
Tankz Ice 2

O CO CHODZI?
Druga odsłona czołgów. Lepsza grafika, dźwięk, muzyka, bonusy i trudniejsze boty :) Teraz nie musisz toczyć samotnie bój o przetrwanie, możesz zagrać w trybie drużynowym.
Nie wiadomo skąd na lodowej krze pojawiają się 4 czołgi. Jak długo może wytrzymac taka kra. Niedługo :p Musisz więc walczyć o to aby nie wypaść i przy okazji zepchnąć pozostałych graczy. Dodatkowo co jakiś czas przelatuje paraliżujący laser lub spada obciążnik. Powodzenia!

STEROWANIE:
(gracz - gaz,lewo,prawo,strzał)
gracz 1 - W,A,D,S
2 gracz - góra, lewo, prawo, dół
3 gracz - I, J, K, L
4 gracz - Num8, Num4, Num6, Num6
joystick - góra, lewo, prawo, 1
Esc - pauza
Esc + Enter - powrót do menu
Esc + R - restart
F1 - w menu, pomoc
F2 - pokaż/ukryj fps

link: http://www.easy-share.com/1904085161/tankz_ice2.rar (~2.0 MB)
mirror 1  mirror 2





STRONKA:
http://radsun.80.pl

10
Szkółka / Entry point w DLL/LIB
« dnia: Luty 06, 2009, 15:51:05 »
Witam.
Jak zrobić aby w pliku dll była funkcja main tak żebym jej nie musiał pisać w grze?
Widziałem coś takiego w Esenthel Engine :) więc pewnie się da.

11
DirectX / DirectX i F10
« dnia: Styczeń 25, 2009, 18:07:54 »
Witam!
Nie wiadomo dlaczego ale w każdej mojej grze (zrobionej przez mnie ) gdy wcisnę klawisz F10 gra się zawieszą na chwile lub gdy do czasu jak nacisnę jakiś klawisz. Używam DirectX i DirectInput.

Edit:
Chyba zły dział, bo to raczej wina DirectInput... ::)

12
Projekty rozpoczęte / Treasure Dungeon
« dnia: Styczeń 15, 2009, 11:32:23 »
TREASURE DUNGEON

O CO CHODZI?
Wyruszyłeś do pobliskich podziemi w poszukiwaniu złota.
Im więcej zdobędziesz tym lepiej dla ciebie.
Uważaj na zabójcze pułapki.
Jeśli ukończysz poziom z dobrym czasem zdobędziesz dodatkowe złoto.
Powodzenia!

Do przejścia jest 10 poziomów o rosnącym poziomie trudności.
Jest dźwięk, muzyka, możliwośc ich wyłączenia, zmiany sterowania lub poziomu trudności.

STEROWANIE:
strzałki - ruch bohaterem
Spacja - skok
Enter - ok
Esc - pauza/menu
F2 - pokaż/ukryj fps
Sterowanie bohaterem można zmienić w głównym menu.

WYMAGANIA:
-komputer,klawiatura,myszka,monitor,windows
-Gra wymaga pliku d3dx9_38.dll czyli DirectX'a.
Jeżeli wyskoczy błąd o jego braku możesz go pobrac np z tąd:
http://www.dll-files.com/dllindex/dll-files.shtml?d3dx9_38

link: http://radsun.site40.net/download/treasure.rar (1.11mB)






STRONKA:
Sam robiłem :D Są tam moje pozostałe gry (razem już 4 :) )
http://radsun.site40.pl
http://radsun.bo.pl

13
Szkółka / wsk. na tablice struktur
« dnia: Grudzień 09, 2008, 10:03:14 »
Mam takie pytanko ;)

Mam strukturę:
Kod: (cpp) [Zaznacz]
Vertex vec[4];i funkcję:
Kod: (cpp) [Zaznacz]
void load_vb(VB*,Vertex*);i kod:
Kod: (cpp) [Zaznacz]
load_vb(&vbKwadrat,&vec[4]);Chodzi o to, że nie wiem czy dobrze przekazuję te vertexy do funkcji ::)
Cośtam działa ale nie rysuje tego co trzeba więc wole się upewnić czy tu nie ma błędu

14
Projekty rozpoczęte / Tankz.Front
« dnia: Listopad 30, 2008, 16:59:27 »
TANKZ.FRONT
Moja kolejna minigierka :)

O CO CHODZI?
Obroń swoją bazę przed atakującymi cię czołgami.
Zniszczenie bazy(orła) lub utrata wszystkich czołgów oznacza porażkę.
Po prawej stronie ekranu pokazana jest liczba wrogich czołgów.
Zbieraj bonusy aby zwiększyć szanse na przetrwanie :P
Powodzenia!
Wzorowałem się na 'Tank 1990' jakby ktoś nie wiedział.

STEROWANIE:
gracz1 - a(lewo),d(prawo),w(góra),s(dół),t(strzał)
gracz2 - lewo(lewo),prawo(prawo),góra(góra),dół(dół),ctrl(strzał)
esc - powrót do menu/wyjście

WYMAGANIA:
-komputer,klawiatura,myszka,monitor
-DirectX 9 (jeżeli wyskoczy jakiś błąd o braku pliku d3d9x_xx.dll to znaczy, że nie masz najnowszej wersji, pobierz je z internetu )

link: http://radsun.site40.net/download/tankz2.rar (264kB)



15
Szkółka / error C2351
« dnia: Listopad 26, 2008, 13:15:53 »
Witam ;)
Mam pewien problem z konstruktorem i błędem
.\main.cpp(83) : error C2351: obsolete C++ constructor initialization syntax
Mam błąd w tym kodzie, wiem że chodzi o coś z konstruktorem ale nie wiem o co dokładnie:
Kod: (cpp) [Zaznacz]
struct REC
{
float x,y,w,h;
REC(){}
REC(float x,float y,float w,float h) : x(x),(y),w(w),h(h) {} //tu blad
};
::)

Strony: [1] 2