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

1

05.04.2005, 14:47

Wo bleibt das Licht?

Hallo zusammen. Ich bin bei Davids Buch gerade bei Beleuchtung. Dazu hab ich mir in Blender eine Taschenlampe gemodelt und dann als x-File exportiert. Dann hab ich noch ne Lichtquelle mit D3DLIGHT9 gesetzt und es hat Funktioniert.
Spaßeshalber hab ich mir dann noch ein Quader mit Blender gemacht und in meinem Prog durch das Taschenlampenmodel ersetzt. Und dann blieb alles dunkel. Wieso???

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

2

05.04.2005, 14:55

Ist doch klar, ein Quader ist eben keine Lichtquelle. Ein Taschenlampe sehr wohl ;)

Vielleicht solltest du mal ein bisschen Quellcode posten, damit man dir weiterhelfen kann.

3

05.04.2005, 15:26

Ich hab hier mal die Render-, Move-, und InitScene-Funktionen. Aber die Taschenlampe ist ja auch nur ein Model, wie der Quader. Die rotiert dann halt ein bisschen rum und wird vom Spotlicht beleuchtet. Die ist ja nicht die Lichtquelle.

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
91
92
93
94
95
96
97
98
99
tbResult Render(float fTimePassed)
{
    HRESULT hResult;
    tbMatrix mWorld;
    D3DLIGHT9 PointLight;
    D3DMATERIAL9 Material;
    g_pD3DDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)&mWorld);
    if (FAILED(hResult=g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                D3DCOLOR_XRGB(50,50,100),1,0)))
    {
        TB_ERROR_DIRECTX("g_pD3DDevice->Clear",hResult,TB_STOP);
    }
    g_pD3DDevice->BeginScene();
    ZeroMemory(&PointLight, sizeof(D3DLIGHT9));
    PointLight.Type         = D3DLIGHT_SPOT;                // Punktlicht

    PointLight.Diffuse      =   tbColor(1.0f, 1.0f, 1.0f);  // Streufarbe

    PointLight.Ambient      =   tbColor(1.0f, 1.0f, 1.0f);  // Hintergrundfarbe

    PointLight.Specular     =   tbColor(1.0f, 1.0f, 1.0f);  // Glanzfarbe

    PointLight.Position     = tbVector3(0.0f, 0.0f, 0.0f);  // Position

    PointLight.Range        = 1000.0f;                      // 1000 Einheiten Reichweite

    PointLight.Attenuation0 = 0.0f;                         // Lichtabschwächung

    PointLight.Attenuation1 = 0.025f;                       // ...

    PointLight.Attenuation2 = 0.0f;
    PointLight.Direction    = tbVector3(0.0f,0.0f,1.0f);
    PointLight.Theta        = TB_DEG_TO_RAD(10.0f);
    PointLight.Phi          = TB_DEG_TO_RAD(20.0f);
      // Globales schwaches rotes Hintergrundlicht einstellen

    //g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, tbColor(0.0f, 0.0f, 0.25.0f));


    // Licht einsetzen und aktivieren

    g_pD3DDevice->SetLight(0, &PointLight);
    g_pD3DDevice->LightEnable(0, TRUE);
    
    Material.Diffuse    = tbColor(0.75f,0.75f,0.75f);   // Streufarbe

    Material.Ambient    = tbColor(0.25f,0.25f,0.25f);   // Hintergrundfarbe

    Material.Emissive   = tbColor( 0.5f, 0.5f, 0.0f);   // Eigenfarbe

    Material.Specular   = tbColor(0.25f,0.25f,0.25f);   // Glanzfarbe

    Material.Power      = 50.0f;                        // Glanzfaktor

        
    // Das Material einsetzen

    g_pD3DDevice->SetMaterial(&Material);
    //Rotierende Kugel zeichnen

    mWorld= tbMatrixRotationX(TB_DEG_TO_RAD(g_fTime*90.0f)) *
            tbMatrixTranslation(tbVector3(0.0f,0.0f,4.0f));
    g_pD3DDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)&mWorld);
    g_pD3DDevice->SetTexture(0,g_pTexture);
    g_pBoxModel->DrawSubset(0);

    /*mWorld= tbMatrixRotation(TB_DEG_TO_RAD(g_fTime*90.0f)) *
            tbMatrixTranslation(PointLight.Position-1.0f);
    g_pD3DDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)&mWorld);
    Material.Diffuse    = tbColor(0.0f,0.0f,1.0f);  // Streufarbe
    Material.Ambient    = tbColor(0.0f,0.0f,1.0f);  // Hintergrundfarbe
    Material.Emissive   = tbColor(0.0f,0.0f,1.0f);  // Eigenfarbe
    g_pD3DDevice->SetMaterial(&Material);
    g_pPocketLightModel->DrawSubset(0);*/

    g_pD3DDevice->EndScene();

    g_pD3DDevice->Present(NULL,NULL,NULL,NULL);
    
    return TB_OK;
}

tbResult Move(float fTimePassed)
{
    g_fTime+=fTimePassed;
    return TB_OK;
}

tbResult InitScene()
{
    HRESULT hResult;
    float fAspect=(float)(g_Direct3DParameters.VideoMode.Width) / (float)(g_Direct3DParameters.VideoMode.Height);
    tbMatrix mProjection=tbMatrixProjection(TB_DEG_TO_RAD(90.0f),fAspect,0.1f,100.0f);
    g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
    g_pD3DDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)&mProjection);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING,TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_SPECULARENABLE,TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE,TRUE);
    if (FAILED(hResult=D3DXCreateTextureFromFileEx(g_pD3DDevice,"BMP\\bolts.bmp",D3DX_DEFAULT,          
                        D3DX_DEFAULT,D3DX_DEFAULT,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,
                        D3DX_FILTER_NONE,D3DX_DEFAULT,0,NULL,NULL,&g_pTexture)))
    {
        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx",hResult,TB_STOP);
    }
    if (FAILED(hResult=D3DXLoadMeshFromX("Pocketlight.x",D3DXMESH_MANAGED,g_pD3DDevice,
                                            NULL,NULL,NULL,NULL,&g_pPocketLightModel)))
    {
        TB_ERROR_DIRECTX("D3DXLoadMeshFromX",hResult,TB_STOP);
    }
    if (FAILED(hResult=D3DXLoadMeshFromX("Test2.x",D3DXMESH_MANAGED,g_pD3DDevice,
                                            NULL,NULL,NULL,NULL,&g_pBoxModel)))
    {
        TB_ERROR_DIRECTX("D3DXLoadMeshFromX",hResult,TB_STOP);
    }
    return TB_OK;
}

4

06.04.2005, 15:24

Hallo? Kann mir denn keiner helfen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

06.04.2005, 15:26

also das mit der taschenlampe war sicher nicht ganz ernst gemeint ;)

evtl. stimmt was mit deinen normalen nicht!?

du verwendest zum testen ein spotlight, was nicht zu empfehlen is, da man damit gern mal an dingen vorbeileuchtet etc...

6

06.04.2005, 20:50

Ich hab das Problem gelöst. Ich hatte in Blender bei der Box zu wenig Faces. Demnach gab's zu wenig Normalenvektoren. Trotzdem danke.

Werbeanzeige