3D Bibliothek: brauche Ideen
-
Hallo, es geht um eine 3D Bibliothek.
Ich programmiere gerade mit DirectX und erstelle eine Bibliothek die Funktioniert soll wie OpenGL.
Ich habe es hinbekommen das dies Funktioniert:
float f[3]={-1.0f, 1.0f, 0.0f}; GX_VECTOR v1 = GX_VECTOR(-1,-1,0); GX_VECTOR v2 = GX_VECTOR( f ); GX_VECTOR v3 = GX_VECTOR( 1, 1,0); gxBegin(GX_TRIANGLESTRIP); gxNormal(0.0f, 0.0f, -1.0f); gxColor(0.2f,0.5f,1.0f); //zwei Dreiecke zeichnen gxVertex(v1); // geht auch gxVertex(v2); // siehe oben gxVertex(v3); gxVertex(-1,-1,0); gxVertex( 1, 1,0); gxVertex( 1,-1,0); gxEnd(); gxPageFlip();
Wenn die Funktion gxVertex() aufrufe wird, werden mit vector.push_back()(STL) die Koordinaten in einem Array gespeichert. Wenn am Ende die Funktion gxEnd() aufgerufen wird wird das Objekt zum Device geschickt.
void gxEnd() { lpDevice->BeginScene(); . . . case SG_TRIANGLE_STRIP: lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_LVERTEX,&vector[0],gxVertexNum,0); . . . lpDevice->EndScene(); }
Und hier habe ich ein Problem. Wenn ich mehrer Objekt haben sollte. Muss ich dies zwischen mehrere Begin und Ends schreiben. Doch jedesmal wird die DirectX Funktion BeginScene und EndScene()aufgerufen. Das kostet Zeit.
Ich möchte das BeginScene und EndScene gerne am Ende benutzen. Am besten in der Funktion gxPageFlip().
Habt ihr ein paar Ideen?
EDIT: Das mit gxPageFip geht auch nicht. Wenn man verschieden Materialen hat geht das wieder nicht.
Egal her mit den Ideen!
[ Dieser Beitrag wurde am 28.02.2003 um 14:21 Uhr von Netzwerk-Latenz editiert. ]
-
Wie wärs mit ner extra (static) Variable die angibt ob schon ein Begin bzw EndScene aufgerufen worden ist in diesem Frame ?
-
Jaaaaa.....Da kommt was.....ich glaube ich weiss wie ich das mache.