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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

19.03.2009, 20:45

[erledigt]Get/Set Pixel

Das wurde bestimmt schön öffters gefragt aber ich finde das nicht mehr.
Wie ermittle ich ein Pixel von ein ubyte pixel[] array.
Wenn ich die Positionen angebe.
Wollte noch mal wissen wie es bei RGBA geht.
Hab es mal so versucht funktioniert aber nicht richtig:

C-/C++-Quelltext

1
2
3
4
pixels[y + x * width] = color.red;
pixels[(y + x * width)+1] = color.green;
pixels[(y + x * width)+2] = color.blue;
pixels[(y + x * width)+3] = color.alpha;

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

2

19.03.2009, 20:56

Ich kenne bzw. ich mache das immer so:

C-/C++-Quelltext

1
2
3
4
pixels[y*width + x + 0] = color.red;
pixels[y*width + x + 1] = color.green;
pixels[y*width + x + 2] = color.blue;
pixels[y*width + x + 3] = color.alpha;

Gruß Lukas =)

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

19.03.2009, 21:13

Hab noch was anderes gefunden:
RGBA:

C-/C++-Quelltext

1
2
3
4
pixels[4*(x + y * width)] = color.red;
pixels[4*(x + y * width)+1] = color.green;
pixels[4*(x + y * width)+2] = color.blue;
pixels[4*(x + y * width)+3] = color.alpha;


Was ich mich gerade frage wie kommt man auf diese "Formel".
Also wie Funktioniert der zugrifft das ist ja kein 3D array

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

19.03.2009, 21:15

Ach stimmt hast Recht, ich hab das 'mal 4' (4*) vergessen XD
selten dämlich von mir ^^

aber das mit y*width war richtig.

Wieso auch 3D? Das ist nur ein 2D Array für die PixelFarben des 2D Bildschirms.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

5

19.03.2009, 21:22

3D wegen:

C-/C++-Quelltext

1
2
3
4
5
pixels[width][height][rgba]
pixels[x][y][0] = r; 
pixels[x][y][1] = g; 
pixels[x][y][2] = b; 
pixels[x][y][3] = a;

6

19.03.2009, 21:23

Du hast einen eindimensionales Array. Durch [x] ist er dann eindeutig ansprechbar.
In einem zweidimensionalen Array ist es dann [x+length*y] (nur für ein begrenztes Array) für 0<x<length. Wenn du y ansprichst springt er immer length weiter (also den maximalen wert, den x nicht erreichen kann) Das ist wohl auch noch recht einsichtig.
Für einen 3-dimensionales Array teilen wir es auf ein zweidimensionales. das wird mit [x+length*t] angesprochen, wobei t ein weiteres zweidimensionales Array ist. wenn man das nun einsetzt gibts [x+length*(y+width*z)]
Dies ist beliebig erweiterbar für n-dimensionale Arrays.

P.S. Wir haben nicht wirklich zwei-/dreidimensionale Arrays, ich meine damit in einem eindimensionalen Array dargestellte zwei-/dreidimensionale Arrays.

Anonymous

unregistriert

7

19.03.2009, 21:40

Schaut euch mal das Renovatio Tutorial Teil 1 an bzgl. 1D-Array.

Werbeanzeige