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

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

26.09.2004, 20:44

modell wird falsch dargestellt

Hi,

Ich habe jetzt mal zum test eine Pyramide mit Milkshape erstellt. die ist in dem Koordinatensystem ganz normal ausgerichtet. Die Spitze zeigt nach oben also in richtung Y+. Aber wenn ich die Pyramide dann lade und darstelle mit DirectX sieht es aus als ob die Z mit der Y Achse ausgetauscht wurde. Die Spitze zeigt dann nach links. Hier mal der Code meiner Render Funktion:

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
            vCameraDir      = tbVector3(0.0f,1.0f,0.0f);
            vCameraPos      = tbVector3(-55.0f,55.0f,0.0f);
            // Puffer leeren und Szene beginnen

            tbDirect3D::Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                tbColor(0.0f, 0.0f, 0.0f), 1.0f, 0);

            tbDirect3D::BeginScene();

            // Beleuchtung und Culling ausschalten, Dithering aktivieren

            tbDirect3D::SetRS(D3DRS_LIGHTING, TRUE);
            tbDirect3D::SetRS(D3DRS_CULLMODE, D3DCULL_CCW);
            tbDirect3D::SetRS(D3DRS_DITHERENABLE, FALSE);
            tbDirect3D::SetRS(D3DRS_ZENABLE, TRUE);

            //// Rotationsvariable immer zwischen 0 und 360 halten

            //if (fRotation >= 360)

            //  fRotation = 0;


            //// Rotations- und Translationsmatrix der Miene erzeugen

            //mRotation1 = tbMatrixRotationX(TB_DEG_TO_RAD(-90));

            //mRotation = tbMatrixRotationY(TB_DEG_TO_RAD(30));


            ////// Beide Matrizen kombinieren und als Weltmatrix einsetzen

            mWorld = tbMatrixIdentity();
            tbDirect3D::SetTransform(D3DTS_WORLD, mWorld);

            // Camera

            mCamera = tbMatrixCamera(vCameraPos, vCameraDir);
            tbDirect3D::SetTransform(D3DTS_VIEW, mCamera);

            // Projektionsmatrix erstellen und einsetzen

            fAspect = (float)(g_pGQ->m_Config.Direct3D.VideoMode.Width) / (float)(g_pGQ->m_Config.Direct3D.VideoMode.Height);
            mProjection = tbMatrixProjection(TB_DEG_TO_RAD(60.0f), fAspect, 1.0f, 200.0f);
            tbDirect3D::SetTransform(D3DTS_PROJECTION, mProjection);

            // Ein Richtungslicht erstellen mit der Richtung der Kamera

            ZeroMemory(&Light, sizeof(D3DLIGHT9));
            Light.Type = D3DLIGHT_DIRECTIONAL;
            Light.Diffuse = tbColor(0.7f, 0.7f, 0.7f);
            Light.Ambient = tbColor(0.3f, 0.3f, 0.3f);
            Light.Specular = tbColor(0.0f, 0.0f, 0.0f);
            Light.Direction = vCameraDir;
            tbDirect3D::SetLight(0, &Light);
            tbDirect3D::LightEnable(0, TRUE);

            // Miene zeichnen

            if(mMiene->Render())
                TB_ERROR("Rendern von Miene hat nicht funktioniert",TB_ERROR);


            static char CameraKoords[12];
            sprintf(CameraKoords, "Camera X %.1f  Camera Y %.1f", vCameraPos.x, vCameraPos.y); 
            // Mir Ist Langweilig Text einblenden

            pMenueFont->Begin();
            //pMenueFont->DrawText(vTMirIstLangweilig, "Mir Ist Lanweilig" ,TB_FF_ALIGN_HCENTER | TB_FF_RELATIVE, -1, cTMirIstLangweilig, cTMirIstLangweilig);

            pMenueFont->DrawText(vTMirIstLangweilig, CameraKoords, TB_FF_ALIGN_HCENTER | TB_FF_RELATIVE, -1, cTMirIstLangweilig, cTMirIstLangweilig);
            pMenueFont->End();  

            tbDirect3D::EndScene();
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

26.09.2004, 21:33

vCameraDir = tbVector3(0.0f,1.0f,0.0f);
Zeigt ja auch eindeutig an der y-achse entlang.

denn:

zaxis = normal(Eye - At)

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

3

26.09.2004, 22:28

Aber egal was ich bei CameraDirection eintrage da verändert sich nichts am Bild. Das beunruhigt mich auch sehr.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

27.09.2004, 00:35

ich hatte das prob auch...

bis ich dann gemerkt hab, dass milkshape ein rechtshändiges koordinatensystem verwendet... ;)

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

5

28.09.2004, 00:55

1. Was sollte sich verändern wenn ich den CameraDirection Vector verändere, doch eigentlich die Blickrichtung oder?
2. Was heißt rechtshändisches Koordinatensystem und wie gleich ich das aus? Außer bei jedem Modell eine 90° Dehung um die XAchse, daruaf bin ich auch gekommen. Ist aber doof.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

28.09.2004, 11:55

Zitat von »"Nox"«

zaxis = normal(Eye - At)


Also in deinem Fall:
zaxis = normal( vCameraPos - CameraDir);


vCameraDir = tbVector3(0.0f,1.0f,0.0f);
vCameraPos = tbVector3(-55.0f,55.0f,0.0f);

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

7

28.09.2004, 17:20

Ich kann deine Rechnungen was die Z Achse betrifft nicht nachvoll ziehen.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

8

24.07.2009, 10:28

Ich habe ein ähnliches Problem mit gedownloadeten Modellen (Autos) das erste Auto wird richtig dargestellt, aber das zweite versinkt beim Rendern zu hälfte im Boden (Y=0). Beide werden auf die gleiche Art gerendert (ich tasuche die gespeicherten Modelle vorm starten der exe aus). Somit müsste das doch am Modell liegen, aber sie werden in meinem 3D Studio auf der gleichen Ebene dargestellt d.h. das zweite Auto versingt nicht im Boden. Hat jemand eine Idee woran das liegen könnte das das zweite Auto versingt?

Ps: ist mein erster Post, ich hoffe ich hab alles richtig gemacht ;-)

Danke im Voraus

9

24.07.2009, 10:38

Zitat von »"Neoticer"«

Ps: ist mein erster Post, ich hoffe ich hab alles richtig gemacht ;-)


Naja, fast.
Wäre besser gewesen, einen neuen Thread aufzumachen, anstatt diesen asbachuralten auszugraben.

Sei's drum! Willkommen erstmal im Forum! :)

Welches Modellformat verwendest du?
Meintest du 3D Studio max?
Welcher Exporter?

Zeig mal ein wenig vom relevanten Code (Laden, Rendern etc.).
fka tm

10

24.07.2009, 10:56

Zitat

Wäre besser gewesen, einen neuen Thread aufzumachen, anstatt diesen asbachuralten auszugraben.

Ok werd ich das nächste mal so machen.

Ich benutze die TriBase von David somit vervende ich das 3DS welches dann nach TBM umgewandelt wird. Ja ich die Modelle in 3D Studio max geladen.
Der Code beim Laden:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
g_pSedanModel = new tbModel;
if(g_pSedanModel->Init("Ferrari.3DS.tbm@Data\\Ferrari.zip", "", "@Data\\Ferrari.zip"))
{
    MessageBox(tbDirect3D::Instance().GetWindow(), "Fehler beim Laden der Sedanmodelldatei!",
                  "Fehler", MB_OK | MB_ICONEXCLAMATION);
    CleanUp();
    return 1;
}

und Rendern:

C-/C++-Quelltext

1
2
3
mWorld = tbMatrixRotationY(Rechts)*tbMatrixTranslation(Position);
D3D.SetTransform(D3DTS_WORLD, tbMatrixIdentity());
g_pSedanModel->Render();


bei der Translation habe ich darauf geachtet das das Auto nicht in der Höhe verschoben wird. Habe auch schon mit der IdentitätsMatrix gearbeitet (bei mWorld), aber das gleiche Ergebnis (2. Auto versinkt im Boden).

Werbeanzeige