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. |
|
pekfos |
» 2015-02-21 22:32:55 Czemu obwiniasz biblioteki a nie własny kod i grafiki..? |
|
Brunon3 |
» 2015-02-21 22:58:45 Może użyj timera? |
|
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. #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 ); sf::Texture gauge_texture; gauge_texture.loadFromFile( "dial.png" ); 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" ); 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" ); sf::Sprite gauge_sprite3; gauge_sprite3.setTexture( gauge_texture3 ); gauge_sprite3.setOrigin( 200, 200 ); gauge_sprite3.setPosition( 300, 100 ); gauge_sprite3.setRotation( 170 ); gauge_sprite3.setScale( 0.5, 0.5 ); sf::Texture gauge_texture4; gauge_texture4.loadFromFile( "ned1.png" ); 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 ); gauge_sprite.setRotation( heading ); gauge_sprite2.setRotation( heading * - 1 ); gauge_sprite4.setRotation( heading * - 1 ); AppWindow.draw( gauge_sprite ); AppWindow.draw( gauge_sprite2 ); AppWindow.draw( gauge_sprite3 ); AppWindow.draw( gauge_sprite4 ); heading = heading + 1; AppWindow.display(); } return 0; }
|
|
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 |
|
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 |
|
Dragonit |
» 2015-02-21 23:58:16 |
|
pekfos |
» 2015-02-22 11:12:30 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..) |
|
« 1 » 2 |