forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проблема с созданием банка (http://forum.boolean.name/showthread.php?t=12119)

Comment 11.03.2010 16:06

Ответ: Проблема с созданием банка
 
По видимому никто помочь не может...

Knightmare 11.03.2010 16:12

Ответ: Проблема с созданием банка
 
Ты не только С++ не знаешь, ты и B3D не знаешь. Зачем помогать человеку, который не может сам найти элементарные ошибки в коде? Все что ты сделал - это тупо скопипастил мой код написанный в браузере.

activist 19.03.2010 22:21

Ответ: Проблема с созданием банка
 
Да товарищ 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: конкретный вопрос требует конкретного ответа!


Часовой пояс GMT +4, время: 19:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot