Показать сообщение отдельно
Старый 19.03.2010, 22:21   #18
activist
AnyKey`щик
 
Аватар для activist
 
Регистрация: 19.03.2010
Сообщений: 3
Написано 3 полезных сообщений
(для 10 пользователей)
Ответ: Проблема с созданием банка

Да товарищ Khightmare! Ваше высокомерие поражает!!! Не все люди такие суперпупермегакрутые программисты как вы, и по видимому вы этим гордитесь?!

А по делу вот - исправленный код:
#include <windows.h>
#include <cstring>
#include <string>
#include <fstream>
#include <ctime>
#include "blitz3dsdk.h"
#include "Blitzpx.h"

#pragma warning( disable:4244 )	//disable float conversion warnings
#pragma warning( disable:4305 )	//disable double to float truncation warning

#pragma comment(lib, "blitz3dsdk.lib")
#pragma comment(lib, "phisics.lib")
using namespace std;


void* CreateBank(int size)
{
    return new BYTE[size];
}

void FreeBank(void * bank)
{
    delete bank;
}

void PokeFloat(void * bank, int offset, float value)
{
    *(float*)((char*)bank + offset) = value;
}

int GetVertCount(int mesh)
{
    int verticesCount = 0;
    for(int i = 1; i <= bbCountSurfaces(mesh); i++)
    {
		int surf = bbGetSurface(mesh, i);
        verticesCount += bbCountVertices(surf);
    }
    return verticesCount;
}

void* GetVertBank(int mesh)
{
    void* bank = CreateBank(GetVertCount(mesh) * 12);
    int offset = 0;
    for(int i = 1; i <= bbCountSurfaces(mesh); i++)
    {
        int surface = bbGetSurface(mesh, i);
        for(int j = 0; j < bbCountVertices(surface)-1; 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("obj.b3d");
    bbFlipMesh(mesh);
    int mvn = GetVertCount(mesh);
    float* mvbank =(float*)GetVertBank(mesh);
	SB=pxBodyCreateHull(mvbank, mvn-1, 1.0f);
	bbFlipMesh(mesh);
    FreeBank((void*)mvbank);
}

void main(void)
{
	bbBeginBlitz3D();
	bbGraphics3D(800,600,32,2);
	
	int cam=bbCreateCamera();
	bbPositionEntity(cam,0,10,-20);
	int plane=bbCreatePlane();
	bbEntityColor(plane,64,128,128);
	int light=bbCreateLight();
	
	pxCreateWorld(1,"");
	pxSetGravity(0,-10,0);

	int Obj;
	int Body;
	
	GenSB(Obj, Body);
	pxBodySetPosition(Body,0,20,0);

	while(!bbKeyHit(KEY_ESCAPE))
	{
		pxRenderPhysic(60,0);
		bbPositionEntity(Obj,pxBodyGetPositionX(Body),pxBodyGetPositionY(Body),pxBodyGetPositionZ(Body));
		bbRotateEntity(Obj,pxBodyGetRotationPitch(Body),pxBodyGetRotationYaw(Body),pxBodyGetRotationRoll(Body));

		bbUpdateWorld();
	    bbRenderWorld();
		bbFlip();
	}
	bbEndBlitz3D();
}
P.S: конкретный вопрос требует конкретного ответа!
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо activist за это полезное сообщение:
Arles (19.03.2010), Arton (03.04.2010), h1dd3n (25.03.2010), L.D.M.T. (20.03.2010), St_AnGer (17.02.2014)