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

[SFML] Obliczanie wartości dla ::glScissor

Ostatnio zmodyfikowano 2012-10-07 22:30
Autor Wiadomość
ridic14
Temat założony przez niniejszego użytkownika
» 2012-10-06 23:12:01
Zrobiłem tak:
C/C++
sf::View view;

sf::RectangleShape area;

App.setView( view );

sf::Vector2f windowPos = konwertuj( view, area.getPosition() );

sf::Vector2f konwertuj( sf::View view, const sf::Vector2f coords )
{
    return view.getTransform().transformPoint( coords );
}

::glScissor( windowPos.x, windowPos.y + area.getSize().y, area.getSize().x, area.getSize().y );

I nie pomogło więc sprawdziłem

std::cout << windowPos.x << std::endl;

i dało mi to: -0.1 ; -0.7 << te dwie liczby "mrygały" w konsoli

std::cout << windowPos.y << std::endl;

i dało to :0,2 ; 0.782 ; 0.582 << te trzy liczby "mrygały" w konsoli

Więc dalej nie osiągnąłem celu i liczę na pomoc ... Może jakieś pomysły?

i czy sposób użycia jest poprawny?
::glScissor( windowPos.x, windowPos.y + area.getSize().y, area.getSize().x, area.getSize().y );
P-66243
DejaVu
» 2012-10-07 00:18:50
Napisz maksymalnie krótki przykład, który się kompiluje i powinien Twoim zdaniem poprawnie przycinać pole modyfikacji sceny. Wówczas będzie mógł Ci ktoś wskazać błędy. Z tym co zostało napisane w tym temacie powinieneś umieć rozwiązać swój problem...
P-66246
ridic14
Temat założony przez niniejszego użytkownika
» 2012-10-07 10:02:10
No tu mam działający kod tylko że to przycina tak że nie widać nic?!

C/C++
void CBox::draw()
{
   
   
    //sf::Vector2f windowPos = view.getTransform().transformPoint( area.getPosition() );
    sf::Vector2f windowPos = konwertuj( view, area.getPosition() );
   
    App.draw( area );
    ::glEnable( GL_SCISSOR_TEST );
    ::glScissor( windowPos.x, windowPos.y + area.getSize().y, area.getSize().x, area.getSize().y );
    //std::cout << windowPos.x << std::endl;
    App.draw( tekst );
    ::glDisable( GL_SCISSOR_TEST );
}

konwersje przerobiłem bo nie wiem co to CRenderWindow
C/C++
sf::Vector2f konwertuj( sf::View view, const sf::Vector2f coords )
{
    return view.getTransform().transformPoint( coords );
}

no i tak to wygląda i nie przycina poprawnie


Opis wstawianej grafiki


Czekaj czekaj..... Ale co z pozycją tekstu?
Dane

postanowiłem zobaczyć jak to wygląda... i
::glScissor( area.getPosition().x, area.getPosition().y, area.getSize().x, area.getSize().y );

powoduje(czarny kolor to działanie ::glScissor):
Dane

użycie
C/C++
sf::Vector2f windowPos = konwertuj( view, area.getPosition() );
::glScissor( windowPos.x, windowPos.y, area.getSize().x, area.getSize().y );

powoduje
Dane
P-66247
ridic14
Temat założony przez niniejszego użytkownika
» 2012-10-07 22:08:33
Czy nie ma jakiegoś łatwiejszego sposobu?
P-66367
DejaVu
» 2012-10-07 22:13:32
C/C++
sf::Vector2f windowPos = konwertuj( view, area.getPosition() );
Jakie wartości posiada obiekt area? Bo skoro area ma (0,0) to nic dziwnego, że wskazuje na lewy, dolny róg ekranu...
P-66368
ridic14
Temat założony przez niniejszego użytkownika
» 2012-10-07 22:14:27
area x = -0,7 y 0.78 po konwersji a przed 150x109

tam wyżej na czarno jest zaznaczone gdzie wg glscissor są boxy
P-66369
DejaVu
» 2012-10-07 22:17:44
Eh... dobra, to nie ma sensu - wklej kod main.cpp, który będę mógł wkleić u siebie i sprawdzić to - szybciej będzie :P napisz też jakiego SFML używasz :)
P-66370
ridic14
Temat założony przez niniejszego użytkownika
» 2012-10-07 22:18:58
sfml 2.0 a kod mam podzielony na bezsensowne klasy... więc.. albo wkleję wszystkie albo zapakuję w zip i wrzucę

edit:




jeśli nie plik to wkleję kod

ogólnie to wydaje mi się że za całość źle się zabrałem
P-66371
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona