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

1

02.08.2011, 20:41

sidescroller parallax scrolling

hallo.

ich hab, wie ihr vl wisst, grad ein sidescroller projekt am laufen und bin grad am überlegen wie ich das mit dem hintergrund scrollen machen soll.

Bis jetzt war meine letze schicht (die am langsamsten scrollt) ein bild mit den maßen von 8000 * 550. das ganze hatte vl 170 kb oder so und war daher
kein problem. Jetzt bin ich allerdings draufgekommen, dass erstens ist das eigentlich sehr umständlich so einen hintergrund zu erstellen und außerdem sind meine levellängen begrenzt, weil ich nicht unendliche lange background laden kann. Abgesehen davon kommt mir meine lösung, wie sie jetzt ist, einfach wie ein pfusch vor...

Jetzt war meine überlegung, das ganze etwa gleich aufzuziehen, wie die map selbst. also ich habe ein int oder char oder was-auch-immer array und darin steht dann
halt z.b. int[] bbackarray = {1,2,3,3,3,3,4,5} und dann bau ich mir sozusagen meinen background auch tilebased zusammen, nur eben viel größer.

Jetzt ist meine frage, was ihr von dieser idee haltet und wenn ihr sie für schlecht empfindet, was ihr mir dann vorschlagt.

lg aly

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

02.08.2011, 21:31

Jo, wuerde ich so machen und hab ich auch schon so gemacht.

3

02.08.2011, 21:32

ok, danke. dann werd ichs auch so machen!

lg

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

4

03.08.2011, 21:32

Scrolle nicht das Bild selber, sondern die Texturkoordinaten und stell die Textur auf repeat statt auf clamp.

Geht gut mit Shadern (GLSL):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#version 330

//----------------------------------------------
// Layout Vars
//----------------------------------------------
layout(location = 0) in vec3 NL_Vertex;
layout(location = 1) in vec4 NL_Color;
layout(location = 2) in vec2 NL_TextureCoord;

//----------------------------------------------
// Uniforms from NightLight
//----------------------------------------------
uniform mat4 NL_ProjectionMatrix;

//----------------------------------------------
// Output to fragment shader
//----------------------------------------------
smooth out vec4 theColor;
smooth out vec2 theTextureCoord;

uniform float tex_offset;

void main()
{   
    //----------------------------------------------
    // Applying position
    //----------------------------------------------
    gl_Position = NL_ProjectionMatrix*vec4(NL_Vertex, 1.0);     

    //----------------------------------------------
    // Scrolling the Texture
    //----------------------------------------------
    vec2 tex_coord = NL_TextureCoord;
    tex_coord.x += tex_offset;
    
    //----------------------------------------------
    // Output
    //----------------------------------------------
    theColor = NL_Color;
    theTextureCoord = tex_coord;
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#version 330

uniform sampler2D NL_TextureID;

smooth in vec4 theColor;
smooth in vec2 theTextureCoord;

out vec4 outputColor;

void main()
{
    vec4 value = texture2D(NL_TextureID, theTextureCoord);      
    
    if ( value.a <= 0.01 ){
    discard;
    }
    
    outputColor = theColor*value;
}

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

03.08.2011, 22:41

Bissl langweilig, wenn immer die selbe Textur kommt? Aber immer noch besser als nix, aber ich wuerde dann eher was prozedurales nehmen, typischerweise ein Sternenhimmel.

Werbeanzeige