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

21

29.08.2010, 15:01

Dunkelblau ist die Clear-Farbe des Backbuffers.

Denke, das Draw-Problem hängt mit den Vertices, der Vertexstruktur und/oder des FVF zusammen.
Schau dir halt das Original-Beispiel nochmals an!?

Würde trotzdem gerne mal sehen, was du da fabrizierst. ;)
fka tm

mac1268

Frischling

  • »mac1268« ist der Autor dieses Themas

Beiträge: 56

Wohnort: Wien

Beruf: /

  • Private Nachricht senden

22

29.08.2010, 15:53

Finde keinen fehler

Ich find nix aber ich hab mit der videomodi experimentiert und bei ner höheren auflösung ist es nur noch ein fenster (=

ich schick dir hier nochmal den code:

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
#include <iostream> 
#include <Windows.h> 
#include <D3D10.h> 
#include "TriBase.h" 
#include "tbVector3.h" 
#include "tbMatrix.h" 
#include "tbPlane.h" 
#include "InitWindow.h" 
#include "Direct3DEnum.h" 
#include "InitDirect3D.h" 
  
float g_fTime=0; 

struct SVertex 
{ 
tbVector3 vPosition; 
DWORD dwColor; 
}; 

SVertex g_aDreieckVertex [3]; 

tbResult InitScene() 
{ 
HRESULT hResult; 
if (FAILED(hResult = g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE))) 
{ 
TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); 
} 

g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); 
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, FALSE); 
g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE,TRUE); 
return TB_OK; 
} 

tbResult Render (float NumSecsPassed) 
{ 
HRESULT hResult; 
tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f))); 
tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f))); 

tbMatrix mWorld (mRotation * mTranslation); 
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*) (&mWorld));
if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 63), 1.0f, 0))) 
{ 
TB_ERROR_DIRECTX("d_pD3DDevice->clear", hResult, TB_STOP); 
} 

g_pD3DDevice->BeginScene(); 
if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, g_aDreieckVertex, sizeof (SVertex)))) 
{ 
TB_ERROR_DIRECTX("g_pD3DDevice->Draw", hResult, TB_STOP); 
} 

g_pD3DDevice->EndScene(); 
g_pD3DDevice->Present(NULL ,NULL, NULL, NULL); 
  
 return TB_OK; 
} 
tbResult Move (float NumSecsPassed) 
{ 
g_fTime += NumSecsPassed; 
return TB_OK; 
} 
int WINAPI WinMain (HINSTANCE hInstance, 
HINSTANCE hPrevInstance,char*pcCmdLine,int iShowCmd) 
{ 

tbInit (); 
SDirect3DParameters Direct3DParameters; 

tbResult Result = GetDirect3DParameters(&Direct3DParameters);if (Result == TB_ERROR) 
{ 
MessageBox (NULL, "Es ist ein fehler aufgetreten!", "Fehler!", MB_OK | MB_ICONWARNING); 
tbExit (); 
return 1; 
}else if (Result == TB_CANCELED) 
{ 
tbExit (); 
return 0; 
} 
if(InitWindow(Direct3DParameters.VideoMode.Width, 
Direct3DParameters.VideoMode.Height,"Programm", 
NULL)) 
{ 
MessageBox (NULL, "es ist ein fehler aufgetreten!", "Fehler", MB_OK | MB_ICONWARNING); 
tbExit (); 
return 1; 
} 
if(InitDirect3D(&Direct3DParameters, g_hWindow)) 
{ 
MessageBox(NULL, "Es ist ein Fehler aufgetreten!", "Fehler!", MB_OK | MB_ICONWARNING); 
tbExit (); 
return 1; 
} 
float fAspect = (float)(Direct3DParameters.VideoMode.Width)/(float)(Direct3DParameters.VideoMode.Height); 
tbMatrix mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f), 
fAspect, 
0.1, 
100.0f); 

g_aDreieckVertex[0].vPosition = tbVector3(0.0f, 1.0f, 0.0f); 
g_aDreieckVertex[1].vPosition = tbVector3(1.0f, -1.0f, 0.0f); 
g_aDreieckVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f); 
g_aDreieckVertex[0].dwColor = tbColor(1.0f, 0.0f, 0.0f); 
g_aDreieckVertex[1].dwColor = tbColor(0.0f, 1.0f, 0.0f); 
g_aDreieckVertex[2].dwColor = tbColor(0.0f, 0.0f, 1.0f); 
tbDoMessageLoop (Render, Move); 
ExitDirect3D (); 
ExitWindow (); 
tbExit();return 0; 
}


LG

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

29.08.2010, 17:11

Wenn du deinen Code einrücken würdest (wie schon einmal vorgeschlagen), würde man da auch eher und vor allen schneller durchsteigen. Wäre jedenfalls sehr entgegen kommend von dir ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

24

29.08.2010, 17:23

So wie ich es sehe, vergisst du tbInitScene aufzurufen. Dadurch wird auch IDirect3DDevice9::SetFvF nie aufgerufen. Falls du es doch aufrufst dann sorry, ist schwer in dein Code durchzublicken

Mfg Male

25

29.08.2010, 17:51

OMG!

Du hast recht Male!

InitScene btw., ohne "tb" ...

Ein Grund mehr, Code anständig zu formatieren :rolleyes:
fka tm

mac1268

Frischling

  • »mac1268« ist der Autor dieses Themas

Beiträge: 56

Wohnort: Wien

Beruf: /

  • Private Nachricht senden

26

29.08.2010, 18:28

UPS!!!! Doch:

Ich hab mal meinen peinlichen fehler ausgebessert (das soll nach tbInit aufgerufen werden oder?) Doch wenn ichs ausführen will kommt ein fenster in dem steht: Unbehandelte Ausnahme bei 0x00e673c7 in win32.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. und er zeigt in die zeile:

C-/C++-Quelltext

1
2
3
if (FAILED(hResult = g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE))) 
{TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); 
}

LG und herzlichen dank
Ps.: Ich habe schonmal gesagt das mein code im original NICHT SO AUSCHAUT! Durchs kopieren wird der "gestaucht". k.A wieso

27

29.08.2010, 18:32

Aufruf nach InitDirectX....

Kann schon sein, dass der Code im Original anders aussieht, aber etwas verschönern mit dem Editor hier sollte schon drin sein. ;)
fka tm

mac1268

Frischling

  • »mac1268« ist der Autor dieses Themas

Beiträge: 56

Wohnort: Wien

Beruf: /

  • Private Nachricht senden

28

29.08.2010, 18:36

Sry leute

ich seh immer noch kein dreieck

LG

29

29.08.2010, 18:48

Hab den Code mal auf meinem Rechner getestet.

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
#include <iostream> 
#include <Windows.h> 
#include <D3D9.h> 
#include <TriBase.h> 
#include "D:\_DEVELOP\CPP\TriBase\Allgemeines\InitWindow.h" 
#include "D:\_DEVELOP\CPP\TriBase\Allgemeines\Direct3DEnum.h" 
#include "D:\_DEVELOP\CPP\TriBase\Allgemeines\InitDirect3D.h" 

float g_fTime = 0; 

struct SVertex 
{ 
    tbVector3 vPosition; 
    DWORD dwColor; 
}; 

SVertex g_aDreieckVertex[3]; 

tbResult InitScene() 
{ 
    HRESULT hResult; 
    if (FAILED(hResult = g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE))) 
    { 
    TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); 
    } 

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

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

    return TB_OK; 
} 

tbResult Render (float NumSecsPassed) 
{ 
    HRESULT hResult; 

    tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f))); 
    tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 1.0f))); 

    tbMatrix mWorld (mRotation * mTranslation); 
    g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*) (&mWorld));

    if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 63), 1.0f, 0))) 
    { 
        TB_ERROR_DIRECTX("d_pD3DDevice->clear", hResult, TB_STOP); 
    } 

    g_pD3DDevice->BeginScene(); 

    hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, g_aDreieckVertex, sizeof(SVertex)); 

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

    return TB_OK; 
} 

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,char*pcCmdLine,int iShowCmd) 
{ 

    tbInit (); 

    SDirect3DParameters Direct3DParameters; 

    tbResult Result = GetDirect3DParameters(&Direct3DParameters);
    if (Result == TB_ERROR) 
    { 
        MessageBox (NULL, "Es ist ein fehler aufgetreten!", "Fehler!", MB_OK | MB_ICONWARNING); 
        tbExit (); 
        return 1; 
    }
    else if (Result == TB_CANCELED) 
    { 
        tbExit (); 
        return 0; 
    } 

    if(InitWindow(Direct3DParameters.VideoMode.Width, Direct3DParameters.VideoMode.Height,"Programm", NULL)) 
    { 
        MessageBox (NULL, "es ist ein fehler aufgetreten!", "Fehler", MB_OK | MB_ICONWARNING); 
        tbExit (); 
        return 1; 
    } 

    if(InitDirect3D(&Direct3DParameters, g_hWindow)) 
    { 
        MessageBox(NULL, "Es ist ein Fehler aufgetreten!", "Fehler!", MB_OK | MB_ICONWARNING); 
        tbExit (); 
        return 1; 
    } 

    float fAspect = (float)(Direct3DParameters.VideoMode.Width)/(float)(Direct3DParameters.VideoMode.Height); 
    tbMatrix mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f),fAspect,0.1, 100.0f); 

    InitScene(); 

    tbDoMessageLoop (Render, Move); 

    ExitDirect3D (); 

    ExitWindow (); 

    tbExit();
    
    return 0; 
}


Code 1zu1 gepastet, btw.. ;)

Äh, bevor ich's vergesse, Beweisstück A:

fka tm

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrikkieMikkie« (29.08.2010, 18:55)


mac1268

Frischling

  • »mac1268« ist der Autor dieses Themas

Beiträge: 56

Wohnort: Wien

Beruf: /

  • Private Nachricht senden

30

30.08.2010, 11:23

Okay jz passts

Ich hab n paar fragen:

1. Wieso wechselt das ding die farbe (Ich erkenn im code nix was das bewerkstelligt).

2. Wieso ist es so groß und wieso ist es ein rechtwinkliges. Im buch is das ein gleichseitiges ?(

3. Nei spielen muss es doch dann millionen ounkte geben?! Is das so oder kommen da noch tricks. okay du wirst berechtigter weise sagen LIES DAS BUCH XD doch ich halt neugirig. musst auf die frage nat antworten ;)

LG

Werbeanzeige