Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

killmichnich

unregistriert

1

07.08.2013, 17:03

SFML - Kreis in Textur zeichnen

Hallo Community,

ich fange gerade mit sfml an und stehe vor einem kleinen Problem: Ich will, ganz simpel, einen Kreis in eine Textur zeichnen. Habe mir auf der HP schon alles rausgesucht und bin zu folgendem Code gelangt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tex.create(800, 600);   

    sf::Uint8* pixels = new sf::Uint8[800 * 600 * 4];

    for(double d=0.0; d<360.0; d+=1.0){
        int x = (int)(100*cos(d/180.0*3.1415))+400;
        int y = (int)(100*sin(d/180.0*3.1415))+300;
        pixels[y*600+x] = 255;
        pixels[y*600+x+1] = 255;
        pixels[y*600+x+2] = 255;
        pixels[y*600+x+3] = 255;
    }

    
    tex.update(pixels);

Mein Fenster ist 800*600 Pixel groß und ich will in der Mitte den Kreis mit Radius 100 haben. Leider wird mir nicht nur ein Kreis gezeichnet, sondern mehrere kleine nebeneinander. Auch sind diese Kreise nicht einfarbig, sondern lustig bunt.
Wie funktioniert das denn mit dem bearbeiten der Textur? Weiß da jemand was ^^

Danke schonmal =)

MfG Killichnich

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

07.08.2013, 17:06

sf::Circle
RenderTarget::draw()
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

killmichnich

unregistriert

3

07.08.2013, 17:10

es geht mir nich direkt um den kreis, sondern dass ich die pixel veränder. Später sollen es auch andere Formen werden können. Daher das Verändern der einzelnen Pixel.
Was soll mir das
RenderTarget::draw() sagen? Gezeichnet wirds ja ordnungsgemäß.

4

07.08.2013, 17:11

sf::Circle
RenderTarget::draw()


Ich glaube sf::CircleShape heist die klasse die Blue meint.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

5

07.08.2013, 17:18


Was soll mir das
RenderTarget::draw() sagen? Gezeichnet wirds ja ordnungsgemäß.


Rendertarget kann nicht nur ein sf::RenderWindow sein sondern auch eine sf::RenderTexture sein.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

killmichnich

unregistriert

6

07.08.2013, 17:24

Rendertarget kann nicht nur ein sf::RenderWindow sein sondern auch eine sf::RenderTexture sein.
Ah ok, das is cool, danke ^^

Allerdings weiß ich immer noch nich genau, wie ich die einzelnen Pixel manipulieren kann :O

7

07.08.2013, 17:32

Schau dir mal sf::Image an dort kann man pixel manipulieren.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

8

07.08.2013, 17:57

Hau die Pixel in eine sf::RenderTexture, dort kannst du mit dem üblichen sf::RederTarget::Draw-Befehl arbeiten, die Architektur kennst du aus sf::RenderWindow.
clear, draw und dann display. Anschließend kannst du dir die Textur mit sf::RenderTexture::getTexture holen und die dann zu einem Sprite packen.
sf::CircleShape ist da schon ein guter Weg ohne große Umstände.
Allgemein 'sollte' man für Sprite Masking und Co bei der SFML auf sf::RenderTexture zurückgreifen, alles andere laggt derbe. Mal sehen ob in zukünftigen Updates der Weg erleichtert wird, naja. Jetzt sind wir ja erst mal bei 2.1 ^^

MfG
Check

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

07.08.2013, 20:43

Dein Fehler liegt hier: y * 600
Ein Pixel hat 4 Bytes, also musst du y * 2400 schreiben.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

10

07.08.2013, 21:24

Oder gleich ein uint32 array benutzen

Werbeanzeige