self shadow bump mapping

self shadow bump mapping
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

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

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0
Kopiuj
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

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

tutaj wersja pod g++ ... DrawConsole.rar

tBane
wyrzuca błędy i nie da sie uruchomić
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

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

tBane
budujesz Release ?
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

w VC6.0 tak zgadza sie w Release i działa mi ...

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki program prosi o biblioteki :
libgcc_s_seh-1.dll
libstdc++-6.dll


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
1

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

edytowany 3x, ostatnio: wilkwielki
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki ok już działa. Wydaje mi się albo mało FPS'ów ma ten program.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

dostęny jest zegar duzy i mały oraz progress bar w komentarzach ... mozna sie pobawić

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki próbówałem projekt uruchomić ale błędy mi wyrzuca:

Kopiuj
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");
Kopiuj
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

Kopiuj
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");

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 1x, ostatnio: tBane
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

sprawdz zegar .. wklej tą linijkę draw.DrawClockBig(0,0);

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki Visual Studio 2022 mówi, że wczytywanie pliku jest niebezpieczne

Kopiuj
// otwiera plik w trybie "read binary"
filePtr = fopen(filename, "rb");
if (filePtr == NULL)
	return NULL;
Kopiuj
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

Kopiuj
// otwiera plik w trybie "read binary"
if (fopen_s(&filePtr, filename, "rb") != 0 || filePtr == NULL)
	return NULL;

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 2x, ostatnio: tBane
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

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

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki błąd związany z kbhit i getch

Kopiuj
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:

Kopiuj
'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()

Kopiuj
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;
}

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 1x, ostatnio: tBane
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

z tego co pokazujesz to po prostu to jest nowsza wersja C++

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

Tu projekt @wilkwielki przepisany na Visual Studio 2022
DrawConsoleByWilkWielki.rar


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 1x, ostatnio: tBane
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki ta liczba po prawej stronie to FPSy ?
screenshot-20250406184215.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

wierze ale ja i tak nie mam jak sprawdzić nie mam u siebie VS C++ 2022 , tak te napisy obok to FPS

tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki w Debug mam 25 FPS, w release 120 FPS.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

a jednak nowe visuale szybsze pliki exe kompiluje jesli chodzi o grafike FPS

edytowany 1x, ostatnio: wilkwielki
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

Jak powiększyć okno to FPS'y spadają dwukrotnie. Nie lepiej przepisać to na OpenGL ?
screenshot-20250406185227.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki zegar działa. Ale na środku tarczy dodałbym jakieś koło, żeby zasłonić końcówki wskazówek :-)
screenshot-20250406185442.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 1x, ostatnio: tBane
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
1

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

edytowany 2x, ostatnio: wilkwielki
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:22 minuty
  • Lokalizacja:Poznań
  • Postów:319
0

@wilkwielki czyli co chcesz zaprogramować ?


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
1

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

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
0

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

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:dzień
  • Postów:427
1

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

edytowany 1x, ostatnio: wilkwielki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.