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

01.02.2010, 23:21

HILFE bei Kapitel 2 03-Das erste Dreieck

servus habe folgendes prog geschrieben. compiler gibt keine fehler aber wenn ich es start kommt nur der bildschirm mit den optionen (fenstergröße,Kantenglättung...) und danach nix mehr.Hier der Code:

Quellcode

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
#include<windows.h>
#include<tribase.h>
#include<d3d9.h>
#include"InitWindow.h"
#include"Direct3DEnum.h"
#include"InitDirect3D.h"
#include"Allgemeines.h"


HRESULT hResult;
float   g_fTime = 0.0f;         // Zeitzähler
struct SVertex
{
    tbVector3           vPosition;  // Position des Vertex
    DWORD               dwColor;    // Farbe des Vertex
    static const DWORD  dwFVF;      // Vertexformat (statisch)
};

const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
SVertex g_aVertex[3];

tbResult InitScene()
{
    
    hResult=g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE,TRUE);

            SVertex g_aVertex[3];
    g_aVertex[0].vPosition=tbVector3(0.0f,1.0f,0.0f);
    g_aVertex[1].vPosition=tbVector3(1.0f,-1.0f,0.0f);
    g_aVertex[2].vPosition=tbVector3(-1.0f,-1.0f,0.0f);
    g_aVertex[0].dwColor=tbColor(1.0f,0.0f,0.0f);
    g_aVertex[1].dwColor=tbColor(0.0f,1.0f,0.0f);
    g_aVertex[2].dwColor=tbColor(0.0f,0.0f,1.0f);



    return TB_OK;
}



tbResult Render(float fNumSecsPassed)
{   
    g_fTime+=fNumSecsPassed;
    tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(90.0f*g_fTime)));
    tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f,0.0f,2.0f)));
    tbMatrix mWorld(mRotation*mTranslation);
    g_pD3DDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&mWorld));
    hResult=g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,63),1.0f,0);
    g_pD3DDevice->BeginScene();
    hResult=g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_aVertex,sizeof(SVertex));
    g_pD3DDevice->EndScene();
    g_pD3DDevice->Present(NULL,NULL,NULL,NULL);
    
    return TB_OK;
}

tbResult Move(float fNumSecsPassed)
{
    g_fTime+=fNumSecsPassed;
    

    return TB_OK;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    

    
    tbInit();

    SDirect3DParameters Direct3DParameters;
    tbResult Result=GetDirect3DParameters(&Direct3DParameters);

    float fAspect=(float)(Direct3DParameters.VideoMode.Width)/(float)(Direct3DParameters.VideoMode.Height);
    tbMatrix mProjection=tbMatrixProjection(TB_DEG_TO_RAD(90.0f),fAspect,0.1f,100.0f);
    g_pD3DDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)(&mProjection));


    InitWindow(Direct3DParameters.VideoMode.Width,Direct3DParameters.VideoMode.Height,"(c)Fabian Keilbach 2010",NULL);
    InitDirect3D(&Direct3DParameters,g_hWindow);
    InitScene();


    tbDoMessageLoop(Render,Move);
    ExitDirect3D();
    ExitWindow();
    tbExit();



    return 0;
}

thx

2

02.02.2010, 13:16

Geh mal mit dem Debugger durch, an welcher Stelle er genau abstürtzt.

3

02.02.2010, 14:05

Du kannst das d3d device nicht aufrufen wenn direct3d noch nicht initialisiert wurde
Das
g_pD3DDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)(&mProjection));
muss hinter
initD3D(...)
Metal ist keine Musik sondern eine Religion.

4

02.02.2010, 16:19

thx jetzt kommt zwar das fenster wie gewünscht aber kein dreieck^^
es bleibt einfach leer

5

02.02.2010, 16:21

Probier mal mWorld = Translation*Rotation und nicht ()(Ich weiß jetzt nicht ob das das selbe ist aber Proieren solltest dus)
Metal ist keine Musik sondern eine Religion.

6

02.02.2010, 16:33

Wenn ich das richtig sehe deklarierst du g_aVertex doppelt. Einmal global und einmal in der InitScene. Nimm das in der InitScene mal raus und weise da nur die Werte zu.

7

02.02.2010, 17:34

ja das wars (weis nich warum ich es 2 mal gemacht hab)
wenn man es in der funktion rausmacht gehts thz für die antwort(en) :)

Werbeanzeige