oputyk Temat założony przez niniejszego użytkownika |
Problem z rysowaniem - SFML 2.1 » 2014-01-19 12:34:41 Witam. Mam taki problem, że rysuje część koła za pomocą sf::VertexArrey i funkcji trygonometrycznych. Wszystko ładnie, pięknie, ale czasami kiedy zmienie wymiary tej części koła, to powstaje w jednym miejscu przerwa dwu-pikselowa. Oto kod: int main() { float ry = 200.0f; float rx = 400.0f; sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "KamilCegla" ); sf::VertexArray a( sf::LinesStrip, 93 ); a[ 0 ].color = sf::Color( 255, 255, 0 ); a[ 0 ].position = sf::Vector2f( 300, 300 ); for( float i = 1; i < 92; i++ ) { a[ i ].color = sf::Color( 255, 0, 0 ); a[ i ].position = sf::Vector2f( a[ 0 ].position.x +( cos( trad( i - 1 ) ) *((((( 90 - i ) / 90 ) * rx ) ) +((( i / 90 ) * ry ) ) ) ), a[ 0 ].position.y -( sin( trad( i - 1 ) ) * ry ) ); } a[ 92 ].color = a[ 0 ].color; a[ 92 ].position = sf::Vector2f( a[ 0 ].position.x, a[ 1 ].position.y ); while( okno.isOpen() ) { okno.draw( a ); okno.display(); okno.clear(); } system( "pause" ); }
I funkcja trad : float trad( float angle ) { return( angle * PI ) / 180; }
Jakby ktoś mógł to skompilować u siebie i zobaczyć do końca o co chodzi to był bym bardzo wdzięczny. |
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-01-19 13:48:41 Dodam, że kiedy zmieniam wymiary, to ta przerwa znika. To chyba wina sf::LinesStrip ... |
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-01-19 22:00:12 A to lekko poprawiony kod: int main() { float ry = 200.0f; float rx = 200.0f; sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "KamilCegla" ); sf::VertexArray a( sf::LinesStrip, 93 ); a[ 0 ].color = sf::Color( 255, 255, 0 ); a[ 0 ].position = sf::Vector2f( 300, 300 ); for( float i = 1; i < 92; i++ ) { a[ i ].color = sf::Color( 255, 0, 0 ); a[ i ].position = sf::Vector2f( a[ 0 ].position.x +( cos( trad( i - 1 ) ) *((((( 90 -( i - 1 ) ) / 90 ) * rx ) ) +(((( i - 1 ) / 90 ) * ry ) ) ) ), a[ 0 ].position.y -( sin( trad( i - 1 ) ) * ry ) ); } a[ 92 ].color = a[ 0 ].color; a[ 92 ].position = sf::Vector2f( a[ 0 ].position.x, a[ 1 ].position.y ); while( okno.isOpen() ) { okno.draw( a ); okno.display(); okno.clear(); } system( "pause" ); }
Wcześniejszy problem zniknął - dotyczący parametrów 200 i 400, ale za to ten sam problem dotyczy parametrów 200 i 200. Z góry dzięki. |
|
PsichiX |
» 2014-01-20 09:53:28 Koło / elipsę najlepiej narysować quadem z shaderkiem wycinającym koło - jeśli chcesz, mogę Ci pokazać, jak to zrobić (robiłem tak do rysowania proceduralnego w jednej mojej grze na androida - zero tekstur i same quady, a kształty były proceduralnie w shaderku wycinane, więc da się :) ) |
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-01-20 10:11:54 Ok. To poprosiłbym o wytłumaczenie :) |
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-01-20 18:51:20 Wie ktoś jak to zrobić? |
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-01-21 16:18:04 @PsichiX, a jeśli chodzi o ten "quad z shaderem wycinającym koło", to jak to zrobić? |
|
PsichiX |
» 2014-01-21 18:44:06 chwilowo nie mam czasu, więc po północy postaram się wrzucić przykład :) |
|
« 1 » 2 |