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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

11

05.06.2012, 18:11

Gut das du Koordinaten ansprichst,

Habe dashier grade implementiert:

C-/C++-Quelltext

1
2
3
4
5
6
7
        GLfloat LightAmbient[]= { 1.0f, 1.0f, 0.0f, 0.0f }; 
        GLfloat LightDiffuse[]= { 20.0f, 20.0f, 20.0f, 20.0f }; 
        GLfloat LightPosition[]={ 3.0f, 3.0f, 3.0f, 3.0f };

        glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);     
        glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);     
        glLightfv(GL_LIGHT0, GL_POSITION,LightPosition); 


Was DIFFUSE etc. bedeutet kann man ganz einfach nachlesen aber wofür !! 4 !! Zahlen, also wofür sind die?
Hab ja im Prinzip nur X und Y ?

Wäre nett wenn mir einer sagen würde wofür die 1,2,3 und 4 Zahl steht :)
Antwort:
Die ersten 3 sind die X/ Y/ Z Werte der Lichtquelle. Die letzte Angabe setzt die Entfernung der Lichtquelle fest.
0 steht f�r "unendlich weit entfernt". Das ankommende Licht von dieser Lichtquelle erreicht die Szene parallel.
1.0 legt die Lichtquelle genau auf den angegebenen Punkt fest.

MfG Marcel

P.S.: Experimentiere mit den Zahlen und die resultate sind sehr intressant wenn ich jetzt noch weiß wofür sie stehen,
denke ich, habe ich den dreh raus^^

Achja und kann es sein das dann Alpha werte meine PNG Datei nichtsmehr bringen sobald "Licht" im spiel ist?
Ein Sprite das eigentlich "unsichtbar" wird bleibt seit dem Licht sichtbar.

Edit:

GLfloat LightPosition[]={ 500.0f,300.0f, 0.1f, 1.0f };
Müsste dann heißen: X=500 Y=300 Z=0.1 (aber was heißt den die Z Koordinate für ein 2D Spiel), 1 = Punktlicht, trozdem alles dunkel :(
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FreezingEngine« (05.06.2012, 20:04)


12

05.06.2012, 22:44

Wie wärs einfach mal mit 0? ?(
Die letzte Zahl gibt wohl an, bis wohin das Licht geht, wobei eine 0 eben sagt, dass es unendlich weit reicht, also nicht irgendwann ausblendend wird.
Das ist jedenfalls so meine Hypothese.
Wenn das Licht auf 0.1f ist und dein Spiel auf 0.f, naja, mag sein, dass ich da ganz anders ansetze, aber sagt dein Hirn dann nicht auch: "Das scheint dann gar nicht drauf!"?
Jedenfalls wenn das Licht nicht auch noch über Z ausbreitend ist.
Weshalb das Ding weg ist, hab ich keine Ahnung. Vielleicht, weil Licht darauf scheint und dadurch nicht mehr im "Dunklem" ist?
Ansonsten vielleicht mal mit ColorKey versuchen.
Naja, ich kenne mich, was das betrifft, wohl zu wenig aus und mein Beitrag ist eine einzige große Vermutung.
Immerhin kann ich dir helfende oder möglich helfende Denkanstöße geben. :D

MfG
Check

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

13

05.06.2012, 23:18

ja mir ist klar das bei 0.f der radius unendlich ist ichwollte aber ausmachen von wo das licht kommt. deswegen ein begrenzter radius aber ich hab druber nachgedacht villt. muss ich mit ogl eine art view machen ob es vernünftig zu sehen aber wie laeufts dann mit der sfml weiter fragen über fragen und keine antwort und ich hab den ganzentag nur gelesen....
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

14

06.06.2012, 12:14

Keiner der sich mit OpenGL auskennt =?
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

15

07.06.2012, 11:59

Ambient, Diffuse und Specular sind RGBA Werte.
Wobei A in der Regel Null ist.
Die W-Koordinaten der Position sollte 0 sein.
Die Z-Koordinate muss relativ zu den geerenderten Polygonen eingestellt werden.
Sind die Vertices auf der XY Ebene mit Facing in positiven Z, so sollte Z ein positiver Wert sein.

Du musst das Licht aber noch anschalten und einige Weitere Parameter übergeben.
Wie willst du das eigentlich mit SDL kombinieren?
Meines Wissens arbeitet SDL vor 2.0 0% mit der Grafikkarte und lässt sich dann quasi unmöglich mit OpenGL verheiraten.

Was genau willst du überhaupt erreichen?
Willst du nur einen Lichtkegel oder soll auch Schattengeworfen werden?
Wenn ersteres, würde ich dir empfehlen, das mit Multitexturing oder Alphablending zu realisieren.
Wenn zweiteres, wird es schwierig zu realisieren. Da braucht man dann in der Regel schon Shader.
Ein Ansatz der evt. ohne Shder ginge, wären die volumetrischen Stencilschatten.
Wenn einfacher statischer Schatten reicht, könnte man noch auf Lightmaps zurückgreifen.

Auf Dgl ist das gut in deutscher Sprache erklärt:
OpenGL Licht: http://wiki.delphigl.com/index.php/Tutorial_Lektion_8
Multitexturing: http://wiki.delphigl.com/index.php/Tutorial_Lektion_7
Shadowmaps: http://wiki.delphigl.com/index.php/GLSL_Licht_und_Schatten
Stencil Shadowing: http://wiki.delphigl.com/index.php/Volum…Stencilschatten

16

07.06.2012, 13:30

Er nutzt doch die SFML 1.6... o.o

MfG
Check

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

17

07.06.2012, 13:52

Zitat

Er nutzt doch die SFML 1.6... o.o

Achso, hab nicht richtig gelesen. :whistling:
Der andere Inhalt gilt trotzdem.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

18

13.06.2012, 02:07

Hey kleines update:
Habs jetzt gelassen "richtiges" licht einzubauen will aber nicht ganz auf das feature verzichten
da Licht & Schatten sehr zur Atmospähre eines Spiels beitragen.
Deswegen möchte ich mit alpha blending mein Glück versuchen, allerdings funktioniert das nicht ganz mit
dem Licht Kegel und dem schatten.
Hier mal der Testcode:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <SFML\Graphics.hpp>

int main()
{
    //Laufzeitvariable
    bool running = true;



    //Event abfragen
    sf::Event Event;
    sf::Input Input;


    
    sf::Image S;
    S.LoadFromFile("Schatten.png");
    sf::Sprite s;
    s.SetImage(S);
    s.SetColor(sf::Color(0,0,0,150));
    //s.SetBlendMode(sf::Blend::Add);
    sf::Image O;
    O.LoadFromFile("Objekt.png");
    sf::Sprite o;
    o.SetImage(O);
    sf::Image P;
    P.LoadFromFile("Player.png");
    sf::Sprite p;
    p.SetImage(P);
    p.SetCenter(60.5,62);
    sf::Image L;
    L.LoadFromFile("Licht.png");
    sf::Sprite l;
    l.SetColor(sf::Color(255,255,255,150));
    l.SetBlendMode(sf::Blend::Multiply);
    l.SetCenter(128,128);


    //Fenster
    sf::RenderWindow Fenster(sf::VideoMode(800,600,32),"Spiel",sf::Style::Titlebar);

    //Hauptschleife
    while(running == true)
    {

        L.CreateMaskFromColor(sf::Color::Black);
        l.SetImage(L);
        while(Fenster.GetEvent(Event))
        {
            // Escape key gedrückt
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
             {
              running = false;
             }

        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::W))
        {
            p.Move(0,-500*Fenster.GetFrameTime());
        }

        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::S))
        {
              p.Move(0,500*Fenster.GetFrameTime());
        }

        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::A))
        {
                       p.Move(-500*Fenster.GetFrameTime(),0);
        }

        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::D))
        {
            p.Move(500*Fenster.GetFrameTime(),0);
        }
        }


        l.SetPosition(p.GetPosition());

        Fenster.Clear(sf::Color::Black);
        Fenster.Draw(o);
        Fenster.Draw(p);
        Fenster.Draw(l);
        Fenster.Draw(s);
        Fenster.Display();
    }

    return 0;
}


Resultat:


(Link)


Info: Das ist nur ein Testcode um einen Weg zu finden Licht & Schatten zu simulieren

Wenn ich den Alphawert von Schatten erhöhe, wird das Licht auch schwächer. ?(
hat einer damit Erfahrung und könnte weiterhelfen?
Egal wie ichs drehe und schiebe entweder ist das Licht vom Schatten zu stark verdeckt oder das Objekt das nicht
im Licht ist ist sichtbar.... :dash:

MfG Marcel..
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Werbeanzeige