Mon code est assez complexe, c'est un truc en direct3d, je vais essayer de mettre seulement ce qui est pertinent. Ne vous inquiétez pas s'il y a un paquet de truc étranges dans les fonctions, je fais des tests.
Le struct :
struct CPrimitive
{
public:
CPrimitive();
~CPrimitive();
void Create(D3DVERTEX pVertex[],char* TexturePath);
void Render();
private:
LPDIRECT3DVERTEXBUFFER9 VertexBuffer;
LPDIRECT3DTEXTURE9 Texture1;
D3DMATERIAL9 Material;
D3DVERTEX* Vertex;
};
Déclaration:
D3DVERTEX Triangle[] = { {0.0f,1.0f,0.0f,0.0f,1.0f,-1.0f,0.1f,0x7fffffff,0.5f,0.0f},{-1.0f,-1.0f,-1.0f,0.0f,1.0f,-1.0f,0.1f,0x7fffffff,0.0f,1.0f},{1.0f,-1.0f,-1.0f,0.0f,1.0f,-1.0f,0.1f,0x7fffffff,1.0f,1.0f},
{0.0f,1.0f,0.0f,-1.0f,1.0f,0.0f,0.1f,0x7fffffff,0.5f,0.0f},{-1.0f,-1.0f,1.0f,-1.0f,1.0f,0.0f,0.1f,0x7fffffff,0.0f,1.0f},{-1.0f,-1.0f,-1.0f,-1.0f,1.0f,0.0f,0.1f,0x7fffffff,1.0f,1.0f},
{0.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.1f,0x7fffffff,0.5f,0.0f},{1.0f,-1.0f,1.0f,0.0f,1.0f,1.0f,0.1f,0x7fffffff,0.0f,1.0f},{-1.0f,-1.0f,1.0f,0.0f,1.0f,1.0f,0.1f,0x7fffffff,1.0f,1.0f},
{0.0f,1.0f,0.0f,1.0f,1.0f,0.0f,0.1f,0x7fffffff,0.5f,0.0f},{1.0f,-1.0f,-1.0f,1.0f,1.0f,0.0f,0.1f,0x7fffffff,0.0f,1.0f},{1.0f,-1.0f,1.0f,1.0f,1.0f,0.0f,0.1f,0x7fffffff,1.0f,1.0f}};
CPrimitive PTriangle;
Fonction :
void CPrimitive::Create(D3DVERTEX pVertex[], char* TexturePath)
{
void* Data;
//ici je sais pas si je dois faire
memcpy(Vertex,pVertex,sizeof(pVertex));
ou
for(int i=0;i<sizeof(pVertex);++i)
{
Vertex[i].X=pVertex[i].X;
Vertex[i].Y=pVertex[i].Y;
Vertex[i].Z=pVertex[i].Z;
Vertex[i].Normal=pVertex[i].Normal;
Vertex[i].fSize=pVertex[i].fSize;
Vertex[i].Color=pVertex[i].Color;
Vertex[i].U=pVertex[i].U;
Vertex[i].V=pVertex[i].V;
}
ou
Vertex=pVertex;
//Create the vertex buffer
c_App.GetDevice()->CreateVertexBuffer(sizeof(pVertex),D3DUSAGE_WRITEONLY,D3DFVF_VERTEX,D3DPOOL_MANAGED,&VertexBuffer,NULL);
//Filling the vertex buffers with data
VertexBuffer->Lock(0,sizeof(Data),(void**)&Data,0);
memcpy(Data,pVertex,sizeof(pVertex));
VertexBuffer->Unlock();
D3DXCreateTextureFromFileA(c_App.GetDevice(),TexturePath,&Texture1); //Load the texture from the set path
}
Utilisation concrète :
PTriangle.Create(Triangle,"texture.jpg");
Voilà, bonne chance.