Here is a c++ snip but it might document things a little - it look bad at first glance....
I'll explain: First Part - Set's up two triangles, but in a loop to make a "matrix". Next Part ---tons of numbers? Ignore - its a IMAGe I was making in ram, and will again, as I just ironed out a bug that will allow it.
You may see some stuff with PIXELGRID - ignore - that's for my texture blender.
Memblock to Mesh - then Mesh to be copied into as many limbs as necessary to get said tiles.
I didn't give this to cram C++ down your throat - so watch the flames guys - I did so because it has comments near many values that might help connect the dots for you when you compare stuff.
I'm still learning this stuff to.
David W - this is that mesh stuff I use
//----------------------------------------------------------------------------
void JGC_JMESH::CreateMesh(
int p_LimbsX,
int p_LimbsZ,
float p_LimbSpacerSize,
int p_LimbFacesX,
int p_LimbFacesZ,
float p_LimbFaceSize,
float p_UScale,
float p_VScale,
float p_UOffset,
float p_VOffset,
int p_Initial_ImageID_ZeroForNone,
bool p_TextureEachFace // Sending False makes TEXTURE PER TILE.
){
//----------------------------------------------------------------------------
this->LimbsX=p_LimbsX;
this->LimbsZ=p_LimbsZ;
this->LimbSpacerSize=p_LimbSpacerSize;
this->LimbFacesX=p_LimbFacesX;
this->LimbFacesZ=p_LimbFacesZ;
this->LimbFaceSize=p_LimbFaceSize;
//-
this->LimbTotalFaces=this->LimbFacesX*this->LimbFacesZ;
this->LimbSizeX=(p_LimbFacesX*p_LimbFaceSize)+this->LimbSpacerSize;
this->LimbSizeZ=(p_LimbFacesZ*p_LimbFaceSize)+this->LimbSpacerSize;
this->ObjFacesX=LimbFacesX*LimbsX;
this->ObjFacesZ=LimbFacesZ*LimbsZ;
this->ObjTotalFaces=ObjFacesX*ObjFacesZ;
this->ObjTotalSizeX=this->LimbSizeX*LimbsX;
this->ObjTotalSizeZ=this->LimbSizeZ*LimbsZ;
this->LimbTotalPoly=LimbTotalFaces*2;
this->LimbTotalVertex=this->LimbTotalPoly*3;
this->ObjTotalPoly=LimbTotalVertex*(ObjFacesX * ObjFacesZ);
this->ObjTotalVertex=ObjTotalPoly*3;
// At this point in this complex mesh creation - we will set altitude (y)
// to Zero. And All Normals(x,y,z) to zero as well. We are now only making a flat
// mesh made of tiles. Each tile will be a limb.
//--------------Mesh MemBlock Header
//12 is the header info, 36 is Vertext Data struct
int MemblockSize=(this->LimbTotalVertex*36)+12;
this->MMB=(JGC_MEMBLOCK*)JGC::MemBlockDL->AppendItem_Memblock(MemblockSize);
this->MMB->SetDword(0,338);//338=Flexible Vertex Format
this->MMB->SetDword(4,36);//36=Size of Vertex Struct?
this->MMB->SetDword(8,this->LimbTotalVertex);
//---------------------------------------------
// ORIGINAL VERTICE ORDER for one MeshFace (2 poly)
// ___ NORTH +z
// 1 | / 2 5/| -x West(Up)East +x
// | / / | SOUTH -z
// |/ 4 /__| 6
// 3
//---------------------------------------------
int MemPos=12; // Where the Vertex Data Begins! :)
int z=0;int x=0;
// Increment for uv
float uI= (p_UScale/LimbFacesX);
float vI= (p_VScale/LimbFacesZ);
for(z=0;z<this->LimbFacesZ;z++){
for(x=0;x<this->LimbFacesX;x++){
//------------------------- 1
MMB->SetFloat(MemPos,x*LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,((z*-1)*LimbFaceSize)+LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(0*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(0*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI * x)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,((vI*z)+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
//------------------------- 2
MMB->SetFloat(MemPos,(x*LimbFaceSize)+LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,((z*-1)*LimbFaceSize)+LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(1*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(0*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI*((float)(x+1)))+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(vI*((float)z)+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
//------------------------- 3
MMB->SetFloat(MemPos,x*p_LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,(z*-1)*p_LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(0*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(1*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI*((float)x))+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(vI*((float)(z+1))+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
//------------------------- 4
MMB->SetFloat(MemPos,x*p_LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,(z*-1)*p_LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(0*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(1*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI*((float)x))+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(vI*((float)(z+1))+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
//------------------------- 5
MMB->SetFloat(MemPos,(x*p_LimbFaceSize)+p_LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,((z*-1)*p_LimbFaceSize)+p_LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(1*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(0*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI*((float)(x+1)))+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(vI*((float)z)+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
//------------------------- 6
MMB->SetFloat(MemPos,(x*p_LimbFaceSize)+p_LimbFaceSize);MemPos+=4;//VertexX
MMB->SetFloat(MemPos,0);MemPos+=4;//VertexY
MMB->SetFloat(MemPos,(z*-1)*p_LimbFaceSize);MemPos+=4;//VertexZ
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalX
MMB->SetFloat(MemPos,1);MemPos+=4;//NormalY
MMB->SetFloat(MemPos,0);MemPos+=4;//NormalZ
MMB->SetDword(MemPos,dbRGB(255,255,255));MemPos+=4;//Vertex Color
// ONE Texture Per Face
if(p_TextureEachFace){
MMB->SetFloat(MemPos,(1*p_UScale)+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(1*p_VScale)+p_VOffset);MemPos+=4;//VCoord
}else{
MMB->SetFloat(MemPos,(uI*((float)(x+1)))+p_UOffset);MemPos+=4;//UCoord
MMB->SetFloat(MemPos,(vI*((float)(z+1))+p_VScale)+p_VOffset);MemPos+=4;//VCoord
};
};
};
JGC::MeshDL->MakeMeshFromMemblock(MMB->ID);
// Now we use this cookie Cutter Mesh to make the Limbs
this->ObjLimbs=0;
JGC_MEMBLOCK *MB;
if(p_Initial_ImageID_ZeroForNone==0){
MB=JGC::MemBlockDL->AppendItem_Memblock((1024*4)+12);
int MPos=0;
MB->SetDword(MPos,32);MPos+=4;//width
MB->SetDword(MPos,32);MPos+=4;//Height
MB->SetDword(MPos,32);MPos+=4;//Depth
DWORD ImgData[]={
16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,255,255,255,255,255,255,255,255,255,255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,
16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,
16777215,16777215,16711935,0,16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,16777215,16777215,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,
16777215,16777215,0,16711935,16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,16777215,255,255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,
16777215,16777215,16777215,16777215,16711935,0,16777215,16777215,0,0,16777215,16777215,0,0,255,255,255,255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,
16777215,16777215,16777215,16777215,0,16711935,16777215,16777215,0,0,16777215,16777215,0,255,255,255,255,255,255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,0,0,16777215,16777215,16711935,0,16777215,16777215,0,0,255,255,255,255,255,255,255,255,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,0,0,16777215,16777215,0,16711935,16777215,16777215,0,0,16777215,16777215,16777215,255,255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,16777215,16777215,0,0,16777215,16777215,16711935,0,16777215,16777215,0,0,16777215,255,255,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,16777215,16777215,0,0,16777215,16777215,0,16711935,16777215,16777215,0,0,16777215,255,255,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,16711935,0,16777215,16777215,16777215,255,255,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,
16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,0,16711935,16777215,16777215,16777215,255,255,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,
255,16777215,16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,16711935,0,16777215,255,255,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,
255,16777215,16777215,16777215,0,0,16777215,16777215,0,0,16777215,16777215,0,16711935,16777215,255,255,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,
255,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,255,255,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,
255,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,
255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,
255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,
255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,
255,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,
8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,16777215,
8421504,8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,16777215,
8421504,8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,16777215,
8421504,16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,16777215,
16711935,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,8421504,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711935,
};
for(z=0;z<4096;z++){
MB->SetDword(MPos,ImgData[z]);MPos+=4;
};
}else{
//MB=JGC::MemBlockDL->AppendItem_FromImage(p_Initial_ImageID_ZeroForNone);
};
int ImgID=p_Initial_ImageID_ZeroForNone;
for(z=0;z<this->LimbsZ;z++){
for(x=0;x<this->LimbsX;x++){
if(p_Initial_ImageID_ZeroForNone==0){
TexturePGDL->AppendItem();
//JGC_IMAGE *MyImg;//reference only
//MyImg=(JGC_IMAGE*)(((JGC_PIXELGRID*)TexturePGDL->Item)->Ptr=(void*)JGC::ImageDL->AppendItem_FromMemblock(MB->ID));
ImgID=0;//MyImg->ID;
}else{
TexturePGDL->AppendItem();// Make The Element, Just don't populate it with anything
};
if((x==0) && (z==0)){
this->Obj=JGC::ObjectDL->MakeObject(((JGC_MESH*)JGC::MeshDL->Item)->ID,ImgID);
}else{
this->Obj->LimbAdd(++this->ObjLimbs,((JGC_MESH*)JGC::MeshDL->Item)->ID);
this->Obj->LimbTexture(this->ObjLimbs,ImgID);
this->Obj->LimbOffset(this->ObjLimbs,(x*LimbSizeX),0,((z*-1)*LimbSizeZ));
};
};
//dbSync();
};
// If we used the default texture - Delete the MemoryBlock We Made to create the Image from.
//if(p_Initial_ImageID_ZeroForNone==0){
// //if(JGC::MemBlockDL->FoundItem(MB)){
// // JGC::MemBlockDL->DeleteItem();
// //};
//};
JGC::MeshDL->DeleteItem();
};
//----------------------------------------------------------------------------