Verträgt DX keine 100 Vertizen?
-
Moin,
Ich wollte, wie in einem Tutorial beschrieben, ein kleines Zufallsterrain erstellen, dazu benutze ich folgende Klasse. Sobald ich nach dem Aufrufen von Init nocheinmal auf den d3ddevice zugreife beendet sich das Programm.
#include <windows.h> #include <d3d8.h> // Headerdatei fuer Direct3D #include <d3dx8.h> #include "Direct3D.h" #include "CVertex_Object.h" class CTerrain { public: TVertex v[101]; LPDIRECT3DVERTEXBUFFER8 D3D_VertexBuffer; void Init(DX_Object dd_obj) { ZeroMemory(&v, sizeof(v)); D3D_VertexBuffer = NULL; float x, y; x = y = NULL; int i = 0; for(x = 0.1f; x < 1.1f; x = x + 0.1f) { for(y = 0.1f; y < 1.1f; y = y + 0.1f) { if(i >= 100) { break; } v[i].position.x = x; v[i].position.y = y; v[i].position.z = 0; v[i].color = 0xFF00FF00; i++; } } dd_obj.lpD3DDevice->CreateVertexBuffer(i*sizeof(TVertex),0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &D3D_VertexBuffer); D3D_VertexBuffer->Lock(0, sizeof(v), (BYTE**)&pVertex, 0); memcpy(&pVertex, &v, sizeof(v)); D3D_VertexBuffer->Unlock(); } private: VOID *pVertex; };
Ich verstehe nicht, wieso nach dem Aufrufen von Init Funktionen wie CreateTextureFromFile oder Draw etc. die etwas mit dem Device zu tun haben, nur noch das Beenden des Programms zur Folge haben.
freak2
-
DX verträgt 100 Vertizen.
-
Echt ?
Cool dann cheatet mein DX
Ich render mindestens 10000 und das geht Perfekt.
-
Ich glaube, dass der zweite Parameter der Lock-Methode falsch von Dir ausgefüllt wurde. Guck in der Dokumentation nach...
-
furbolg schrieb:
Echt ?
Cool dann cheatet mein DX
Ich render mindestens 10000 und das geht Perfekt.Verzichte bitte auf wahrnehmungsveränderte Mittel.
-
stimmt bei Lock beim 2. Parameter muss hin : sizeof(pVertex)
-
verlesen
-
Nee, war schon OK, hab ich auch vertan
-
Hmm nein eigentlich ist Parameter 2 falsch. Bei mir muss ich sizeof(Pointer) machen, auch in jedem Tutorial das ich gesehen habe. Kannst ja mal probieren, vielleicht liegts auch daran das dein Device überhaupt nicht erstellt wird oder der VB. (ich mach immer vor "CreateVertexBuffer(....&m_pVB);" ein "m_pVB = NULL;" hin, hab ich bis jetzt auch überall gesehen, kann sein das es nich braucht aber kannst ja mal probieren)
//Edit
Vergiss das mit dem 2. Parameter, mir is eingefallen das man auch nur bestimmte Bereich locken kann ..
-
sizeof(Pointer) ist Unfug, denn man muss ja die Anzahl der zu sperrenden Bytes angeben, und ein Pointer ist hier normalerweise immer 32 Bits groß. sizeof(Array) ist schon richtig.
-
Jo jetz gehts
Egal dauert nich lang dann kommt nächstes ProblemDanke!