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

31

07.01.2005, 20:54

so langsam verzweifel ich an meinem Schwarzlicht :D

wo kann der Fehler denn liegen, wenn selbst Ambient-Light nicht angezeigt wird und der Raum immer dunkel bleibt? Die Lichtquelle kanns dann ja eigentlich nicht sein... haben die Normalvektoren auch Einfluss auf Ambient-Light?
Aber selbst wenn sie falsch sind... solange es Normalvektoren sind, sollte er (ein evtl falsches) aber dennoch irgendein Licht anzeigen, da Ambient-Light sie ja immer trifft!
Oder kann es damit zusammenhängen dass meine Vertexe keine Farbe haben? (habe diese weggelassen, da ich keinen Sinn mehr in einer Vertex-Farbe sehe, wenn ich eh eine Textur drüber lege)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

32

07.01.2005, 21:44

also wenn du ligthing ausschaltest, dann siehst du alles so wies sein soll!?

stell mal die hintergrundfarbe auf grau oder so, dass du das modell siehst auch wenns schwarz is...

könnte natürlich auch sein, dass sich die kamera im modell befindet und du deswegen nichts siehst ;)

ambientligthing hat nix mit den normalen zu tun an denen kanns hier nicht liegen...

schalt auch den nebel aus, falls der noch an is und poste evtl. mal den code wie er grad is...

viel mehr fällt mir im moment auch nicht ein...

33

07.01.2005, 22:04

Zitat von »"dot"«

also wenn du ligthing ausschaltest, dann siehst du alles so wies sein soll!?
genau... alles wird normal dargestellt, nur halt ohne irgendwelche Lichter

stell mal die hintergrundfarbe auf grau oder so, dass du das modell siehst auch wenns schwarz is...
das hats gebracht: Alle Würfel sind komplett schwarz... kann das mit der Textur zusammenhängen? (es ist die, die beim Beispielprogramm der CD beigelegt war) oder evtl mit der Art wie sie geladen wird?

könnte natürlich auch sein, dass sich die kamera im modell befindet und du deswegen nichts siehst ;)
Kamera ist beweglich... kann also "rausfahren"

ambientligthing hat nix mit den normalen zu tun an denen kanns hier nicht liegen...

schalt auch den nebel aus, falls der noch an is und poste evtl. mal den code wie er grad is...
Code kann ich gleich bringen, wenn das oben nicht weiterhilft

viel mehr fällt mir im moment auch nicht ein...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

34

07.01.2005, 22:06

evtl. stimmen deine texturkoordinaten nicht ( bei einem einfachen würfel eher unwahrscheinlich... )

oder die textur wird nicht gesetzt bzw. konnte nicht geladen werden

oder du hast an den texture stages herumgefummelt oder die textur is in einer falschen stage usw...

oder dein pixel shader hat probleme ;)

35

07.01.2005, 22:11

ich kanns grad nochmal mit den Koordinaten versuchen (weil die durch das Programm absichtlich zufällig gewählt werden sollten), aber eigentlich dürfte dort kein Fehler sein, schließlich werden die Texturen korrekt angezeigt, wenn ich das Licht ausschalte...
mir wird auch kein Fehler ins Log geschrieben oder sonst was...
ich schau mich auch grad mal nach einem anderen Bild um und teste, ob es evtl an der Datei liegt...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

36

07.01.2005, 22:14

???

hmm...

komisches prob, evtl. würd der source doch weiterhefen...

37

07.01.2005, 22:18

ok... hier mal die 3 interessanten Sachen:

ganzes globales Zeug:

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
#include <Windows.h>
#include <TriBase.h>
#include "InitWindow.h"
#include "Direct3DEnum.h"
#include "InitDirect3D.h"
#include "Resource.h"

// ******************************************************************

// Struktur für einen Vertex: Position, Farbe und Texturkoordinaten

struct SVertex
{
    tbVector3           vPosition;  // Position des Vertex

    tbVector3           vNormal;    // Normalvector

    tbVector2           vTexture;   // Texturkoordinaten

    static const DWORD  dwFVF;      // Vertexformat

};

const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;

// ******************************************************************

// Globale Variablen

const int               g_iNumCubes = 2048;             // Anzahl der Würfel

tbVector3               g_vCubeSpeed[g_iNumCubes];      // Geschwindigkeit des Würfels

float                   g_fTime = 0.0f;                 // Zeitzähler

SDirect3DParameters     g_Direct3DParameters;           // Direct3D-Parameter

PDIRECT3DTEXTURE9       g_pTexture = NULL;              // Die Textur

PDIRECT3DVERTEXBUFFER9  g_pVertexBuffer = NULL;         // Vertex-Buffer

PDIRECT3DINDEXBUFFER9   g_pIndexBuffer = NULL;          // Index-Buffer

tbVector3               g_vCameraPosition;              // Die Kameraposition

float                   g_fCameraAngle = 0.0f;          // Drehwinkel der Kamera

float                   g_fFOV = TB_DEG_TO_RAD(90.0f);  // Sichtfeld

SVertex*                g_pVertices;
DWORD                   g_dwFogColor = D3DCOLOR_XRGB(0, 0, 0);  // Die Nebelfarbe

float                   g_FogDensity = 0.005f;
float                   g_fCameraSpeed = 0.0f;

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
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
100
101
102
103
104
105
tbResult Render(float fNumSecsPassed)
{
    HRESULT     hResult;
    float       fAspect;
    tbMatrix    mCamera;
    tbMatrix    mProjection;
    D3DLIGHT9   Light;

    ZeroMemory(&Light, sizeof(D3DLIGHT9));

    Light.Type = D3DLIGHT_POINT;
    Light.Diffuse = tbColor(1.0f, 1.0f, 1.0f);
    Light.Ambient = tbColor(1.0f, 1.0f, 1.0f);
    Light.Specular = tbColor(1.0f, 1.0f, 1.0f);
    Light.Position = tbVector3(0.0f, 0.0f, 20.0f);
    Light.Direction = tbVector3(sinf(fNumSecsPassed * 10), 0.0f, cosf(fNumSecsPassed * 10));
    Light.Range = 999.0f;
    Light.Attenuation0 = 1.0f;
    Light.Attenuation1 = 0.0f;
    Light.Attenuation2 = 0.0f;
    Light.Theta = 30.0f;
    Light.Phi = 40.0f;
    Light.Falloff = 1.0f;

    g_pD3DDevice->SetLight(0, &Light);
    g_pD3DDevice->LightEnable(0, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, tbColor(0.25f, 0.25f, 0.25f));

    // Den Bildpuffer und den Z-Buffer leeren

    if(FAILED(hResult = g_pD3DDevice->Clear(0,
                                            NULL,
                                            D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                                            g_dwFogColor,
                                            1.0f,
                                            0)))
    {
        // Fehler beim Leeren!

        TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
    }

    // Szene beginnen

    g_pD3DDevice->BeginScene();
    
    g_pD3DDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_RANGEFOGENABLE, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_EXP2);
    g_pD3DDevice->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_NONE);
    
    g_pD3DDevice->SetRenderState(D3DRS_FOGCOLOR, g_dwFogColor); 
    g_pD3DDevice->SetRenderState( D3DRS_FOGDENSITY, *( DWORD* )( &g_FogDensity ) );
    

    // ------------------------------------------------------------------


    // Die Kameramatrix erzeugen und einsetzen.

    // Dafür benötigen wir die Kameraposition, den Blickpunkt der Kamera und

    // die lokale y-Achse der Kamera, die normalerweise (0, 1, 0) ist (es sei denn,

    // die Kamera "rollt").

    mCamera = tbMatrixCamera(g_vCameraPosition,
                             g_vCameraPosition + tbVector3(sinf(g_fCameraAngle),
                                                           0.0f,
                                                           cosf(g_fCameraAngle)),
                             tbVector3(0.0f, 1.0f, 0.0f));
    g_pD3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)(&mCamera));

    // Das Bildseitenverhältnis berechnen

    fAspect =   (float)(g_Direct3DParameters.VideoMode.Width)
              / (float)(g_Direct3DParameters.VideoMode.Height);

    // Die Projektionsmatrix erzeugen und einsetzen.

    // Das geschieht hier einmal pro Bild, weil das Sichtfeld variabel ist.

    mProjection = tbMatrixProjection(g_fFOV,    // Sichtfeld

                                     fAspect,   // Bildseitenverhältnis

                                     0.1f,      // Nahe Clipping-Ebene

                                     250.0f);   // Ferne Clipping-Ebene

    g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));

    // ------------------------------------------------------------------


    // Alle Würfel auf einmal zeichnen.

    // Zuerst den Vertex- und den Index-Buffer als Datenquelle aktivieren.

    g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(SVertex));
    g_pD3DDevice->SetIndices(g_pIndexBuffer);

    // Zeichnen!

    hResult = g_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,    // Dreiecksliste

                                                 0,                     // Basisvertexindex

                                                 0,                     // Der kleinste Index

                                                 g_iNumCubes * 8,       // Diff. zw. größtem u. kleinstem Index

                                                 0,                     // Von Anfang an zeichnen

                                                 g_iNumCubes * 12);     // 12 Dreiecke pro Würfel

    if(FAILED(hResult))
    {
        // Fehler beim Zeichnen!

        TB_ERROR_DIRECTX("g_pD3DDevice->DrawIndexedPrimitive", hResult, TB_STOP);
    }

    // Szene beenden

    g_pD3DDevice->EndScene();

    // Der große Moment: den Bildpuffer sichtbar machen

    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

    return TB_OK;
}

InitSzene-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
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
tbResult InitScene()
{
    HRESULT         hResult;
    unsigned short* pusIndices;
    tbVector3       vCubePosition;
    int             iStartVertex;
    int             iStartIndex;



    // Vertexformat setzen

    if(FAILED(hResult = g_pD3DDevice->SetFVF(SVertex::dwFVF)))
    {
        // Fehler beim Setzen des Vertexformats!

        TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR);
    }

    // Culling ausschalten, Dithering aktivieren

    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);

    // Bilineare Texturfilter mit linearem MIP-Mapping

    g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
    g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

    // Die Textur laden

    if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device

                                                    "texture.bmp",      // Dateiname

                                                    D3DX_DEFAULT,       // Breite

                                                    D3DX_DEFAULT,       // Höhe

                                                    D3DX_DEFAULT,       // MIP-Maps

                                                    0,                  // Verwendungszweck

                                                    D3DFMT_UNKNOWN,     // Format

                                                    D3DPOOL_MANAGED,    // Speicherklasse

                                                    D3DX_FILTER_NONE,   // Filter

                                                    D3DX_DEFAULT,       // MIP-Map-Filter

                                                    0,                  // Color-Key

                                                    NULL,               // Unwichtig

                                                    NULL,               // Unwichtig

                                                    &g_pTexture)))      // Die Textur

    {
        // Fehler!

        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx", hResult, TB_ERROR);
    }

    // Und nun die Textur einsetzen

    g_pD3DDevice->SetTexture(0, g_pTexture);

    // ------------------------------------------------------------------


    // Den Vertex-Buffer erstellen. Jeder Würfel benötigt 8 Vertizes.

    // Daher ist die Vertex-Buffer-Größe gleich Anzahl der Würfel mal 8 mal Vertexgröße.

    if(FAILED(hResult = g_pD3DDevice->CreateVertexBuffer(g_iNumCubes * 8 * sizeof(SVertex),
                                                         D3DUSAGE_DYNAMIC,
                                                         SVertex::dwFVF,
                                                         D3DPOOL_DEFAULT,
                                                         &g_pVertexBuffer,
                                                         NULL)))
    {
        // Fehler beim Erstellen des Vertex-Buffers!

        TB_ERROR_DIRECTX("g_pD3DDevice->CreateVertexBuffer", hResult, TB_ERROR);
    }

    // Nun generieren wir den Index-Buffer. Jeder Würfel braucht 36 Indizes.

    // Es wird ein 16-Bit-Index-Buffer verwendet.

    if(FAILED(hResult = g_pD3DDevice->CreateIndexBuffer(g_iNumCubes * 36 * 2,
                                                        0,
                                                        D3DFMT_INDEX16,
                                                        D3DPOOL_MANAGED,
                                                        &g_pIndexBuffer,
                                                        NULL)))
    {
        // Fehler beim Erstellen des Index-Buffers!

        TB_ERROR_DIRECTX("g_pD3DDevice->CreateIndexBuffer", hResult, TB_ERROR);
    }

    // Vertex- und Index-Buffer komplett sperren

    g_pVertexBuffer->Lock(0, 0, (void**)(&g_pVertices), D3DLOCK_NOSYSLOCK);
    g_pIndexBuffer->Lock(0, 0, (void**)(&pusIndices), D3DLOCK_NOSYSLOCK);

    // Nun gehen wir jeden einzelnen Würfel durch.

    for(int iCube = 0; iCube < g_iNumCubes; iCube++)
    {
        // Zufällige Position für diesen Würfel erzeugen

        vCubePosition = tbVector3Random() * tbFloatRandom(20.0f, 250.0f);

        // Zufälliger Bewegungs-Vector des Würfels

        g_vCubeSpeed[iCube] = tbVector3Random();

        // Startvertex und Startindex für diesen Würfel berechnen.

        // Diese Werte beschreiben, an welcher Stelle im Vertex- und Index-Buffer

        // die Daten des aktuellen Würfels beginnen.

        iStartVertex = iCube * 8;
        iStartIndex = iCube * 36;

        // Vertizes für diesen Würfel generieren. Erst die Positionsangaben.

        g_pVertices[iStartVertex + 0].vPosition = vCubePosition + tbVector3(-1.0f,  1.0f, -1.0f);
        g_pVertices[iStartVertex + 1].vPosition = vCubePosition + tbVector3(-1.0f,  1.0f,  1.0f);
        g_pVertices[iStartVertex + 2].vPosition = vCubePosition + tbVector3( 1.0f,  1.0f,  1.0f);
        g_pVertices[iStartVertex + 3].vPosition = vCubePosition + tbVector3( 1.0f,  1.0f, -1.0f);
        g_pVertices[iStartVertex + 4].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f, -1.0f);
        g_pVertices[iStartVertex + 5].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f,  1.0f);
        g_pVertices[iStartVertex + 6].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f,  1.0f);
        g_pVertices[iStartVertex + 7].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f, -1.0f);

        for(int iVertex = iStartVertex; iVertex < iStartVertex + 8; iVertex++)
        {
            // Texturkoordinaten generieren

            g_pVertices[iVertex].vTexture = tbVector2Random();
            g_pVertices[iVertex].vNormal = tbVector3Normalize(g_pVertices[iVertex].vPosition - vCubePosition);
        }

        // Nun die Indizes eintragen. Jeweils drei von ihnen ergeben ein Dreieck.

        int aiIndex[36] = {0, 3, 7,   0, 7, 4,  // Vorderseite

                           2, 1, 5,   2, 5, 6,  // Hinterseite

                           1, 0, 4,   1, 4, 5,  // Linke Seite

                           3, 2, 6,   3, 6, 7,  // Rechte Seite

                           0, 1, 2,   0, 2, 3,  // Oberseite

                           6, 5, 4,   6, 4, 7}; // Unterseite


        // Die 36 Indizes in den Index-Buffer übertragen.

        // Zu jedem Indexwert muss noch der Startvertexwert addiert werden.

        for(int iIndex = 0; iIndex < 36; iIndex++)
        {
            // Index eintragen

            pusIndices[iStartIndex + iIndex] = aiIndex[iIndex] + iStartVertex;
        }
    }

    // Vertex- und Index-Buffer wieder entsperren

    g_pVertexBuffer->Unlock();
    g_pIndexBuffer->Unlock();

    return TB_OK;
}


edit: Move-Funktion pack ich auch nochmal mit rein:

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
tbResult Move(float fNumSecsPassed)
{
    tbVector3 vCameraDirection;
    const int iMaxSpeed = 10;

    // Zeitzähler erhöhen

    g_fTime += fNumSecsPassed;

    // Wenn der Benutzer die Pfeiltaste nach links oder rechts drückt,

    // erhöhen bzw. verringern wir den Drehwinkel der Kamera.

    // Die Kamera soll sich mit 45° pro Sekunde drehen.

    if(GetAsyncKeyState(VK_LEFT)) g_fCameraAngle -= TB_DEG_TO_RAD(45.0f) * fNumSecsPassed;
    if(GetAsyncKeyState(VK_RIGHT)) g_fCameraAngle += TB_DEG_TO_RAD(45.0f) * fNumSecsPassed;

    // Wenn der Benutzer die Pfeiltaste nach oben oder unten drückt,

    // wird die Kamera vor- bzw. zurückbewegt. Dazu addieren wir die

    // Kamerablickrichtung zur Kameraposition bzw. subtrahieren sie.

    // Die Blickrichtung wird mit dem Sinus und dem Kosinus des Drehwinkels

    // der Kamera berechnet. Bewegung ist nur auf der xz-Ebene möglich.

    // Nun berechnen wir die Blickrichtung.

    vCameraDirection = tbVector3(sinf(g_fCameraAngle), 0.0f, cosf(g_fCameraAngle));

    // Geschwindigkeit der Kamera erhöhen / senken -- 10 ist max, -10min

    if(GetAsyncKeyState(VK_UP) && g_fCameraSpeed < iMaxSpeed) g_fCameraSpeed++;
    if(GetAsyncKeyState(VK_DOWN) && g_fCameraSpeed > -iMaxSpeed) g_fCameraSpeed--;

    // neue Geschwindigkeit addieren (negativer Faktor = rückwärts)

    g_vCameraPosition += vCameraDirection * g_fCameraSpeed * fNumSecsPassed;

    // Die Nebelfarbe und Nebeldichte in Abhängigkeit von der Geschwindigkeit

    g_dwFogColor = tbColor(0.0f, g_fCameraSpeed * -1.0f ,g_fCameraSpeed * 1.0f);
    g_FogDensity = 0.005f * (g_fCameraSpeed);

    // Die Tasten "Bild auf" und "Bild ab" verändern das Sichtfeld.

    // So kann man in das Bild "hineinzoomen", mit 15 Grad pro Sekunde.

    if(GetAsyncKeyState(VK_PRIOR)) g_fFOV -= TB_DEG_TO_RAD(15.0f) * fNumSecsPassed;
    if(GetAsyncKeyState(VK_NEXT)) g_fFOV += TB_DEG_TO_RAD(15.0f) * fNumSecsPassed;

    // Das Sichtfeld darf 180° und 0° nicht erreichen.

    if(g_fFOV >= TB_DEG_TO_RAD(180.0f)) g_fFOV = TB_DEG_TO_RAD(179.9f);
    else if(g_fFOV <= TB_DEG_TO_RAD(0.0f)) g_fFOV = TB_DEG_TO_RAD(0.1f);

    //Vertex-Buffer sperren

    g_pVertexBuffer->Lock(0, 0, (void**)(&g_pVertices), D3DLOCK_NOSYSLOCK);

    //die Position jedes Würfels aktualisieren

    for(int iCube = 0; iCube < g_iNumCubes; iCube++)
    {
        int iStartVertex = 8 * iCube;
        tbVector3   vCubePosition;  // Position des Würfels

        tbVector3   vWayToCamera;   // Richtung + Abstand zur Kamera

        float       fCubeSpeed;     // Geschwindigkeit des Würfels

    
        //Position (Mittelpunkt) des Würfels mit Hilfe einer Ecke (1,1,1) berechnen

        vCubePosition = g_pVertices[iStartVertex + 2].vPosition - tbVector3(1.0f, 1.0f, 1.0f);
        
        //Vector vom Würfel zur Kamera

        vWayToCamera = g_vCameraPosition - vCubePosition;

        //Geschwindigkeit des Würfels aus Länge des Richtungsvektors ermitteln

        fCubeSpeed = tbVector3Length(g_vCubeSpeed[iCube]);

        //Vector zur Kamera auf die selbe Länge (Geschwindigkeit) bringen

        vWayToCamera = tbVector3NormalizeEx(vWayToCamera);
        vWayToCamera *= fCubeSpeed;

        //mit Hilfe der Interpolation eine neue Richtung

        g_vCubeSpeed[iCube] = tbVector3InterpolateCoords(g_vCubeSpeed[iCube], vWayToCamera, 0.1f);
        g_vCubeSpeed[iCube] = tbVector3NormalizeEx(g_vCubeSpeed[iCube]);
        g_vCubeSpeed[iCube] *= fCubeSpeed;

        //nun die Position aktualisieren

        g_pVertices[iStartVertex + 0].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed; 
        g_pVertices[iStartVertex + 1].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 2].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 3].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 4].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 5].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 6].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
        g_pVertices[iStartVertex + 7].vPosition += g_vCubeSpeed[iCube] * fNumSecsPassed;
    }

    //Vertex-Buffer wieder freigeben

    g_pVertexBuffer->Unlock();

    return TB_OK;
}

38

08.01.2005, 00:45

Hier nochmal 2 ScreenShots:

Licht an
Licht aus

Kann es evtl sein, dass die Texturen wohl angezeigt werden, aber durch irgend ein Licht total verdunkelt werden (also durch eine falsche Farbangabe oder so)... welche müsste das sein?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

39

08.01.2005, 21:08

wirklich komisch...
schön langsam weis ich auch nichtmehr weiter...

evtl. könnts an den attenuation werten liegen, aber bei attenuation0 = 1.0f; sollte das eigentlich wursch sein

bei punktlicht kannst dir außerdem alles außer

type
diffuse
ambient
specular
position
range
attenuation[n]

sparen

die berechnung der normalen sollte egentlich auch brauchbare ergebnisse liefern ( für würfel zumindest )...

wofür du alphablending einschaltest weis ich zwar auch nicht, aber das sollte eigenlich genauso egal sein


schalt mal alles aus ( nebel, dithering, alphalbending etc. ) und nur licht ein.

wer weis was da los ist ???

40

09.01.2005, 00:50

alles außer Licht ausgeschaltet -> bleibt dunkel ???

evtl liegts an irgendwelchen Projekteinstellungen... oder vieleicht kann jemand mal den Code bei sich testen, ob er dort die selben Ergebnisse erzielt..

Werbeanzeige