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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

05.06.2017, 15:12

Das ist mir schon klar, David. Aber eine andere Erklärung wäre mir unlogisch. Folglich kann das da oben nicht der aktuelle Code sein.
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]

12

05.06.2017, 18:46

@David ich habe den Funktionsaufruf der UpdateVertex-Funktion am Ende hinzugefügt. Und ich habe bei den Berechnungen die Formel verändert und als weiteren Faktor die Entfernung zum vorherigen Vertex genommen.

Und mein Gedanke war:
Wenn ich es als Trianglelist habe, ändere ich ja die drei Eckpunkte jedes Dreiecks und die Dreiecke zerfliegen in alle Richtungen. Wenn man einen Trianglestrip verwendet, bleiben die Vertices immer verbunden und es bleibt ein geschlossenes Mesh.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

05.06.2017, 19:18

Bitte lies nochmal, was ich auf der Seite vorher geschrieben habe. Ich sagte doch schon, dass dein Problem ein logisches ist und sowohl ein Strip als auch separate Triangles funktionieren, solange deine Berechnung sinnvoll ist. Auch mit einem Strip ist dein Problem eventuell nicht erledigt. Damit hängen zwar die nacheinander definierten Polygone des Strips zusammen, aber noch immer nicht alle der gesamten Oberfläche - eine Kugel kann man mit einem einzigen Strip definieren, würde sich bei dir aber verhalten wie eine geschälte Orange und in Streifen auflösen. Korrigier deine Berechnung entsprechend meines Hinweises von der vorherigen Seite.
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]

14

05.06.2017, 20:30

Den NullPointer habe ich gelöst. Ich habe das Modell NACH tbExit() entladen.

Ich habe es jetzt so probiert:

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
// Simuliert einen Shader
tbResult SimulateShader()
{
    SVertex Vertex;
    tbVector3 vOldPosition = tbVector3(0.0f, 0.0f, 0.0f);
    float fDistance;

    for (unsigned int i = 0; i < g_pModel->GetVertexBuffer()->GetMaxVertices(); i++)
    {
        g_pModel->GetVertexBuffer()->GetVertex(i, &Vertex);

        // Entfernung zum vorherigen Vertex berechnen
        fDistance = tbVector3Length(Vertex.vPosition - vOldPosition);

        // Wenn die Entfernung gleich 0 ist, ist es der gleiche Vertex wie der Vorherige und die Position wird übernommen.Ansonsten wird die Position berechnet
        if (fDistance = 0.0f)
        {
            Vertex.vPosition = vOldPosition;
        }
        else
        {
            // Alte Vertex-Position speichern
            vOldPosition = Vertex.vPosition;

            // Position verändern
            Vertex.vPosition += tbVector3(sinf(g_f1 * fDistance + g_fTime * g_f2) * 0.1f * g_f4 * cosf(g_f1 * fDistance + g_fTime * g_f3) * g_f2,
                                          cosf(g_f1 * fDistance + g_fTime * g_f3) * 0.08f * g_f2 * sinf(g_f1 * fDistance + g_fTime * g_f4) * g_f3,
                                          sinf(g_f1 * fDistance + g_fTime * g_f4) * 0.1f * g_f3 * sinf(g_f1 * fDistance + g_fTime * g_f2) * g_f4);
        }

        g_pModel->GetVertexBuffer()->SetVertex(i, &Vertex);

        // Den Vertex-Buffer aktualisieren
        if (g_pModel->GetVertexBuffer()->Update()) return TB_ERROR;
    }

    return TB_OK;
}


Jedoch bewegt sich jetzt die ganze Schrift in einem.

Edit: Ich muss bei der if Abfrage natürlich fDistance == 0 schreiben, sonst ist es ja eine Zuweisung. Und das kopieren der Vertex-Position muss nach der Berechnung geschehen. Ich habe es zwar noch nicht getestet, aber es müsste funktionieren.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Patrick Z.« (06.06.2017, 09:09)


15

06.06.2017, 12:13

Ich habe das ganze jetzt so gelöst:

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
// Simuliert einen Shader
tbResult SimulateShader()
{
    SVertex Vertex;

    for (unsigned int i = 0; i < g_pModel->GetVertexBuffer()->GetMaxVertices(); i++)
    {
        g_pModel->GetVertexBuffer()->GetVertex(i, &Vertex);

        // Position verändern
        Vertex.vPosition += tbVector3(sinf(g_f1 * Vertex.vPosition.x + Vertex.vPosition.y + Vertex.vPosition.z + g_fTime * g_f2) * 0.005f * g_f4,
                                      cosf(g_f1 * Vertex.vPosition.x + Vertex.vPosition.y + Vertex.vPosition.z + g_fTime * g_f3) * 0.005f * g_f2,
                                      sinf(g_f1 * Vertex.vPosition.x + Vertex.vPosition.y + Vertex.vPosition.z + g_fTime * g_f4) * 0.005f * g_f3);


        g_pModel->GetVertexBuffer()->SetVertex(i, &Vertex);
    }
        
        // Den Vertex-Buffer aktualisieren
    if (g_pModel->GetVertexBuffer()->Update()) return TB_ERROR;

    return TB_OK;
}
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patrick Z.« (06.06.2017, 14:42)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

06.06.2017, 13:03

Den Vertex Buffer in jedem Durchlauf der Schleife zu updaten ist eine schlechte Idee. Einmal nach der Schleife reicht doch völlig.

17

06.06.2017, 14:41

Hab ich wohl übersehen.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Werbeanzeige