Verbesserungsvorschläge
-
Aufbau der 3D Engine
Es ist grundsätzlich so das alle Eingaben in einer Liste gespeichert werden.
Ein Beispiel:
gxLoadIdentity(); gxRotate(angle,rotx,roty,rotz); gxTranslate(5.0f,0.0f, 0.0f); gxBegin(GX_TRIANGLELIST); gxColor(1.0f, .0f, .0f); gxVertex(-1.0f,-1.0f, 0.0f); gxColor( .0f,1.0f, .0f); gxVertex(-1.0f, 1.0f, 0.0f); gxColor( .0f, .0f,1.0f); gxVertex(1.0f,1.0f, 0.0f); gxEnd();
Nicht das ihr mich falsch versteht. Die Engine basiert auf DirectX.
Diese Anweisungen haben noch keinen Einfluss. Erst durch den Aufruf der Funktion gxFlush() wird alles gezeichnet.
Das Problem
while (bRunning) { gxClear(GX_COLOR_BUFFER_BIT|GX_DEPTH_BUFFER_BIT); gxLoadIdentity(); gxRotate(angle,rotx,roty,rotz); gxTranslate(0.0f,0.0f, 100.0f); gxBegin(GX_TRIANGLELIST); gxColor(.0f,0.4f,.0f); for(int i=0; i<g_cnt; i++) { gxVertex(myVertex[i].x,myVertex[i].y,myVertex[i].z); } gxEnd(); /* 3DAktionen ausführen */ gxFlush(); gxColor(0,1,0); gxPrint(10,10,"gxRotate(%f,%f,%f,%f)",angle,rotx,roty,rotz); /*Backbuffer flippen*/ gxPageFlip(); /* * Wieder Windowszeug */ if(GetMessage(&message,NULL,NULL,NULL)) { TranslateMessage(&message); DispatchMessage(&message); }//GetMessage }
Nun ist es so das nch jedem Aufruf der Funktion gxFlush() die Liste gelöscht wird und in der Schleife erneut gefüllt wird. Das kostet jedoch Zeit. Warum jedesmal die Vertices angeben wenn diese sch nicht ändern?
Was ich von euch wissen will:
- Wie findet ihr die Idee
- Welche Optimierungsmöglichkeiten gibt es
- Was würdet ihr anders machenDanke
PS: Benutzt wird DirectX Version 7
-
Könnstest du nicht einfach die Adresse und die Größe des myVertex arrays an gx übergeben? Oder muss das genau wie in OpenGL aussehen?
-
Das könnte man machen.
Was haltet ihr von einem Vertexbuffer. Was spricht dagegen es damit zu machen oder ohne Vertexbuffer.
Gibt es einen Grund es ohne VB zu realisieren?PS: Zur Zeit mach ich es ohne VB
PSS: Nein es nicht genau wie OpenGL sein. Ziel ist eine einfach zu bedienende Schnittstelle zu schaffen.