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

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

1

23.09.2008, 18:03

[Erledigt] Direct3D - Skybox wird nicht angezeigt

Hallo

ich sitze jetzt seit stunden an einen problem, was anscheinend doch
großer ist als ich dachte.
ich möchte eine einfache skybox anzeigen. der würfel der box wird auch
richtig angezeigt, nur die textur bleibt weiß. die ladefunktion liefert keinen
fehler, der explorer zeigt die richtige textur an und in davids beispiel
funktioniert sie auch.
an der textur selber kann es also nicht liegen

hier der code der renderfunktion, aufs minimum reduziert

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
        struct skyboxvertex
    {
        float x, y, z;
        float tx, ty, tz;
    };

    // hier die indices und vertices der box eintragen


    D3DXMATRIX world, view, projection;

    move(eye, ftime, 10.f); // diese funktion verändert nur den blickpunkt


    dev->Clear(0,0, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0),1.0f, 0);

        // .....


    D3DXMatrixTranslation(&world, eye.x, eye.y, eye.z); // eye ist der blickpunkt

    D3DXMatrixLookAtLH(&view, &eye, &(eye + v2), &v1);
    D3DXMatrixPerspectiveFovLH(&projection, D3DXToRadian(45.f), 1024.f / 1280.f, 0.5f, 20.f);

    dev->SetTransform(D3DTS_WORLD, &world);
    dev->SetTransform(D3DTS_VIEW, &view);
    dev->SetTransform(D3DTS_PROJECTION, &projection);

    dev->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0));

    dev->SetRenderState(D3DRS_LIGHTING, FALSE);
    dev->SetRenderState(D3DRS_ZENABLE, FALSE);
    dev->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);

    dev->SetTexture(0, tex1);

    dev->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, 8, 12, indices, D3DFMT_INDEX16, skybox, sizeof(skybox[0]));
    
    dev->SetRenderState(D3DRS_LIGHTING, TRUE);
    dev->SetRenderState(D3DRS_ZENABLE, TRUE);
    dev->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

        // .....


"dev" ist ein vollständiges d3ddevice
"tex1" ist die fehlerfrei geladene cube-textur
"indices" sind die (ja echt) indices der skybox
"skybox" sind die vertices der skybox

die indices und vertices haben alle den richtigen wert

ich habe auch mal versucht eine 2D-textur draufzumappen
das klappt komischerweise

multitexturing, stencil, shader und was es noch alles gibt
sind aus d.h. direct3D läuft mit standarteinstellungen

hat irgenteiner eine idee woran das liegen könnte?

vielen dank im voraus
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

2

23.09.2008, 19:50

Zeig mal deine "Ladefunktion" und die Deklaration von tex1
fka tm

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

23.09.2008, 20:27

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
IDirect3DCubeTexture9*      tex1;

// .....

hr = D3DXCreateCubeTextureFromFile(dev, "EnvMap.dds", &tex1);
if (hr != S_OK)
{
    logger.writestring("D3DXCreateCubeTextureFromFile", __LINE__);
    return false;
}


sollte soweit richtig laden
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

4

23.09.2008, 20:48

mmmh, Texturkoordinaten richtig gesetzt?

Near- und Farplane, FOV bei der Projektionsmatrix ggf. mal ändern:

C-/C++-Quelltext

1
D3DXMatrixPerspectiveFovLH(&projection, D3DX_PI /4, 1024.f / 1280.f, 0.5f, 2000.f);
fka tm

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

5

23.09.2008, 21:20

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
skyboxvertex skybox[] = // nur die positionen setzten

{
    {-1.f,  1.f,  1.f},
    { 1.f,  1.f,  1.f},
    { 1.f,  1.f, -1.f},
    {-1.f,  1.f, -1.f},

    {-1.f, -1.f,  1.f},
    { 1.f, -1.f,  1.f},
    { 1.f, -1.f, -1.f},
    {-1.f, -1.f, -1.f}
};

for (unsigned i = 0; i < 8; ++i)
{
    skybox[i].tx = skybox[i].x; // und die texturoordinaten kopieren

    skybox[i].ty = skybox[i].y;
    skybox[i].tz = skybox[i].z;
}

short indices[] = {7, 3, 0, 4, 7, 0,
                    5, 1, 2,    6, 5, 2,
                    4, 0, 1,    5, 4, 1,
                    6, 2, 3,    7, 6, 3,
                    2, 1, 0,    3, 2, 0,
                    4, 5, 6,    7, 4, 6};


die indices und vertexpositionen sind auch aus dem buch, da liegt der fehler also nicht :(

selbst mit den planes auf 0.001f und 2000.f bringt nichts..
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

6

24.09.2008, 08:09

Wie schauts mit Farboperationen etc. aus?

C-/C++-Quelltext

1
2
3
dev->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
dev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
// usw.
fka tm

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

7

24.09.2008, 12:49

ändert sich nichts. auch mit D3DTOP_SELECTARG1 klappt es nicht
es bleibt weiß.
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

8

24.09.2008, 13:40

ich hab mir mal mit Lock() die daten angeschaut -> kein weiß sondern
die richtige textur. komischerweise war der alphaanteil 0.

alphablending ist aber aus.


// EDIT


kann mir bitte jemand mal die renderfunktion zeigen, mit der das klappt ?
weiß echt nicht wo mein fehler liegen könnte :?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

9

29.09.2008, 12:00

so ich hab mal eine andere textur probiert

=> es klappt (erstellt mit dem dx-texturmaker)

nur mit der textur aus dem buch klappt es nicht.

woran liegt das ?
im beispielprogramm klappt das doch auch

naja es funktioniert :)
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

10

29.09.2008, 12:25

Kann mir nur vorstellen, dass es am Format liegt. D3DFMT_UNKNOWN, wenn du D3DXCreateCubeTextureFromFile verwendest (Davids EnvMap.dds hat D3DFMT_X8R8G8B8).
Nimm lieber D3DXCreateCubeTextureFromFileEx. Dann hast du zwar mehr Parameter zu füllen, aber auch mehr Möglichkeiten.
fka tm

Werbeanzeige