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.



  • http://www.processing.org/

    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 als double s. Wenn du double für die Genauigkeit der Simulation brauchst, kein Problem, denk einfach dran, dass SFML selbst jeweils mit float arbeitet.

    Und etwas mehr Abstände und Zeilenumbrüche würden den Code auch übersichtlicher machen 😉


Anmelden zum Antworten