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

Grafika 2D na sprzęcie "embedded", Allegro i SFML za wolne - co jeszcze?

Ostatnio zmodyfikowano 2015-02-22 14:22
Autor Wiadomość
wjpl
Temat założony przez niniejszego użytkownika
Grafika 2D na sprzęcie "embedded", Allegro i SFML za wolne - co jeszcze?
» 2015-02-21 22:23:22
Cześć, udało mi się już nieco opanować C po zabawie z mikrokontrolerami, teraz chciałbym napisać program w C++, który wyświetlałby kilkanaście różnych obracających się tarcz oraz wskazówek wyświetlających różne wartości.

Udało mi się to już zrobić korzystając z Visual C++ 2008 oraz biblioteki SFML, wczytywałem obrazki w formacie PNG i wszystko fajnie działa, ale tylko na w miarę nowoczesnym sprzęcie. Próba mojego programu pod Pentium 3 dała odświeżanie tylko kilka razy na sekundę. Próbowałem również biblioteki Allegro, też za mało wydajna.

A ja chciałbym wykorzystać np. terminale HP Thinclient, które można kupić za mniej niż 100 zł, mające procesor 800 MHz i 256 MB RAM i Windows XP Embedded i stworzyć zabudowany system z jakimś monitorem, wyświetlający wartości przychodzące z sieci. Ewentualnie mógłbym wykorzystać linuksa, w ostateczności razem z WINE (przynajmniej programy z SFML działają tak samo wydajnie jak pod czystym windowsem).

Czy ktoś zna jakieś gotowe biblioteki, które lepiej sobie poradzą z tym zadaniem? Na pewno dałoby radę całość napisać w Assemblerze albo jeszcze inaczej i by działało szybko, ale nie mam takich umiejętności i raczej nie będę ich nabywał, gdyż potrzebuję tylko podstawowej wiedzy która mi umożliwia wizualizację pewnych koncepcji. Może istnieje jakaś prosta biblioteka która pozwoliłaby np. wczytywać wektorowe obrazy SVG i nimi manipulować, być może byłoby to szybsze niż bitmapy. Za wszelkie porady byłbym wdzięczny.
P-127026
pekfos
» 2015-02-21 22:32:55
Czemu obwiniasz biblioteki a nie własny kod i grafiki..?
P-127028
Brunon3
» 2015-02-21 22:58:45
Może użyj timera?
P-127031
wjpl
Temat założony przez niniejszego użytkownika
» 2015-02-21 22:59:06
Mój kod wygląda w taki sposób - dla testu rysuje tarcze i obraca je o jeden stopień z każdą klatką.

Komputer testowy z P3 500 MHz nie osiąga pełnej płynności, czyli 60 FPS w tym przypadku, a jeśli uruchomię program 4 razy, już się zaczyna bardzo ostre klatkowanie.

Wydaje mi się, że da się osiągnąć to, czego oczekuję na powolnym komputerze, no bo już wiele lat temu takie rzeczy chyba były możliwe.


C/C++
#include "stdafx.h"

#include <SFML/Graphics.hpp>

using namespace std;

float heading;

int main()
{
   
    sf::RenderWindow AppWindow( sf::VideoMode( 400, 200, 32 ), "title" );
    AppWindow.setFramerateLimit( 60 );
   
   
    // Wczytywanie obrazków PNG
   
    sf::Texture gauge_texture;
    gauge_texture.loadFromFile( "dial.png" ); // tarcza 400x400
    sf::Sprite gauge_sprite;
    gauge_sprite.setTexture( gauge_texture );
   
    gauge_sprite.setOrigin( 200, 200 );
    gauge_sprite.setPosition( 100, 100 );
    gauge_sprite.setScale( 0.5, 0.5 );
   
   
    sf::Texture gauge_texture2;
    gauge_texture2.loadFromFile( "ned1.png" ); // wskazówka 43x255
    sf::Sprite gauge_sprite2;
    gauge_sprite2.setTexture( gauge_texture2 );
   
    gauge_sprite2.setOrigin( 21, 199 );
    gauge_sprite2.setPosition( 100, 100 );
    gauge_sprite2.setScale( 0.5, 0.5 );
   
    sf::Texture gauge_texture3;
    gauge_texture3.loadFromFile( "dial.png" ); // tarcza 400x400
    sf::Sprite gauge_sprite3;
    gauge_sprite3.setTexture( gauge_texture3 );
   
    gauge_sprite3.setOrigin( 200, 200 );
    gauge_sprite3.setPosition( 300, 100 );
    gauge_sprite3.setRotation( 170 ); // Ta tarcza nie będzie się obracała
    gauge_sprite3.setScale( 0.5, 0.5 );
   
    sf::Texture gauge_texture4;
    gauge_texture4.loadFromFile( "ned1.png" ); // wskazówka 43x255
    sf::Sprite gauge_sprite4;
    gauge_sprite4.setTexture( gauge_texture4 );
   
    gauge_sprite4.setOrigin( 21, 199 );
    gauge_sprite4.setPosition( 300, 100 );
    gauge_sprite4.setScale( 0.5, 0.5 );
   
   
    while( AppWindow.isOpen() )
    {
       
        sf::Event event1;
        while( AppWindow.pollEvent( event1 ) )
        {
            if( event1.type == sf::Event::Closed )
                 AppWindow.close();
           
        }
       
       
        AppWindow.clear( sf::Color::Black );
       
        // ustawiamy obrót tarcz
       
        gauge_sprite.setRotation( heading );
        gauge_sprite2.setRotation( heading * - 1 ); // obrót w przeciwnym kierunku
        gauge_sprite4.setRotation( heading * - 1 );
       
       
        AppWindow.draw( gauge_sprite );
        AppWindow.draw( gauge_sprite2 );
        AppWindow.draw( gauge_sprite3 );
        AppWindow.draw( gauge_sprite4 );
       
        heading = heading + 1; // zwiększamy obrót o 1 stopień
       
        AppWindow.display();
       
       
       
    }
    return 0;
}

P-127032
1aam2am1
» 2015-02-21 23:05:40
SFML jest dobrą biblioteką, ale ma za dużo funkcji jeżeli chciałbyś mieć na tak słabym sprzęcie tak dużą ilość fps.
Wszystko za każdym przebiegiem funkcji musi być przeliczane, nawet te żeczy których ty nieużywasz.
A i wstaw mniejsze obrazki zamiast używać skali bo to obiąża mocno komputer (mocno jak na twój sprzęt)

A i usuń AppWindow.setFramerateLimit( 60 ); //to spowalnia program
P-127033
michal11
» 2015-02-21 23:35:25
@up dlaczego twoim zdaniem setFramerateLimit spowalnia program ?

Zawsze możesz użyć openGL/DirectX, ewentualnie poczytac dokumentacje karty graficznej i tam może być coś ciekawego
P-127035
Dragonit
» 2015-02-21 23:58:16
Najlepszym wg mnie będzie OpenGL + glut.
Podaje ci link do mojego starego projektu w openGl + glut, z wyświetlaniem ilości FPS, sobie sprawdź ile klatek wyciągnie.
http://chomikuj.pl/GameON​/PROGRAMOWANIE/KURSY​/Przyk*c5*82ady
pobierz: SZABLON GLUT + FPS.7z
P-127037
pekfos
» 2015-02-22 11:12:30
Może użyj timera?
Wielokrotnie powtarzany żart przestaje być śmieszny. Choć tu nigdy nie był..

dlaczego twoim zdaniem setFramerateLimit spowalnia program ?
Bo to dodatkowa rzecz do liczenia, która nie ma tu najmniejszego zastosowania. Timery to narzędzia do spowalniania programu, a nie magicznego przyspieszania (To głównie do ciebie, Brunon3..)
P-127055
« 1 » 2
  Strona 1 z 2 Następna strona