• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML C++ - sf::BlendMode / światło

Object Storage Arubacloud
0 głosów
1,172 wizyt
pytanie zadane 18 sierpnia 2017 w C i C++ przez TomaszA2 Obywatel (1,720 p.)

Proszę o wytłumaczenie mi jak mogę używać blend mode i jak mogę to wykorzystać. (chyba przy oświetleniu się da fajnie tego użyć i głównie o to mi chodzi)

Przeszukałem cały internet i wciąż nie potrafię. Dodam kod w którym nie ważne gdzie to wsadziłem to i tak nie działało.

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <cmath>
#include <windows.h>
#include <stdio.h>
#include <cstdarg>
#include <stdlib.h>
#include <cstdlib>
#include <math.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
	sf::Vector2i mysz;
	int myszX;
	int myszY;
	
	int obrazY=0;
	int obrazX=0;
    sf::RenderWindow Okno(sf::VideoMode( 800, 600, 32 ) ,"Test");
    sf::Texture test;
    sf::Texture test2;
    sf::Texture test3;
    
    test.loadFromFile("tekstury/tlo.PNG");
    sf::Sprite tlo;
    tlo.setTexture(test);
    
    test2.loadFromFile("tekstury/light.PNG"); 
    sf::Sprite light;
    light.setTexture(test2);
    
    test3.loadFromFile("tekstury/test3.PNG");
    sf::Sprite obraz3;
    obraz3.setTexture(test3);
   
    Okno.setFramerateLimit(60);
    while(Okno.isOpen())
    {
    	//licznikwhite+=1;
    	//licznikblack+=1;
     	sf::Event zdarzenie;
     	while( Okno.pollEvent( zdarzenie ) )
     	{
		    if( zdarzenie.type == sf::Event::Closed )
    		{
           		
   				Okno.close();
   			}
		}
		
		mysz=sf::Mouse::getPosition(Okno); // mysz.x mysz.y
		
		
		
		tlo.setPosition(0, 0);
		
		light.setPosition(300, 300);
		obraz3.setPosition(315, 315);
		
		Okno.clear(sf::Color(0,0,0, 0));
		
		Okno.draw(tlo);
		
		Okno.draw(light);
		
		Okno.draw(obraz3);
		
     	Okno.display();
     	
	}
    return 0;
}

 

Ja na dzisiaj już nie mam ani siły ani ochoty na dalsze przeczesywanie internetu w poszukiwaniu odpowiedzi.

3 odpowiedzi

+3 głosów
odpowiedź 19 sierpnia 2017 przez Dominik Kołacki Obywatel (1,060 p.)
wybrane 19 sierpnia 2017 przez TomaszA2
 
Najlepsza

Blending to sposób w jaki nakładają się na siebie piksele source(tego co ma zostać dołożone) na destination(czyli tego co już jest). W skrócie, dostajesz do dyspozycji R G B i Alphe piksela który jest na dole, R G B i A koloru który ma na się na niego nałożyć i masz scalić te wartości w jeden, wynikowy dla tego piksela kolor. Istnieje kilka 'standardowych' funkcji która te wartości miesza, oto i one:

Tego jak korzystać z tej konkretnej funkcjonalności w SFML nie jestem w stanie Ci wytłumaczyć, po pierwsze sam już dobrze nie pamiętam, po drugie, dokumentacja jest świetnie napisana i na pewno jest to tam wytłumaczone lepiej niż ja jestem w stanie to zrobić.

Dynamiczne oświetlenie osiąga się w inny sposób, poprzez normal mapy i poniekąd wykorzystuje się tam właśnie odpowiednie tryby mieszania (blendowania), aby uzyskać efekty iluminacji. Tworząc własną implementację dynamicznego oświetlenia korzystałem z tej lekcji i pamiętam że była wyśmienita.  Dynamiczne cienie to trochę bardziej skomplikowana sprawa, po dokładniejsze informacje odsyłam do biblioteki LTBL, napisanej dla SFML przez jego community. Nie wiem w jakim stanie jest obecnie, ale jeszcze kilka lat temu autor bardzo chętnie tłumaczył co, jak i dlaczego robił, było to znakomite źródło wiedzy.

Poza tym, odzywa się mój wewnętrzny code-nazi. Nazwy zmiennych po polsku? Precz, od samego początku trzeba się przyzwyczajać do ogólnie przyjętego standardu. Z czasem sam docenisz że łatwiej jest nazywać rzeczy tak, jak inni programiści to robią, a nie na siłę je spolszczać. Zmienne z wielkiej litery (np. Okno)? Z wielkiej litery piszemy deklaracje klas, struktur i stałych/definicji preprocesora, w ostatnim przypadku całość jest z reguły pisana capsem. Zmienne z małej, camel casem, chyba że kilka zmiennych określa różny wariant tej samej rzeczy i chcesz je ładnie pogrupować (taki pseudo namespace), bądź zastosowanie camel case'a byłoby nieczytelne. No i te includy... wszystkiego tego naraz potrzebujesz?

komentarz 19 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)
edycja 19 sierpnia 2017 przez TomaszA2

https://www.sfml-dev.org/documentation/2.2/structsf_1_1BlendMode.php

Chyba nie o to ci chodzi? Przesiedziałem nad tym sporo czasu i nic z tego nie wyniosłem. Opisują dosłownie wszystko poza praktycznym zastosowaniem.

,, In SFML, a blend mode can be specified every time you draw a sf::Drawable object to a render target. It is part of the sf::RenderStates compound that is passed to the member function sf::RenderTarget::draw(). "

Czyli coś takiego: Okno.draw(obraz3, blendmode); ? (tutaj nie do końca poprawnie jest, poprawnie również nie działało) To nie działa, czyli nie jest pomocne.

Edit. Okazało się że nie pamiętam już żadnego sposobu na to żeby skompilować jakkolwiek ten blendmode.

komentarz 19 sierpnia 2017 przez Dominik Kołacki Obywatel (1,060 p.)
edycja 20 sierpnia 2017 przez Dominik Kołacki

Tak, używa się go poprzez przekazanie jako drugiego argumentu do funkcji draw:

window.draw(sprite, sf::BlendMode::BlendAdd) <- tutaj wykorzystałem predefiniowane blendowanie 

 

Co do praktycznego zastosowania, to jest tak szerokie że nie da się go łatwo ująć. Na przykład, możesz zmieniać blend mode, żeby nakładać na siebie dwa obrazki. Odeślę Cię do dokumentacji innego frameworka, w którym wbudowane jest kilka efektów opartych właśnie na blendowaniu. Zjedź do akapitu "Composite Effects", nie musisz zwracać uwagi na kod po lewej stronie, liczą się obrazki po prawej, obrazek płótna(?) nakładany na zdjęcie kościoła. Te same obrazki, takie samo nałożenie, różni się tylko sposób ich blendowania, a zobacz ile efektów udało się osiągnąć. To jest dosyć sztampowe zastosowanie, są oczywiście bardziej kreatywne, np:


 

 

Tutaj są dwie warstwy, pierwsza to stary wygląd aplikacji i kółko które się rozszerza, druga to aplikacja już w nowym temacie kolorystycznym. Górna warstwa ma blendowanie typu 'clear', przez co wszędzie gdzie kółko i górna warstwa się pokrywają, 'prześwituje' warstwa dolna.

Ciężko to pojąć z opisów, najlepiej jest samemu się pobawić żeby zrozumieć to intuicyjnie, wymaga to jednak trochę czasu. Jeżeli chcesz więcej materiałów na temat blendowania i takich niskopoziomowych niuansów SFML-a, polecam szukać poradników dla OpenGL, na którego SFML jest tylko nakładką. Tam, wszystkie funkcje, chociaż trochę bardziej skomplikowanie, będą dogłębnie wyjaśnione.

 

komentarz 19 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)

Spróbowałem użyć tego tak jak ty. Coś nie działa.

komentarz 19 sierpnia 2017 przez Dominik Kołacki Obywatel (1,060 p.)

Hmm... a jakbyś spróbował tak jak jest tutaj podane, czyli metodą .setBlendMode()  :

https://stackoverflow.com/questions/8452301/how-to-simulate-a-lighter-effect-like-canvas-globalcompositeoperation-does

komentarz 19 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)

Oto wynik:

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <cmath>
#include <windows.h>
#include <stdio.h>
#include <cstdarg>
#include <stdlib.h>
#include <cstdlib>
#include <math.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
	
	int obrazY=0;
	int obrazX=0;
    sf::RenderWindow Okno(sf::VideoMode( 800, 600, 32 ) ,"Test");
    sf::Texture test;
    sf::Texture test2;
    sf::Texture test3;
    
    test.loadFromFile("tekstury/test.PNG");
    sf::Sprite obraz;
    obraz.setTexture(test);
    
    test2.loadFromFile("tekstury/test2.PNG"); 
    sf::Sprite obraz2;
    obraz2.setTexture(test2);
    
    test3.loadFromFile("tekstury/test3.PNG");
    sf::Sprite obraz3;
    obraz3.setTexture(test3);
   obraz.SetBlendMode(sf::Blend::Add);
    Okno.setFramerateLimit(60);
    while(Okno.isOpen())
    {
    	//licznikwhite+=1;
    	//licznikblack+=1;
     	sf::Event zdarzenie;
     	while( Okno.pollEvent( zdarzenie ) )
     	{
		    if( zdarzenie.type == sf::Event::Closed )
    		{
           		
   				Okno.close();
   			}
		}
		
		
		
		obraz.setPosition(285, 285);
		obraz2.setPosition(300, 300);
		obraz3.setPosition(315, 315);
		
		Okno.clear(sf::Color(255,255,255, 0)); ////
		obraz.setColor(sf::Color(0,0,255, 255)); // 5
		obraz2.setColor(sf::Color(255,0,0, 255));
		obraz3.setColor(sf::Color(0,255,0, 255));
		
		Okno.draw(obraz);
		Okno.draw(obraz2);
		Okno.draw(obraz3);
		
     	Okno.display();
     	
	}
    return 0;
}

 

Przepraszam z góry za wygląd kodu.

komentarz 19 sierpnia 2017 przez Dominik Kołacki Obywatel (1,060 p.)
Nie mam postawionego środowiska na komputerze, więc trochę na chybił trafił będziemy to robić :p.

Wiesz co, spróbuj pierwszy sposób który Ci dałem, ale zamiast sf::BlendMode::BlendAdd, daj samo sf::BlendAdd .
komentarz 19 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)
edycja 19 sierpnia 2017 przez TomaszA2

Działa. Tylko trochę nie wiem co się stało z połączeniem czerwony - niebieski, czy to nie powinien fiolet wyjść? Może zły niebieski dałem.

Dziękuję ci za twoją pomoc. Dzięki tobie nie tylko ja sobie z tym poradzę ale również wszyscy którym to również sprawiło problem. (temat widnieje w googlu)

Jak to całościowo ogarnę, postaram się zrozumieć tworzenie własnych trybów ,,blendowania". (chyba się da)

A wtedy jak już będę całościowo to potrafił, napiszę o tym poradnik z przykładowym, dobitnie pokazującym o co chodzi kodem, bo w internecie tragicznie mało tego o tym jest.

Poprawna wersja:

Okno.draw(obraz, sf::BlendAdd);
Okno.draw(obraz2, sf::BlendAdd);
Okno.draw(obraz3, sf::BlendAdd);

 

Edit. Jednak dobrze łączy.

1
komentarz 19 sierpnia 2017 przez Dominik Kołacki Obywatel (1,060 p.)
Poradnik to świetna pomysł, nie ma nic sensownego w internecie, nawet w opensourcowych projektach na stronie sfmla trudno o jasny przykład korzystania z tej klasy, nie mówiąc o tym że w trzech oficjalnych książkach znalazłem o tym tylko jedną linijkę... Tylko pewnie będzie musiał dochodzić do tego metodą prób i błędów albo grzebiąc po źródłach biblioteki... no cóż, życzę powodzenia :).

Kod który Ci zadziałał pochodzi z książki SFML Essientials, pierwsza wersja nie działała prawdopodobnie dlatego że mam wydanie z 2015 roku i coś się zmieniło w międzyczasie.
+1 głos
odpowiedź 19 sierpnia 2017 przez criss Mędrzec (172,590 p.)
https://www.khronos.org/opengl/wiki/Blending

Blendowanie to po prostu sposób "mieszania" aktualnej zawartości color buffera z outputem fragment shadera. Nie ma żadnego (bezpośredniego) związku ze światłem. W ogóle nie ma czegoś takiego jak światło ani w SFML ani  tym bardziej w OpenGL. Efekt światła uzyskuje się przez po prostu odpowiednie kolorowanie pixeli (albo raczej texeli? - "pixele w trójwymiarze"). Poczytaj link powyżej.
komentarz 19 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)

Mi bardziej chodziło o praktyczne zastosowanie tego sf::BlendMode czy jakoś tak. (jak to wygląda poprawnie w kodzie żebym mógł zrobić chociaż mieszanie kolorów czy cokolwiek innego co widać po użyciu blendmode)

W całym internecie nie ma nic o tym jak poprawnie użyć. (wszystko w googlu mam już zaznaczone jako przeczytane o tym, niektóre nawet więcej niż kilka razy przeglądałem, najwięcej to)

Ja już naprawdę nie mam pojęcia co dalej sam mógłbym zrobić żeby nauczyć się tego używać.

+1 głos
odpowiedź 21 sierpnia 2017 przez niezalogowany
edycja 21 sierpnia 2017

Mi udało się osiągnąć coś takiego (plus link do filmu). Kod:

#include <iostream>
#include <vector>
#include <SFML/Graphics.hpp>
#include <random>
#include <type_traits>

namespace hip
{
	template<typename T>
	T random(const T& begin, const T& end)
	{
		using rand_distrib = std::conditional
		<
			std::is_floating_point<T>::value,
			std::uniform_real_distribution<T>,
			std::uniform_int_distribution<T>
		>::type;

		static std::random_device rd;
		static std::mt19937_64 gen(rd());

		rand_distrib dis(begin, end);
		return dis(gen);
	}
}

struct CirclesPack
{
	std::vector<sf::CircleShape> circles;
	sf::BlendMode blendMode;
public:
	void add(sf::Vector2f pos, float rad)
	{
		sf::CircleShape bufor;
		bufor.setRadius(rad);
        bufor.setOrigin(rad, rad);
		int r = hip::random(0, 255);
		int g = hip::random(0, 255);
		int b = hip::random(0, 255);

		bufor.setFillColor(sf::Color(r, g, b));
		bufor.setPosition(pos);
		circles.push_back(bufor);
	}

	void setBlendMode(const sf::BlendMode blendMode)
	{
		this->blendMode = blendMode;
	}

	void draw(sf::RenderWindow& window)
	{
		for (auto& i: circles) window.draw(i, blendMode);
	}
};

int main()
{
	sf::Clock clock;
	sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
	
	CirclesPack circles;
	circles.setBlendMode(
		sf::BlendMode
		(
			sf::BlendMode::Factor::OneMinusDstAlpha,
			sf::BlendMode::Factor::OneMinusDstAlpha,
			sf::BlendMode::Equation::Add
		)
	);

	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
			if (event.type == sf::Event::MouseButtonPressed)
			{
				float radius = hip::random<float>(10, 100);
				sf::Vector2f where(sf::Mouse::getPosition(window));
				circles.add(where, radius);
			}
		}

		if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
			circles.add(sf::Vector2f(sf::Mouse::getPosition(window)), 100);

		if (clock.getElapsedTime() > sf::milliseconds(200))
		{
			clock.restart();
			float radius = hip::random<float>(10, 100);
			circles.add(
				sf::Vector2f(
					hip::random<float>(0, window.getSize().x),
					hip::random<float>(0, window.getSize().y)
				),
				radius
			);
		}

		window.clear(sf::Color::Black);
		circles.draw(window);
		window.display();
	}
}

Rzeczywiście jest bardzo mało źródeł jak stosować sf::Blend. Jednak z pomocą przychodzi plik "BlendMode.hpp", który można znaleźć w folderze z biblioteką SFML. Zacytuję zawartość bez części komentarzy w wersji 2.4.2:

#ifndef SFML_BLENDMODE_HPP
#define SFML_BLENDMODE_HPP
#include <SFML/Graphics/Export.hpp>

namespace sf
{
	struct SFML_GRAPHICS_API BlendMode
	{
		enum Factor
		{
			Zero,             ///< (0, 0, 0, 0)
			One,              ///< (1, 1, 1, 1)
			SrcColor,         ///< (src.r, src.g, src.b, src.a)
			OneMinusSrcColor, ///< (1, 1, 1, 1) - (src.r, src.g, src.b, src.a)
			DstColor,         ///< (dst.r, dst.g, dst.b, dst.a)
			OneMinusDstColor, ///< (1, 1, 1, 1) - (dst.r, dst.g, dst.b, dst.a)
			SrcAlpha,         ///< (src.a, src.a, src.a, src.a)
			OneMinusSrcAlpha, ///< (1, 1, 1, 1) - (src.a, src.a, src.a, src.a)
			DstAlpha,         ///< (dst.a, dst.a, dst.a, dst.a)
			OneMinusDstAlpha  ///< (1, 1, 1, 1) - (dst.a, dst.a, dst.a, dst.a)
		};

		enum Equation
		{
			Add,            ///< Pixel = Src * SrcFactor + Dst * DstFactor
			Subtract,       ///< Pixel = Src * SrcFactor - Dst * DstFactor
			ReverseSubtract ///< Pixel = Dst * DstFactor - Src * SrcFactor
		};

		BlendMode();
		BlendMode(Factor sourceFactor, Factor destinationFactor, Equation blendEquation = Add);

		BlendMode(Factor colorSourceFactor, Factor colorDestinationFactor,
			Equation colorBlendEquation, Factor alphaSourceFactor,
			Factor alphaDestinationFactor, Equation alphaBlendEquation);

		Factor   colorSrcFactor; ///< Source blending factor for the color channels
		Factor   colorDstFactor; ///< Destination blending factor for the color channels
		Equation colorEquation;  ///< Blending equation for the color channels
		Factor   alphaSrcFactor; ///< Source blending factor for the alpha channel
		Factor   alphaDstFactor; ///< Destination blending factor for the alpha channel
		Equation alphaEquation;  ///< Blending equation for the alpha channel
	};

	SFML_GRAPHICS_API bool operator ==(const BlendMode& left, const BlendMode& right);
	SFML_GRAPHICS_API bool operator !=(const BlendMode& left, const BlendMode& right);

	SFML_GRAPHICS_API extern const BlendMode BlendAlpha;    ///< Blend source and dest according to dest alpha
	SFML_GRAPHICS_API extern const BlendMode BlendAdd;      ///< Add source to dest
	SFML_GRAPHICS_API extern const BlendMode BlendMultiply; ///< Multiply source and dest
	SFML_GRAPHICS_API extern const BlendMode BlendNone;     ///< Overwrite dest with source

} // namespace sf
#endif // SFML_BLENDMODE_HPP

Po paru innych plikach doszedłem do wniosku, że blendować można też tekstury. Stwierdziłem, że fajnym doświadczeniem byłoby wygenerowanie tekstury światła. Zrobiłem też jakieś nałożenie blendem, ale nie mam pomysłu jak zrobić to prawidłowo. Teraz wygląda to trochę śmiesznie:

#include <SFML/Graphics.hpp>

int main()
{
	sf::Clock clock;
	float dt = 0;
	sf::RenderWindow window(sf::VideoMode(800, 600), "My window");

	sf::Texture texture;
	std::string light_path = "light.png";
	int radius = 100;
	sf::Vector2i image_size(2*radius, 2*radius);
	

	bool jeszcze_nie_mam_zdjyncia = true;
	if (jeszcze_nie_mam_zdjyncia)
	{
		sf::Image image;
		image.create(image_size.x, image_size.y);
		for (int x = -image_size.x/2; x < image_size.x/2; x++)
		{
			for (int y = -image_size.y/2; y < image_size.y/2; y++)
			{
				if (x*x + y*y < radius*radius)
				{
					int r = std::hypot(x, y); // r bedzie od 0 do max 50, a rr (wartosc A) chce by była od 0 do 255 wiec trzeba przeliczyc: 
					int rr = 255 - int( (float) r*255.f / radius );
					image.setPixel(radius + x, radius + y, sf::Color(255, 255, 0, rr));
				}
				else image.setPixel(radius + x, radius + y, sf::Color::Transparent);
			}
		}
		image.saveToFile(light_path);
		texture.loadFromImage(image);
		jeszcze_nie_mam_zdjyncia = false;
	}
	else
	{
		texture.loadFromFile(light_path);
	}

	sf::Sprite circle1;
	circle1.setTexture(texture);
	circle1.setOrigin(image_size.x, image_size.y);
	circle1.setPosition(sf::Vector2f(window.getSize() / 2u));

	sf::Sprite circle2;
	circle2.setTexture(texture);
	circle2.setOrigin(image_size.x, image_size.y);
	circle2.setPosition(sf::Vector2f(window.getSize() / 2u));


	circle1.move({ 30, 30 });

	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}

		float speed = 200; 
		sf::Vector2f velocity;

		if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) velocity.y -= speed;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) velocity.y += speed;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) velocity.x -= speed;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) velocity.x += speed;
		dt = clock.restart().asSeconds();

		circle1.move(velocity*dt);
		window.clear(sf::Color::Black);

		auto factor1 = sf::BlendMode::Factor::SrcAlpha;
		auto blend = sf::BlendMode // jeszcze jest BlendMode z 6 argumentami
		(
			factor1,
			factor1,
			sf::BlendMode::Equation::Add
		);
		window.draw(circle1, blend);
		window.draw(circle2, blend);
		window.display();
	}
}

Może chociaż troszkę Ci to pomoże - sam chciałbym wiedzieć więcej. Jeżeli jednak nie to przynajmniej odkopię Twój temat i może ktoś inny coś napisze ;)

komentarz 22 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)

Tobie się ten kod kompiluje? Mnie już po samym

sf::BlendMode
        (
            sf::BlendMode::Factor::OneMinusDstAlpha,
            sf::BlendMode::Factor::OneMinusDstAlpha,
            sf::BlendMode::Equation::Add
        )

wyrzuciło masę błędów. A takie Okno.draw(obraz, sf::BlendAdd); już działa dobrze.

Wolałbym się jednak nauczyć nieco więcej o używaniu tego. Sporo więcej. I widzę że ty możesz mi w tym choć trochę pomóc.

komentarz 22 sierpnia 2017 przez niezalogowany

Korzystasz z C::B? Możliwe, że masz starszy kompilator i nie wspiera on pewnych rzeczy (chrono, auto etc). Spróbuj bez nich zrobić coś np tak:

sf::BlendMode blend
		(
			sf::BlendMode::Factor::OneMinusDstAlpha,
			sf::BlendMode::Factor::OneMinusDstAlpha,
			sf::BlendMode::Equation::Add
		);
Okno.draw(obraz, blend);

Jeżeli nie działa nadal to podaj mi błędy.

komentarz 22 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)

Najpierw skompilowałem bez tego i wszystko było dobrze, potem to wkleiłem i wyszło tak:

Może wersja SFML inna? Mam 2.4.2.

Edit. Dziwnie spłaszczyło mi obraz tutaj. Spróbuj otworzyć go w nowym oknie.

komentarz 22 sierpnia 2017 przez niezalogowany
Nie mam pojęcia co jest nie tak :D Ja też mam wersję 2.4.2.

Podobne pytania

0 głosów
0 odpowiedzi 518 wizyt
pytanie zadane 25 grudnia 2016 w C i C++ przez szym3ns Użytkownik (860 p.)
0 głosów
1 odpowiedź 220 wizyt

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...