ent_buffers(ENTITY* ent, var num, var lod, void** ppVerts, void** ppTris, void** ppAttribs);
Liefert den Vertex-, Index- und Attribut-Buffer der Entity-Mesh zurück. Die Buffer lassen sich zum Lesen oder Verändern der Entity-Mesh auf einem niedrigeren Level als mit ent_setvertex verwenden.
Parameter:
ent - Modell-, Terrain- oder WMB-Entity-Pointer; oder level_ent für Level-Blocks.
num - Nummer des Terrain-Chunks oder Level-Blocks, beginnend mit 0.
lod - Nummer des Lod-Schrittes für die Mesh, 0..3.
ppVerts - Pointer auf einen D3DVERTEX*-Pointer, der auf den Vertex-Buffer der Mesh gesetzt ist.
ppTris - Pointer auf einen short*-Pointer, der auf den Dreiecksbuffer der Mesh gesetzt ist; oder NULL.
ppAttribs - Pointer auf einen long*-Pointer, der auf den Attribut-Buffer der Mesh gesetzt ist; oder NULL.
Rückgabewerte
0
wenn die Pointer nicht gesetzt werden konnten, ansonsten die Nummer der Dreiecke der Mesh.
Geschwindigkeit:
Mittel
Version
A7.79 LC
Bemerkungen:
- Der Vertex-Buffer ist eine Liste von D3DVERTEX-Strukten mit einer Größe von num_vertices*sizeof(D3DVERTEX). Die Anzahl von Vertices ist ent_status(ent,1) für ein Modell sowie die maximale Anzahl aus dem Dreiecksbuffer für Level-Blocks oder Multi-Mesch-Entities. Beachten Sie, dass D3DVERTEX DirectX-Koordinaten benutzt wobei y- und z-Achse vertauscht sind. Das Format D3DVERTEX wird im Shaderkapitel beschrieben. Definiert ist dieses Format in der Datei atypes.h im lite-C-include-Verzeichnis.
- Der Dreiecksbuffer ist eine Liste von Dreiecken, von denen jedes aus den 3 Index-Nummern der Eckvertices besteht und (bei der Hauptmesh) eine Größe von num_triangles*3*sizeof(short) hat. Die Anzahl von Dreiecken ist ent_status(ent,4) oder der Wert, der von ent_buffers für Levelblocks oder Multi-Mesh-Entities zurückgeliefert wird.
- Der Attribut-Buffer enthält die Mesh-Untermengennummer (d.h. beginnend mit 0 die Nummer der Skin, die dem Dreieck zugewiesen ist) eines jeden Dreiecks und hat die Größe von num_triangles*sizeof(long).
- Um die Buffer zurückzuholen, ist die Entity-Mesh intern verriegelt. Am Ende des Framezyklus´ wird sie automatisch entriegelt. Daher bleiben die Buffer nur mit zum nächsten Framezyklus gültig. Werden sie erneut gebraucht, müssen die Buffer mit einem neuen ent_buffers()-Aufruf nochmal zurückgeholt werden.
- Die Vertex- und Dreiecksbuffer lassen sich auch zurückholen wenn die Engine ohne ein DirectX-Gerät gestartet wurde; beispielsweise im eigenständigen Server-Modus.
Beispiel (lite-C):
D3DVERTEX* vbuffer;
short* ibuffer;
if (ent_buffers(my,0,0,&vbuffer,&ibuffer,NULL)) {
... // read information from the buffers
Siehe auch:
ent_status, vec_for_mesh, ent_getvertex, ent_getmesh, ent_status
► latest
version online