Die meisten Dinge / dlls etc lassen sich ohne Wrapper ansprechen. Entweder dll oder LIb ( via Import .. ).
Beim IrrlichtWrapper sind die Sourcen dabei - wenn du etwas C++ Kenntnisse hast kannst des dir mal durchsehen.
Im Prinzip musst du jede Klasse in Funktionen exportieren wobei du dir selber etwas Gedanken machen musst wie du das ganze möglichst logisch zu einem Gerüst zusammensezt.
Einfache Funktionen:
Code: Alles auswählen
STATIC_EXPORT ISceneNode* DLL_EXPORT IrrGetNodeParent( ISceneNode* node )
{
return node->getParent();
}
wird in PB zu IrrGetNodeParent(*nodepointer) und gibt wiederum einen Pointer zurück.
Komplexer wirds zb bei.
Code: Alles auswählen
STATIC_EXPORT void DLL_EXPORT IrrGetMeshVertices( IAnimatedMesh* mesh, int iFrame, IRR_VERT *verts )
{
int iLoop;
S3DVertex *s3d_verts;
S3DVertex2TCoords *texture_verts;
S3DVertexTangents *tangent_verts;
IMeshBuffer *mb = mesh->getMesh(iFrame)->getMeshBuffer(0);
int iVertexCount = mb->getVertexCount();
switch ( mb->getVertexType())
{
case EVT_STANDARD:
// Standard vertex type used by the Irrlicht engine, video::S3DVertex
s3d_verts = (S3DVertex *)mb->getVertices();
for ( iLoop = 0; iLoop < iVertexCount; iLoop++ )
{
verts[iLoop].x = s3d_verts[iLoop].Pos.X;
verts[iLoop].y = s3d_verts[iLoop].Pos.Y;
verts[iLoop].z = s3d_verts[iLoop].Pos.Z;
verts[iLoop].normal_x = s3d_verts[iLoop].Normal.X;
verts[iLoop].normal_y = s3d_verts[iLoop].Normal.Y;
verts[iLoop].normal_z = s3d_verts[iLoop].Normal.Z;
verts[iLoop].vcolor = s3d_verts[iLoop].Color.color;
verts[iLoop].texture_x = s3d_verts[iLoop].TCoords.X;
verts[iLoop].texture_y = s3d_verts[iLoop].TCoords.Y;
}
break;
case EVT_2TCOORDS:
/* Vertex with two texture coordinates, video::S3DVertex2TCoords.
Usually used for geometry with lightmaps or other special materials. */
texture_verts = (S3DVertex2TCoords *)mb->getVertices();
for ( iLoop = 0; iLoop < iVertexCount; iLoop++ )
{
verts[iLoop].x = texture_verts[iLoop].Pos.X;
verts[iLoop].y = texture_verts[iLoop].Pos.Y;
verts[iLoop].z = texture_verts[iLoop].Pos.Z;
verts[iLoop].normal_x = texture_verts[iLoop].Normal.X;
verts[iLoop].normal_y = texture_verts[iLoop].Normal.Y;
verts[iLoop].normal_z = texture_verts[iLoop].Normal.Z;
verts[iLoop].vcolor = texture_verts[iLoop].Color.color;
verts[iLoop].texture_x = texture_verts[iLoop].TCoords.X;
verts[iLoop].texture_y = texture_verts[iLoop].TCoords.Y;
}
break;
case EVT_TANGENTS:
/* Vertex with a tangent and binormal vector, video::S3DVertexTangents.
Usually used for tangent space normal mapping. */
tangent_verts = (S3DVertexTangents *)mb->getVertices();
for ( iLoop = 0; iLoop < iVertexCount; iLoop++ )
{
verts[iLoop].x = tangent_verts[iLoop].Pos.X;
verts[iLoop].y = tangent_verts[iLoop].Pos.Y;
verts[iLoop].z = tangent_verts[iLoop].Pos.Z;
verts[iLoop].normal_x = tangent_verts[iLoop].Normal.X;
verts[iLoop].normal_y = tangent_verts[iLoop].Normal.Y;
verts[iLoop].normal_z = tangent_verts[iLoop].Normal.Z;
verts[iLoop].vcolor = tangent_verts[iLoop].Color.color;
verts[iLoop].texture_x = tangent_verts[iLoop].TCoords.X;
verts[iLoop].texture_y = tangent_verts[iLoop].TCoords.Y;
}
break;
}
}
Wird zb zu: IrrGetMeshVertices(*meshpointer, Frame.l, *memory.IRR_VERT)
wobei *memory.IRR_VERT ( Siehe header Includes ) ein strukturierter Memory-Bereich ist ( Struktur IRR_VERT ) - welcher auch ein Pointer auf ein strukturiertes Array sein kann ( Ansonsten ists +*ptr+Sizeof(IRR_VERT)) ...
Kann ne ziemliche Arbeit sein und erfordert dass du das zu wrappende System verstehst ( ist die Grundlage sozusagen - desto besser du vorplanst - desto einfacher hastes nachher )
Hoffe das hat bissl geholfen,
Thalius