Сообщение от Knightmare
|

void *CreateBank(int size)
{
return new BYTE[size];
}
void FreeBank(void * bank)
{
delete [] bank;
}
BYTE PeekByte(void * bank, int offset)
{
return *(BYTE*(bank + offset));
}
WORD PeekShort(void * bank, int offset)
{
return *(WORD*(bank + offset));
}
int PeekInt(void * bank, int offset)
{
return *(int*(bank + offset));
}
float PeekFloat(void * bank, int offset)
{
return *(float*(bank + offset));
}
void PokeByte(void * bank, int offset, BYTE value)
{
*(BYTE*(bank + offset)) = value;
}
void PokeShort(void * bank, int offset, WORD value)
{
*(WORD*(bank + offset)) = value;
}
void PokeInt(void * bank, int offset, int value)
{
*(int*(bank + offset)) = value;
}
void PokeFloat(void * bank, int offset, float value)
{
*(float*(bank + offset)) = value;
}
// getting total vertices count in mesh
int GetVertCount(int mesh)
{
// getting vertices count
int verticesCount = 0;
for(int i = 0; i < bbCountSurfaces(mesh); i++)
{
verticesCount += bbCountVertices(bbGetSurface(mesh, i));
}
return verticesCount ;
}
void * GetVertBank(int mesh)
{
void *bank = CreateBank(GetVertCount(mesh)*12);
int offset = 0;
for(int i = 0; i < bbCountSurfaces(mesh); i++)
{
int surface = bbGetSurface(mesh, i);
for(int j = 0; j < bbCountVertices(surface); j++)
{
PokeFloat(bank, offset + 0, bbVertexX(surface, j));
PokeFloat(bank, offset + 4, bbVertexY(surface, j));
PokeFloat(bank, offset + 8, bbVertexZ(surface, j));
offset += 12;
}
}
return bank;
}
void GenSB(int &mesh, int &SB)
{
mesh=bbLoadMesh("Data/models/te.3ds");
bbFlipMesh(mesh);
int mvn = GetVertCount(mesh);
int mvbank = GetVertBank(mesh);
SB = pxCreateSoftBody("Data/physics/te_SB.obj", "Data/physics/te_SB.tet", mvbank, mvn, 0, 60, 0, 0, 0, 0);
pxSoftBodySetStretchingStiffness(SB, 0.01);
FreeBank(mvbank);
}
Как я понял bank, это указатель который ссылается на место в памяти где хранится некий динамический массив вершин. Только проблема в том что когда мы задаем смещение(если я не ошибаюсь) компилятор выдает ошибку,
.\source.cpp(77) : error C2061: syntax error : identifier 'bank'
.\source.cpp(77) : error C2066: cast to function type is illegal
*(BYTE*(bank + offset));
В чем дело, суть этой записи мне понятна(никий вариант [x+SI] из ассемблера), но вот в чем ошибка понять не могу. Возможно в версии моего кампилятора VS 2005.
.\source.cpp(150) : error C2440: 'initializing' : cannot convert from 'void *' to 'int'
int mvbank = GetVertBank(mesh);
Здесь ошибка из за того что переменной целого типа присваевают значение безтипового указателя войд, смысл этого мне не совсем понятен, тут пытаются в переменную загрузить ссылку на память.
Я не спорю, моих знаний с++ маловато, но если пойму это их станет больше, искал на болеане решение этого нигде не нашел, т.е либо под с++ на блитце никто не пишет, либо никто не знает как сделать.