forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   [Physics] Простой пример, с большими проблемами (http://forum.boolean.name/showthread.php?t=12093)

Comment 02.03.2010 19:23

[Physics] Простой пример, с большими проблемами
 
Создал простой пример на блитце (с++), подключил физикс. Не работает кубик лежал как и лежит, не могу понять в чем дело, смотрел примеры на блитцбэйсик там последовательность действий подобная что и у меня, но у них все пашет...

Код:

#include <blitz3dsdk.h>
#include <Blitzpx.h>

int main()
{
        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,"");
        int cub=bbCreateCube();
        int Body=pxBodyCreateCube(1,1,1,1);
        pxBodySetPosition(Body,0,10,0);
               
        while(!bbKeyHit(KEY_ESCAPE))
      {
                  pxRenderPhysic(60,0);
                  pxBodySetEntity(cub,Body);
                  bbUpdateWorld();
                  bbRenderWorld();
                  bbFlip();
            }
        bbEndBlitz3D();
}


ABTOMAT 02.03.2010 20:25

Ответ: [Physics] Простой пример, с большими проблемами
 
Проверь, двигается ли тело. Для этого выведи на экран его координаты и смотри, меняются ли они.

Comment 02.03.2010 20:29

Ответ: [Physics] Простой пример, с большими проблемами
 
Цитата:

Сообщение от ABTOMAT (Сообщение 140271)
Проверь, двигается ли тело. Для этого выведи на экран его координаты и смотри, меняются ли они.

Сейчас проверю, можешь мне ссылку на нормальный враппер дать, а то я и на форуме смотрел и вообщем в интеренете там все ссылки битые

Comment 02.03.2010 20:42

Ответ: [Physics] Простой пример, с большими проблемами
 
Код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <blitz3dsdk.h>
#include <Blitzpx.h>

int main()
{
        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,"take");
        int cub=bbCreateCube();
        int Body=pxBodyCreateCube(1,1,1,1);
        pxBodySetPosition(Body,0,10,0);
        char buffer[10];
        while(!bbKeyHit(KEY_ESCAPE))
        {
                pxRenderPhysic(60,0);
                pxBodySetEntity(cub,Body);
            bbUpdateWorld();
            bbRenderWorld();
                sprintf(buffer, "%f", pxBodyGetPositionY(Body));
                bbText(100,100,buffer);
                sprintf(buffer, "%f", bbEntityY(cub));
                bbText(100,200,buffer);
                bbFlip();
        }
        bbEndBlitz3D();
}

Вывод: физический объект двигается, а графический нет!!! Следовательно проблема в привзяке, только я не пойму где именно

EvilChaotic 02.03.2010 20:57

Ответ: [Physics] Простой пример, с большими проблемами
 
Попробуй перепозиционировать графический объект вручную. Находишь координаты и ротации физического, на него позиционируешь и крутишь графический, в цикле естественно..

Comment 02.03.2010 21:05

Ответ: [Physics] Простой пример, с большими проблемами
 
Цитата:

Сообщение от EvilChaotic (Сообщение 140276)
Попробуй перепозиционировать графический объект вручную. Находишь координаты и ротации физического, на него позиционируешь и крутишь графический, в цикле естественно..

Так делал, но все же хочется с нормальных средств Physix

H@NON 02.03.2010 21:29

Ответ: [Physics] Простой пример, с большими проблемами
 
создай функцию привязки и пользуйся ей

Comment 02.03.2010 21:34

Ответ: [Physics] Простой пример, с большими проблемами
 
Цитата:

Сообщение от H@NON (Сообщение 140284)
создай функцию привязки и пользуйся ей

Уже создал, но почему стандартная не пашет?

ABTOMAT 02.03.2010 21:49

Ответ: [Physics] Простой пример, с большими проблемами
 
Цитата:

Вывод: физический объект двигается, а графический нет!!!
Это хорошо, что ты такой вывод сделал, но только приучи себя делать их сразу, а не ждать наводящих советов ;)

pxBodySetEntity - это хак, она меняет координаты/поворот ентити блица прямо в памяти, вот почему она работает только в Блице 3Д, т.к. зависит от его структуры данных. И поэтому же для Ксорса такая функция своя (хотя не знаю, как сейчас, вроде, авторы её уже совсем выпилили, и правильно сделали: состыковывать изменения Ксорса и Враппера при каждом изменении чего-то там внутри - не рулит). Возможно, в Б3ДСДК, хоть это и "почти блиц3Д", структура немного иная, вот и не пашет.

Кстати в 1.100 вроде, версии, блица, уже глюки полезли со стандартной pxBodySetEntity, видимо, Марк наковырял внутренности, так что советую написать свою функцию. Надёжней будет.

Comment 02.03.2010 23:35

Ответ: [Physics] Простой пример, с большими проблемами
 
Спасибо всем за помощь


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

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