2d grafik ohne viel aufwand?
-
Hallo leute,
ich habe vor kurzem mit c++ angefangen und moechte eine kleine planetensimulation schreiben. das soll so ablaufen dass mit den newtonschen bewegungsgesetzen in kleinen zeitschritten immer die x und y position eines planeten in der umlaufbahn um die sonne bestimmt wird.
nun waere es zum visuellen check sehr gut wenn man den x und y wert irgendwie einer funktion geben koennte, die pixel in einem fenster einfaerbt.
gibt es da irgend eine einfache moeglichkeit bei der ich nicht irgendwelche komplizierten grafiklibraries brauche und keine linkerfehler/sonstiges erhalte die ich nicht verstehe?
-
-
dwtoni schrieb:
ich habe vor kurzem mit c++ angefangen. gibt es da irgend eine einfache moeglichkeit bei der ich nicht irgendwelche komplizierten grafiklibraries brauche und keine linkerfehler/sonstiges erhalte die ich nicht verstehe?
Muss ich nocht dazu sagen. C++ kennt keine Grafik/GUI/3D Kram. Ergo, du brauchst natürlich ein externes Toolkit. Ergo du musst mit dem Linker reden. Natürlich gibt es da gute IDEs wie VS 2012, die einem ein paar Dinge abnehmen, aber auch nicht alles. Unterm Strich bleibt darum zu sagen. Anfänger sollten die Finger von so etwas lassen und erstmal C++ lernen. Willst du das nicht, hast du dich für die falsche Sprache entschieden.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
+1 für SFML
-
dot schrieb:
+1 für SFML
Auch +1.
Ich mag die Plantensimulation sehen.
Und uih, die ist doch voll lastig von so Sachen, was man lernen sollte,
bis auf kurz mal putPixel(x,y,color).Aber dwtoni, bitte bau erstmal ganz lange kein Spiel. Dann ist alles gut
und Du lernst (mit SFML und nur dem Wenigsten davon!!!) und Deiner
Verspieltheit recht schnell, vielleicht sogar brutal schnell. Das macht
Spaß. Sei bitte in der Grafik bescheiden.
-
http://graphicsforfaith.com/games/?p=373
http://graphicsforfaith.com/games/?p=254
http://yoyogames.com/Für diesen Zweck kannst sogar die kostenlose Version von GameMaker nehmen.
Auch über Steam zu beziehen.
-
Ist zwar mehr Java als C++, aber hier schlägst du dich ganz sicher nicht mit Linkerfehlern herum.
-
so... habe es nun geschafft smfl zu installieren, vielen dank für den tipp. Hier der code einer ersten simulation. Bisher noch sehr einfach/schnell gemacht um zu sehen ob es funktioniert. Und es kommen tatsächlich ellipsen heraus, wie in echt auch^^
#include "stdafx.h" #include <SFML/Graphics.hpp> #include <cmath> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { sf::RenderWindow window(sf::VideoMode(800, 800), "SFML works!"); sf::CircleShape shape(5.f); shape.setFillColor(sf::Color::Green); sf::CircleShape sun(15.f); sun.setFillColor(sf::Color::Yellow); shape.setPosition(0,40); sun.setPosition(400,400); double xcoord=200; double ycoord=100; double force=0; double radiusvecx=0; double radiusvecy=0; double forcex=0; double radius; double forcey=0; double vx=0.036; double vy=0.001; while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); //******************************************************* //eigentliche berechnung: radius=std::sqrt((400-xcoord)*(400-xcoord)+(400-ycoord)*(400-ycoord)); radiusvecx=400-xcoord; radiusvecy=400-ycoord; if (radius==0.0000){forcex=0;forcey=0;} if (radius!=0){forcex=radiusvecx/(radius*radius*radius);forcey=radiusvecy/(radius*radius*radius);} vx=vx+forcex; vy=vy+forcey; xcoord=xcoord+vx; ycoord=ycoord+vy; //std::cout<<"x coord"<<xcoord; //std::cout<<"y coord"<<ycoord; //ende berechnung*********************************** shape.setPosition(xcoord,ycoord); window.draw(shape); window.draw(sun); window.display(); } return 0; }
-
Nett
Ich würde dir raten, mit Vektoren zu arbeiten, damit kannst du sehr viele Berechnungen vereinfachen. SFML bietet dazu auch bereits die Klasse
sf::Vector2f
an.Ausserdem sind in der Grafikprogrammierung
float
s üblicher alsdouble
s. Wenn dudouble
für die Genauigkeit der Simulation brauchst, kein Problem, denk einfach dran, dass SFML selbst jeweils mitfloat
arbeitet.Und etwas mehr Abstände und Zeilenumbrüche würden den Code auch übersichtlicher machen