DirectX Darstellung ruckelt.
-
moin
ich lade 5 meshes die ich von CAD exportiert, in Blender Importiert und als X-File exportiert habe. die sind zusammen etwa 55MB groß. das kann auch hinkommen das es viele punkte sind. bzw rundungen. (es ist ein Hexapod bein, mit 4 Servos)
ich lade die meshes einmalig in meiner InitGraphics funktion und speicher alle inhalte in einem Struct:
struct lmesh{ LPD3DXMESH mesh; DWORD numMaterials; D3DMATERIAL9* meshMaterials; LPDIRECT3DTEXTURE9* meshTextures; } lmesh[5];
hier einmal die ausgabe funktion:
void render_frame(void){ unsigned long int i, j; for(i = 0; i < 5; i++){ if(data.index[i] == 180) data.dir[i] = -1; if(data.index[i] == 0) data.dir[i] = 1; data.index[i] += data.dir[i]; } d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); d3ddev->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); d3ddev->BeginScene(); D3DXMATRIX matView; // the view transform matrix D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3 (0.0f, 10.0f, 25.0f), // the camera position &D3DXVECTOR3 (0.0f, 0.0f, 0.0f), // the look-at position &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); // the up direction d3ddev->SetTransform(D3DTS_VIEW, &matView); // set the view transform to matView D3DXMATRIX matProjection; D3DXMatrixPerspectiveFovLH (&matProjection, D3DXToRadian(45), (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, 1.0f, 100.0f); d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection); D3DXMATRIX matTranslate[5]; D3DXMATRIX matRotationX[5]; D3DXMATRIX matRotationY[5]; D3DXMATRIX matRotationZ[5]; D3DXMATRIX matScaleRel[5]; for(i = 0; i < 5; i++){ D3DXMatrixRotationX(&matRotationX[i], 0); D3DXMatrixRotationY(&matRotationY[i], 0); D3DXMatrixRotationZ(&matRotationZ[i], D3DXToRadian(90)); D3DXMatrixTranslation(&matTranslate[i], 0.0f, 0.0f, 0.0f); D3DXMatrixScaling(&matScaleRel[i], 0.1f, 0.1f, 0.1f); } //D3DXMatrixRotationZ(&matRotationZ[0], D3DXToRadian(90)); D3DXMatrixTranslation(&matTranslate[0], 15.0f, 0.0f, 0.0f); D3DXMatrixTranslation(&matTranslate[1], 13.0f, -0.4f, 0.0f); D3DXMatrixTranslation(&matTranslate[2], 12.0f, -0.4f, 0.0f); D3DXMatrixTranslation(&matTranslate[3], 10.5f, -0.4f, 0.0f); D3DXMatrixTranslation(&matTranslate[4], 3.7f, -0.4f, 0.0f); D3DXMatrixRotationZ(&matRotationZ[4], D3DXToRadian(data.index[4])); for(j = 0; j < data.meshcount; j++){ d3ddev->SetTransform(D3DTS_WORLD, &(matScaleRel[j] * matRotationX[j] * matRotationY[j] * matRotationZ[j] * matTranslate[j])); for(i = 0; i < lmesh[j].numMaterials; i++){ d3ddev->SetMaterial(&lmesh[j].meshMaterials[i]); //d3ddev->SetTexture(0,&lmesh[j].meshTextures[i]); lmesh[j].mesh->DrawSubset(i); } } d3ddev->EndScene(); d3ddev->Present(NULL, NULL, NULL, NULL); }
ich spiele das ganze jetzt auf meinem Netbook, (AMD Fusion 450) sprich Graka mit CPU mix bei 2x 1,6ghz, ab.
ich durchlaufe ja mit jedem schleifendurchlauf 1 Grad. dennoch brauch der äußere Arm geschätzt 30 sekunden für die 180 grad. sprich 6 frames pro sekunde.
CPU auf 100%.
worran liegt es das es so langsam ist?- Die hochauflösenden Meshes (55MB)
- fehler in der Programmierung?
- Netbook (sprich die geschwindigkeit ist normal für das geforderte und dem geringen core)
-
cl90 schrieb:
worran liegt es das es so langsam ist?
a) Die hochauflösenden Meshes (55MB)
b) fehler in der Programmierung?
c) Netbook (sprich die geschwindigkeit ist normal für das geforderte und dem geringen core)wieso fragst du uns statt es auszuprobieren? ich sage c), weil c statistisch am oeftersten gewinnt. der naechste sagt a, der naechste b und du bist wo du am anfang warst.
probierst du es aus, bist du auf der sicheren seite, also?
a) kleineres mesh testen
b) anderes program ausprobieren
c) andere hardware ausprobieren
-
ich wollte eig nur überprüfen ob ich irgendwo einen fehler in der programmierung habe. irgendwas das nicht sein muss...
ich hab meine frage wohl zu blöd gestellt
sollte ich mir abgewöhnen.