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

Phili

unregistriert

11

09.08.2006, 13:22

@Black-Panther
Wirklich nicht? Gerade 3ds? Das ist ja mal bescheuert... man kann doch nciht bei jedem Programmstart die Normalen neu berechnen... ist doch ne irre Rechenzeitverschwendung.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

12

09.08.2006, 13:24

Pre-processing --> eigenes Modellformat ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Phili

unregistriert

13

09.08.2006, 13:42

@Black-Panther
Dacht schon... :) . Aber ich machs mir noch einfacher. Ich hab nen Konverter von .x in mein eigenes Format. Und da sind die Normalen mit dabei :p

Sluggy

Frischling

  • »Sluggy« ist der Autor dieses Themas

Beiträge: 30

Wohnort: Spardorf

Beruf: Schüler

  • Private Nachricht senden

14

09.08.2006, 20:48

@Black-Panther

Cool, kannst du mal den Code posten?
Dann könnt ichs an meinen Loader anpassen und hoffentlich funktionierts dann...
LIFE SUCKS!!!

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

15

10.08.2006, 09:45

k... falls du was nicht verstehen solltest, einfach fragen, düfrte aber kein Problem darstellen...

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
//Berechnet die Normalvektoren für jeden Vertex

ogResult og3dsFile::CalculateNormalVectors()
{
    //Alle Normalvektoren auf Null setzten

    for(DWORD dwModel = 0; dwModel < static_cast<DWORD>(m_iCountObjects); dwModel++)
    {
        for(int i = 0; i < static_cast<int>(m_aModel[dwModel].wCountVertizes); i++)
        {
            m_aModel[dwModel].pVertex[i].vNormal = og3DVector(0.f);
        }
    }

    //Jedes Modell durchgehen

    for(DWORD dwModel = 0; dwModel < static_cast<DWORD>(m_iCountObjects); dwModel++)
    {
        //Jedes Dreieck dieses Modells durchgehen

        for(DWORD dwFace1 = 0; dwFace1 < m_aModel[dwModel].wCountFaces; dwFace1++)
        {
            //Spannvektoren bilden

            og3DVector vTemp1 = m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].b].vPosition - 
                                m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].a].vPosition;
            og3DVector vTemp2 = m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].c].vPosition - 
                                m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].a].vPosition;

            og3DVector vNormal  = og3DVector(0.f);
            vNormal             = og3DVectorNormalize(og3DVectorCross(vTemp1, vTemp2));

            //Normalvektoren zuweisen

            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].a].vNormal += vNormal;
            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].b].vNormal += vNormal;
            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].c].vNormal += vNormal;
        }
    }

    //Alle Normalvektoren normalisieren

    for(DWORD dwModel = 0; dwModel < static_cast<DWORD>(m_iCountObjects); dwModel++)
    {
        for(int i = 0; i < static_cast<int>(m_aModel[dwModel].wCountVertizes); i++)
        {
            m_aModel[dwModel].pVertex[i].vNormal = og3DVectorNormalize(m_aModel[dwModel].pVertex[i].vNormal);
        }
    }

    return OG_OK;
}
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Sluggy

Frischling

  • »Sluggy« ist der Autor dieses Themas

Beiträge: 30

Wohnort: Spardorf

Beruf: Schüler

  • Private Nachricht senden

16

10.08.2006, 10:47

THX!

sieht logisch aus^^

den ausdruck "static_cast<DWORD> (...)" bei

C-/C++-Quelltext

1
for(DWORD dwModel = 0; dwModel < static_cast<DWORD>(m_iCountObjects); dwModel++)
hab ich zwar noch nie gesehen, vermute aber, dass es einfach ein int in ein DWORD umwandelt, oder?
LIFE SUCKS!!!

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

17

10.08.2006, 11:12

bingo
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

18

10.08.2006, 11:25

Sluggy

Genauer gesagt ist es ein C++-Cast. Viele verwenden ja die C-Casts:

C-/C++-Quelltext

1
DWORD Address = (DWORD)GetProcAddress(/* */);


Da diese aber auch unsinnige Casts (struct zu int oder ähnliches sinnvolles) erlauben, sind C++-Casts besser.

Da gibt es den static_cast, den reinterpret_cast, einen, um const zu entfernen und dann noch einen. Muss ich nochmal nachlesen.

Sluggy

Frischling

  • »Sluggy« ist der Autor dieses Themas

Beiträge: 30

Wohnort: Spardorf

Beruf: Schüler

  • Private Nachricht senden

19

10.08.2006, 11:27

gut, thx

Ich hab noch ne Frage zum Code:


C-/C++-Quelltext

1
2
3
4
//Normalvektoren zuweisen

            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].a].vNormal += vNormal;
            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].b].vNormal += vNormal;
            m_aModel[dwModel].pVertex[m_aModel[dwModel].pFace[dwFace1].c].vNormal += vNormal;


Also zählst du die Normaenvektoren zusammen, wenn die Vektoren bei den Faces mehrmals vorkommen (also Eckpunkt von mehreren Dreiecken sind).
Im Buch steht irgentwas davon, dass man noch den Mittelwert bilden muss, um "glatte" Übergänge zu erhalten.
Müsste man dann nicht die Normalenvektoren durch die Anzahl, wie oft sie vorkommen teilen, um den Mittelwert zu bilden?
LIFE SUCKS!!!

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

20

10.08.2006, 11:28

static_cast
dynamic_cast
reinterpret_cast (entspricht im prinzip dem C-cast... kannst damit alles casten ;))

edit:
Antwort auf deinen Post ;)
Das mach ich ja dann unten, wenn ich sie normalisiere, teile ich sie ja genau durch diesen Betrag...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige