Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z rysowaniem - SFML 2.1

Ostatnio zmodyfikowano 2014-01-29 17:55
Autor Wiadomość
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:
C/C++
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
:
C/C++
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.
P-102524
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
...
P-102531
oputyk
Temat założony przez niniejszego użytkownika
» 2014-01-19 22:00:12
A to lekko poprawiony kod:
C/C++
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.
P-102575
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ę :) )
P-102592
oputyk
Temat założony przez niniejszego użytkownika
» 2014-01-20 10:11:54
Ok. To poprosiłbym o wytłumaczenie :)
P-102594
oputyk
Temat założony przez niniejszego użytkownika
» 2014-01-20 18:51:20
Wie ktoś jak to zrobić?
P-102663
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ć?
P-102723
PsichiX
» 2014-01-21 18:44:06
chwilowo nie mam czasu, więc po północy postaram się wrzucić przykład :)
P-102733
« 1 » 2
  Strona 1 z 2 Następna strona