Eerst eens die code:
Dit stukje code moet een OBJ-bestand, tot nu toe alleen met triangles en vertices met deze FVF:
... importeren. En dat doet 'ie perfect:

Maar het probleem is dat er volkomen niets op het scherm komt als ik hem in de buffer laad:
... en zo vanuit de Scene teken:
Wel met meesterlijke framerate trouwens, dus er is gewoon niets (home-made tellertje FTW):

Maar ik heb dus geen flauw idee wat ik verkeerd doe. Misschien heeft er iemand een idee?
C++:
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
| int numverts,numfaces = 0; char str; char currentregel[256]; int i1,i2,i3 = 0; float v1,v2,v3 = 0.0f; std::ifstream fileStream("box.obj",std::ifstream::in); while(!fileStream.eof()) { fileStream.getline(currentregel,255); if(currentregel[0] == '#') continue; if(currentregel[0] == 'v' && currentregel[1] == ' ') { numverts++; } else if(currentregel[0] == 'f' && currentregel[1] == ' ') { numfaces++; } } CUSTOMVERTEX *objvertex = new CUSTOMVERTEX[numverts]; short *objface = new short[3*numfaces]; int curvert = 0; int curface = 0; std::ifstream fileStream2("box.obj",std::ifstream::in); while(!fileStream2.eof()) { fileStream2.getline(currentregel,255); std::stringstream ss; ss << currentregel; if(currentregel[0] == '#') continue; if(currentregel[0] == 'v' && currentregel[1] == ' ') { ss >> str >> v1 >> v2 >> v3; objvertex[curvert].x = v1; objvertex[curvert].y = v2; objvertex[curvert].z = v3; objvertex[curvert].NORMAL.x = 1.0f; // van later zorg, objvertex[curvert].NORMAL.y = 1.0f; // maar zo wijzen te tenminste objvertex[curvert].NORMAL.z = 1.0f; // naar de camera curvert++; } else if(currentregel[0] == 'f' && currentregel[1] == ' ') { ss >> str >> i1 >> i2 >> i3; objface[curface+0] = i1; objface[curface+1] = i2; objface[curface+2] = i3; curface+=3; } } // Debugprut cout << numverts << " vertices:\n"; for(int a = 0;a<numverts;a++) { cout << objvertex[a].x << " " << objvertex[a].y << " " << objvertex[a].z << "\n"; } cout << numfaces << " faces:\n"; for(int a = 0;a<3*numfaces;a+=3) { cout << objface[a] << " " << objface[a+1] << " " << objface[a+2] << "\n"; } |
Dit stukje code moet een OBJ-bestand, tot nu toe alleen met triangles en vertices met deze FVF:
C++:
1
| #define CUSTOMFVF (D3DFVF_XYZ|D3DFVF_NORMAL) |
... importeren. En dat doet 'ie perfect:

Maar het probleem is dat er volkomen niets op het scherm komt als ik hem in de buffer laad:
C++:
1
2
3
4
5
6
7
8
9
10
| VOID* pVoid; d3ddev->CreateVertexBuffer(sizeof(objvertex)*sizeof(CUSTOMVERTEX),0,CUSTOMFVF,D3DPOOL_MANAGED,&v_buffer,NULL); v_buffer->Lock(0, 0, (void**)&pVoid, 0); memcpy(pVoid, objvertex, sizeof(objvertex)); v_buffer->Unlock(); d3ddev->CreateIndexBuffer(sizeof(objface)*sizeof(short),0,D3DFMT_INDEX16,D3DPOOL_MANAGED,&i_buffer,NULL); i_buffer->Lock(0, 0, (void**)&pVoid, 0); memcpy(pVoid, objface, sizeof(objface)); i_buffer->Unlock(); |
... en zo vanuit de Scene teken:
C++:
1
2
3
| d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX)); d3ddev->SetIndices(i_buffer); d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, numverts, 0, numfaces); |
Wel met meesterlijke framerate trouwens, dus er is gewoon niets (home-made tellertje FTW):

Maar ik heb dus geen flauw idee wat ik verkeerd doe. Misschien heeft er iemand een idee?
[ Voor 7% gewijzigd door Orwell op 14-09-2010 19:30 ]