ma ktoś jakieś pomysły jak zaimplementować self shadow w wersji 2D gdzie najpierw jest rysowany obiekt a potem jest na to nałożone światło o pozycjach X i Y z promieniem R - zasięg , czekam na propozycje ... klawisze A W S D a Esc - wyjscie z aplikacji
DrawConsole.rar
jesli ktos nie potrafi przerobic tego projektu na g++ to prosze dać znać na tym wątku to zapodam po przemianie ...
self shadow bump mapping
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
void RendererLightBM(int x,int y,int r)
{
for(int py=y-r;py<y+r;py+=1)
{
for(int px=x-r;px<x+r;px+=1)
{
float r2=1-sqrt( (px-x)*(px-x)+(py-y)*(py-y))/float(r);
if(r2<0)
r2=0;
if(r2>1)
r2=1;
if(r2>0)
{
unsigned char red;
unsigned char green;
unsigned char blue;
unsigned char leftred,leftgreen,leftblue;
unsigned char rightred,rightgreen,rightblue;
unsigned char upred,upgreen,upblue;
unsigned char downred,downgreen,downblue;
float left,right,up,down;
float poziom,pion;
GetPixel(px-1,py,leftred,leftgreen,leftblue);
GetPixel(px+1,py,rightred,rightgreen,rightblue);
GetPixel(px,py-1,upred,upgreen,upblue);
GetPixel(px,py+1,downred,downgreen,downblue);
left=float(float(leftred)/255+float(leftgreen)/255+float(leftblue)/255)/3;
right=float(float(rightred)/255+float(rightgreen)/255+float(rightblue)/255)/3;
up=float(float(upred)/255+float(upgreen)/255+float(upblue)/255)/3;
down=float(float(downred)/255+float(downgreen)/255+float(downblue)/255)/3;
poziom=(left+right)/2;
pion=(up+down)/2;
float lenght=sqrt(poziom*poziom+pion*pion);
poziom=poziom/lenght;
pion=pion/lenght;
float lightDirX,lightDirY;
lightDirX=x+r;
lightDirY=y+r;
lightDirX=lightDirX-px;
lightDirY=lightDirY-py;
lenght=sqrt(lightDirX*lightDirX+lightDirY*lightDirY);
lightDirX=lightDirX/lenght;
lightDirY=lightDirY/lenght;
float S=lightDirX*poziom+lightDirY*pion;
if(S<0)
S=0;
if(S>1)
S=1;
GetPixel(px,py,red,green,blue);
float r1,g1,b1;
r1=float(red)/255;
g1=float(green)/255;
b1=float(blue)/255;
float r,g,b;
r=r1;
g=g1;
b=b1;
r1=r1*S*r2*r1*2+r1;
g1=g1*S*r2*g1*2+g1;
b1=b1*S*r2*b1*2+b1;
if(r1<r)
r1=r;
if(g1<g)
g1=g;
if(b1<b)
b1=b;
if(r1>1)
r1=1;
if(g1>1)
g1=1;
if(b1>1)
b1=1;
unsigned char rW=r1*255;
unsigned char gW=g1*255;
unsigned char bW=b1*255;
Color3iT(rW,gW,bW);
PutPixelT(px,py);
}
}
}
}
r2 - atten .... S - diffuse
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
tutaj wersja pod g++ ... DrawConsole.rar
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
wersja pierwsza jak i druga tzn pierwsza jest kompilowana w VC6.0 Pro i mi działa , tak samo wersja druga jest pod g++ i kompiluje mi i tez działa , nie wiem dlaczego masz problemy
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
w VC6.0 tak zgadza sie w Release i działa mi ...
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki program prosi o biblioteki :
libgcc_s_seh-1.dll
libstdc++-6.dll
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
ja mam g++ z stąd : https://cpp-lang.net/pl/tools/standalone/compilers/setup-gcc-windows/ i moze masz starszą wersje , zrób jak tam jest i powinno byc dobrze , dziwna sprawa jest ze jak odpalam plik exe kompilowany w VC6.0 to jest koło 50 fps a pod g++ koło 30 fps to chyba jakis wytwor emul tego g++
.... jest bład w kodzie na początku pisze #include "stdafx.h" wywal to i spróbuj na nowo skompilować moze pomoże
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki ok już działa. Wydaje mi się albo mało FPS'ów ma ten program.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
dostęny jest zegar duzy i mały oraz progress bar w komentarzach ... mozna sie pobawić
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki próbówałem projekt uruchomić ale błędy mi wyrzuca:
id_progressbarS = LoadImage("gfx/pb.bmp");
id_progressbarS = LoadImage("gfx/pb.bmp");
id_progressbarE = LoadImage("gfx/pbend.bmp");
id_zegar = LoadImage("gfx/zegar.bmp");
id_zegarbig = LoadImage("gfx/zegar_big2.bmp");
argument of type "const char *" is incompatible with parameter of type "char *"
argument of type "const char *" is incompatible with parameter of type "char *"
argument of type "const char *" is incompatible with parameter of type "char *"
argument of type "const char *" is incompatible with parameter of type "char *"
argument of type "const char *" is incompatible with parameter of type "char *"
podmienić na (char*) i działa
int id_texture = draw.LoadImage((char*)"obraz.bmp");
int id_cyfry = draw.LoadImage((char*)"cyfry_czcionka.bmp");
int id_texture2 = draw.LoadImage((char*)"obraz2.bmp");
int id_komputer = draw.LoadImage((char*)"komputer.bmp");
int id_kolo = draw.LoadImage((char*)"kolo.bmp");
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
sprawdz zegar .. wklej tą linijkę draw.DrawClockBig(0,0);
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki Visual Studio 2022 mówi, że wczytywanie pliku jest niebezpieczne
// otwiera plik w trybie "read binary"
filePtr = fopen(filename, "rb");
if (filePtr == NULL)
return NULL;
Error 55 C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details
Rozwiązanie : podmienić fopen na fopen_s
// otwiera plik w trybie "read binary"
if (fopen_s(&filePtr, filename, "rb") != 0 || filePtr == NULL)
return NULL;
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
tak to jest z tymi nowymi visualami nic juz nie jest dostępne dlatego ja ciągle jade na starym visualu 6.0 Pro od dawien dawna , a parametr rb oznacza read binary czyli surowe czytanie
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki błąd związany z kbhit i getch
if (kbhit())
{
char znak = getch();
if (znak == 27)
done = true;
if (znak == 97)
x -= speed;
if (znak == 100)
x += speed;
if (znak == 119)
y -= speed;
if (znak == 115)
y += speed;
}
błędy:
'kbhit': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _kbhit. See online help for details.
'getch': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch. See online help for details.
rozwiązanie:
podmienić kbhit() na _kbhit() oraz getch() na _getch()
if (_kbhit())
{
char znak = _getch();
if (znak == 27)
done = true;
if (znak == 97)
x -= speed;
if (znak == 100)
x += speed;
if (znak == 119)
y -= speed;
if (znak == 115)
y += speed;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
z tego co pokazujesz to po prostu to jest nowsza wersja C++
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Tu projekt @wilkwielki przepisany na Visual Studio 2022
DrawConsoleByWilkWielki.rar
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki ta liczba po prawej stronie to FPSy ?

- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
wierze ale ja i tak nie mam jak sprawdzić nie mam u siebie VS C++ 2022 , tak te napisy obok to FPS
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki w Debug mam 25 FPS, w release 120 FPS.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
a jednak nowe visuale szybsze pliki exe kompiluje jesli chodzi o grafike FPS
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Jak powiększyć okno to FPS'y spadają dwukrotnie. Nie lepiej przepisać to na OpenGL ?

- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki zegar działa. Ale na środku tarczy dodałbym jakieś koło, żeby zasłonić końcówki wskazówek :-)

- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
sęk w tym jak policzyłem czas cout zabiera 33 ms czyli wychodzi 33 klateki ponad na sam napis a w trybie graficznym szybciej mozna uzyskać napis tekstowy tylko musze jescze dopisac pisanie tekstu i nie wiem jak jeszcze załączyć akceleracje sprzętową zeby dało np z 500 czy 800 fos jak jest w opengl proste demo bo pisze to gui do komunikatora sieciowego własnego na gniazdkach socketowych , chodzi o to zeby nie zamulić ruchu sieciowego przez klijenta tylko dlatego ze kozysta z cout
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
@wilkwielki czyli co chcesz zaprogramować ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
jak skoncze draw console mój projekt to bedzie podpięty po mojego klijenta tzn klijent<->serwer samo gui aby była szybka ekspresowa odpowiedź klijenta np 1-2 ms aby nie spowolnic za bardzo ruchu sieciowego
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
wracając do tematu czy wie ktoś jak napisać prostą wersje self shadow bump mapping wersje 2D , powinno byc łatwiej niż 3D bo mniej danych do przeliczenia ...
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
są materiały ale nie taka prosta sprawa:
https://forum.gamemaker.io/index.php?threads/ultra-fast-2d-dynamic-lighting-system.80742/
https://learnopengl.com/Advanced-Lighting/Parallax-Mapping
EDIT: to pierwsze to zwykłe liczenie światła za to to drugie tzn https://learnopengl.com świetny kurs grafiki aż sam jestem zdumiony