[SFML] wykrywanie koloru poprzez rendertexture+sprite.getcolor
Ostatnio zmodyfikowano 2019-08-30 13:54
andruplay9 Temat założony przez niniejszego użytkownika |
[SFML] wykrywanie koloru poprzez rendertexture+sprite.getcolor » 2019-08-29 13:49:10 jak powyżej próbowałem stworzyć alternatywę dla wykrycia koloru z użyciem image=window.capture sęk w tym, że nie wykrywa koloru tak jak chce (choćby cała tekstura jest czarna) kod: przed pęntlą sf::RenderTexture texturka; if( !texturka.create( 4000, 2000 ) ) { return - 1; } texturka.clear( sf::Color::Black ); w pętli texturka.clear( sf::Color::Black ); texturka.draw( linia ); texturka.draw( text ); texturka.draw( text2 ); texturka.draw( figury[ p ] ); texturka.display();
window.setView( View ); window.clear( sf::Color::White );
const sf::Texture & texture = texturka.getTexture(); sf::Sprite stexturka( texture ); window.draw( stexturka ); window.display(); i reszta kodu testfall = true;
sf::Color testup, testup1; sf::Sprite ctextur, ctextur1; ctextur.setTexture( texture ); ctextur1.setTexture( texture ); for( int i = 0; i < 25; i++ ) { ctextur.setTextureRect( sf::IntRect( px1 + 25, py1 + 50 + i, 2, 2 ) ); ctextur1.setTextureRect( sf::IntRect( px1 - 25, py1 + 50 + i, 1, 1 ) ); testup = ctextur.getColor(); if( testup ==( sf::Color::White ) ) { cout << px1; } if( testup ==( sf::Color::Black ) ) { cout << "test"; } testup1 = ctextur1.getColor(); cout << '\n'; if( testup ==( sf::Color::Black ) || testup1 ==( sf::Color::Black ) ) { testfall = false; fallup = i; } } if( testfall == true ) { py1 += 4; }
|
|
pekfos |
» 2019-08-29 15:37:59 getColor() zwraca taki kolor, jaki sam sobie ustawisz przez setColor(). To nie ma nic wspólnego z kolorem pikseli tekstury. |
|
andruplay9 Temat założony przez niniejszego użytkownika |
» 2019-08-29 16:19:45 tak myślałem. Teraz musze szukać alternatywy :( tak z ciekawości, da się przerobić texture/sprite na sf:image? najlepiej określoną część. |
|
jankowalski25 |
» 2019-08-29 19:07:48 |
|
andruplay9 Temat założony przez niniejszego użytkownika |
» 2019-08-30 13:54:17 dobra znalazłem obejście 1.Przenieść całość do stworzonej tekstury. 2.Stworzyć sprite który jest częścią powyższej tekstury. 3.Przerobić sprite na kolejną stworzoną teksturę. 4.Teksturę z punktu 3 przerobić na image. Masa obejścia ale na pewno znacznie bardziej efektywne dla małego obszaru (tak 150x150) niż image=window.capture (zwłaszcza, że tekstury trzeba robić raz a potem tylko update:) |
|
« 1 » |