forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Vehicle Physics (http://forum.boolean.name/showthread.php?t=16125)

dsd 29.12.2011 01:44

Vehicle Physics
 
Методом тыка и какой-то матери сделал нечто ведущее себя как четырехколесное авто. Т.е. оно приседает как надо если ударить его шариком и гораздо охотней движется в продольном направлении.
Но какого хрена у этого при движении колеса вертятся с нужной скоростью, но не в ту сторону?



Код:

class car{
public:
//масса автомобиля.
float mass;
//жесткость пружин
Handle body;
Handle fl,fr,rr,rl;
Handle wh[4];

car(){

makebodycompaund();
xEntityCreateVehicle(body);
xEntityAddWheel(body,fr);
xEntityAddWheel(body,fl);
xEntityAddWheel(body,rr);
xEntityAddWheel(body,rl);
xEntityDisableSleeping(body);
xEntityDisableSleeping (fr);
xEntityDisableSleeping (fl);
xEntityDisableSleeping (rr);
xEntityDisableSleeping (rl);
float height=0.3;
xEntityWheelSetConnectionPoint(body,0,-0.85,height,-1.55);
xEntityWheelSetConnectionPoint(body,1,0.85,height,-1.55);
xEntityWheelSetConnectionPoint(body,2,-0.95,height,1.6);
xEntityWheelSetConnectionPoint(body,3,0.95,height,1.6);

float maxforce=130;
xEntityWheelSetMaxSuspensionForce(body,0,maxforce);
xEntityWheelSetMaxSuspensionForce(body,1,maxforce);
xEntityWheelSetMaxSuspensionForce(body,2,maxforce);
xEntityWheelSetMaxSuspensionForce(body,3,maxforce);

float travel=100.0;
xEntityWheelSetMaxSuspensionTravel(body,0,travel);
xEntityWheelSetMaxSuspensionTravel(body,1,travel);
xEntityWheelSetMaxSuspensionTravel(body,2,travel);
xEntityWheelSetMaxSuspensionTravel(body,3,travel);
float radius=0.38;
xEntityWheelSetRadius(body,0,radius);
xEntityWheelSetRadius(body,1,radius);
xEntityWheelSetRadius(body,2,radius);
xEntityWheelSetRadius(body,3,radius);
float steering=0.0;
xEntityWheelSetSteering(body,0,steering);
xEntityWheelSetSteering(body,1,steering);
xEntityWheelSetSteering(body,2,steering);
xEntityWheelSetSteering(body,3,steering);

float xr=0,yr=-1.0,zr=0;
xEntityWheelSetRay(body,0,xr,yr,zr);
xEntityWheelSetRay(body,1,xr,yr,zr);
xEntityWheelSetRay(body,2,xr,yr,zr);
xEntityWheelSetRay(body,3,xr,yr,zr);

float friction=20.0;
xEntityWheelSetFriction(body,0,friction);
xEntityWheelSetFriction(body,1,friction);
xEntityWheelSetFriction(body,2,friction);
xEntityWheelSetFriction(body,3,friction);

float suspcompr=1.0;
xEntityWheelSetSuspensionCompression(body,0,suspcompr);
xEntityWheelSetSuspensionCompression(body,1,suspcompr);
xEntityWheelSetSuspensionCompression(body,2,suspcompr);
xEntityWheelSetSuspensionCompression(body,3,suspcompr);

float susplen=0.336;
xEntityWheelSetSuspensionLength(body,0,susplen);
xEntityWheelSetSuspensionLength(body,1,susplen);
xEntityWheelSetSuspensionLength(body,2,susplen);
xEntityWheelSetSuspensionLength(body,3,susplen);

float suspdamp=3.0;
xEntityWheelSetSuspensionDamping(body,0,suspdamp);
xEntityWheelSetSuspensionDamping(body,1,suspdamp);
xEntityWheelSetSuspensionDamping(body,2,suspdamp);
xEntityWheelSetSuspensionDamping(body,3,suspdamp);

float suspshift=7.5;
xEntityWheelSetSuspensionStiffness(body,0,suspshift);
xEntityWheelSetSuspensionStiffness(body,1,suspshift);
xEntityWheelSetSuspensionStiffness(body,2,suspshift);
xEntityWheelSetSuspensionStiffness(body,3,suspshift);

float rollinflu=2.0f;
xEntityWheelSetRollInfluence(body,0,rollinflu);
xEntityWheelSetRollInfluence(body,1,rollinflu);
xEntityWheelSetRollInfluence(body,2,rollinflu);
xEntityWheelSetRollInfluence(body,3,rollinflu);

}

void makebodycompaund(){


body=xLoadMesh("mesh/car.b3d");
//xMoveEntity(body,0,10,0);
xEntityAddCompoundShape(body,10);
//botom
xEntityCompoundAddBox(body,2.0,0.8,2.25);
xEntityCompoundChildSetPosition(body,0,0,0.6,0);
//top
xEntityCompoundAddBox(body,1.7,0.5,1.25);
xEntityCompoundChildSetPosition(body,1,0,1.2,0.4);
//front
xEntityCompoundAddBox(body,2.0,0.2,1.25);
xEntityCompoundChildSetPosition(body,2,0,0.9,-1.75);
//xEntityCompoundChildSetRotation(body,2,0,0.015,0);
//kinder of front bumper
xEntityCompoundAddBox(body,2.0,0.55,0.25);
xEntityCompoundChildSetPosition(body,3,0,0.55,-2.3);

//kinder of back bumper
xEntityCompoundAddBox(body,2.0,0.55,0.5);
xEntityCompoundChildSetPosition(body,4,0,0.65,2.3);
//kinder of back
xEntityCompoundAddBox(body,2.0,0.35,0.9);
xEntityCompoundChildSetPosition(body,5,0,0.95,1.5);



Handle tex=xLoadTexture("mesh/wheel.jpg");
fr=xLoadMesh("mesh/wheel.b3d");
xEntityAddSphereShape(fr,1.0,0.39);
xPositionEntity(fr,-0.85,0.39,-1.55);
xEntityTexture(fr,tex);


fl=xCopyEntity(fr);
xPositionEntity(fl,0.85,0.39,-1.55);
xScaleEntity(fl,-1,1,-1);
xRotateEntity(fl,90,270,0);
xEntityAddSphereShape(fl,1.0,0.39);

rr=xCopyEntity(fr);
xPositionEntity(rr,-0.95,0.39,1.6);
xEntityAddSphereShape(rr,1.0,0.39);

rl=xCopyEntity(fl);
xPositionEntity(rl,0.95,0.39,1.6);
xEntityAddSphereShape(rl,1.0,0.39);
}

void simulate(){

}


};

Где косяк?

кинуть шарик слабо мышь[1], сильно мышь[2]

Nex 29.12.2011 02:13

Ответ: Vehicle Physics
 
Если машина отрывается от земли, то колеса начинают дрожать.
з.ы. в архиве Trojan.Win32.Swisyn

.Squid 29.12.2011 02:17

Ответ: Vehicle Physics
 
xEntityWheelSetAxle(chassis, wheel, -1.0, 0.0, 0.0)

dsd 29.12.2011 02:21

Ответ: Vehicle Physics
 
http://online.us.drweb.com/cache/?i=...e72c3a0ed86eae Онлайн-проверка дром-вебом и avast вирусов не находит. хмм. Это оно мой экзешник вирусом обзывает?

Nex 29.12.2011 03:06

Ответ: Vehicle Physics
 
virustotal.com нашел, но его нашли какие то унылые антивирусы так что возможно ошиблись. :)

dsd 29.12.2011 22:01

Ответ: Vehicle Physics
 

Специально по просьбам учащихся :) Сделал простенькое управление стрелочками. Пробел - тормоз. Привязать-отвязать камеру к машине клавиша [2] на основной клавиатуре. В отвязанном режиме рулить камерой мышой и wasd

Код внутри.

Если правильно пользоваться командами
xEntityWheelSetBrake
xEntityWheelSetEngineForce
xEntityWheelSetFriction
И менять их в прямом эфире по зависимостям похожим на реальные, то можно сделать вполне себе реалистичную физику. Правда научить прогу правильно определять нужные параметры уже сложней.

Моделька машины по-моему симпатичная вышла :)

dsd 31.12.2011 15:54

Ответ: Vehicle Physics
 

Чу-чуть более адекватное поведение.

Чтобы колеса в воздухе не мотылялись так резко им надо массу побольше или какой-то параметр подвески подкрутить?

dsd 01.01.2012 17:48

Ответ: Vehicle Physics
 


Оказывается нурбс оче удобно для создания мешей дорог.
Терь можно кнопкой 3 менять привод машины на передне-, задне- и полно- приводной.

dsd 02.01.2012 21:26

Ответ: Vehicle Physics
 
Код:

class engine_SFX{
public:
Handle s800,p800,s1000,p1000,s1250,p1250;
Handle s1562,p1562,s1952,p1952,s2440,p2440,s3050,p3050;
Handle s3812,p3812,s4765,p4765,s5956,p5956;
static const int deffreq=48000;
engine_SFX(){
s800=xLoadSound("sfx/car/800.mp3");
s1000=xLoadSound("sfx/car/1000.mp3");
s1250=xLoadSound("sfx/car/1250.mp3");
s1562=xLoadSound("sfx/car/1562.mp3");
s1952=xLoadSound("sfx/car/1952.mp3");
s2440=xLoadSound("sfx/car/2440.mp3");
s3050=xLoadSound("sfx/car/3050.mp3");
s3812=xLoadSound("sfx/car/3812.mp3");
s4765=xLoadSound("sfx/car/4765.mp3");
s5956=xLoadSound("sfx/car/5956.mp3");

p800=xLoadSound("sfx/car/800_p.mp3");
p1000=xLoadSound("sfx/car/1000_p.mp3");
p1250=xLoadSound("sfx/car/1250_p.mp3");
p1562=xLoadSound("sfx/car/1562_p.mp3");
p1952=xLoadSound("sfx/car/1952_p.mp3");
p2440=xLoadSound("sfx/car/2440_p.mp3");
p3050=xLoadSound("sfx/car/3050_p.mp3");
p3812=xLoadSound("sfx/car/3812_p.mp3");
p4765=xLoadSound("sfx/car/4765_p.mp3");
p5956=xLoadSound("sfx/car/5956_p.mp3");

}

void soundIt(int mode,int freq){
Handle s1,s2;
float p1,p2;
float v1,v2;
if(mode==0){
    //выбираем звуки мощи и определяем необходимый питч.
    if(freq>=800){s1=p800;s2=p1000;p1=1.0+0.25*(float)(freq-800)/200.0;p2=1-0.2*(float)(1000-freq)/200.0;}
    if(freq>=1000){s1=p1000;s2=p1250;p1=1.0+0.25*(float)(freq-1000)/250.0;p2=1-0.2*(float)(1250-freq)/250.0;}
    if(freq>=1250){s1=p1250;s2=p1562;p1=1.0+0.25*(float)(freq-1250)/312.0;p2=1-0.2*(float)(1562-freq)/312.0;}
    if(freq>=1562){s1=p1562;s2=p1952;p1=1.0+0.25*(float)(freq-1562)/390.0;p2=1-0.2*(float)(1952-freq)/390.0;}
    if(freq>=1952){s1=p1952;s2=p2440;p1=1.0+0.25*(float)(freq-1962)/488.0;p2=1-0.2*(float)(2440-freq)/488.0;}
    if(freq>=2440){s1=p2440;s2=p3050;p1=1.0+0.25*(float)(freq-2440)/610.0;p2=1-0.2*(float)(3050-freq)/610.0;}
    if(freq>=3050){s1=p3050;s2=p3812;p1=1.0+0.25*(float)(freq-3050)/762.0;p2=1-0.2*(float)(3812-freq)/762.0;}
    if(freq>=3812){s1=p3812;s2=p4765;p1=1.0+0.25*(float)(freq-3812)/953.0;p2=1-0.2*(float)(4765-freq)/953.0;}
    if(freq>=4765){s1=p4765;s2=p5956;p1=1.0+0.25*(float)(freq-4765)/1191.0;p2=1-0.2*(float)(5956-freq)/1191.0;}
}

if(mode==1){
    //выбираем звуки движка без нагрузки и определяем необходимый питч.
    if(freq>=800){s1=s800;s2=s1000;p1=1.0+0.25*(float)(freq-800)/200.0;p2=1-0.2*(float)(1000-freq)/200.0;}
    if(freq>=1000){s1=s1000;s2=s1250;p1=1.0+0.25*(float)(freq-1000)/250.0;p2=1-0.2*(float)(1250-freq)/250.0;}
    if(freq>=1250){s1=s1250;s2=s1562;p1=1.0+0.25*(float)(freq-1250)/312.0;p2=1-0.2*(float)(1562-freq)/312.0;}
    if(freq>=1562){s1=s1562;s2=s1952;p1=1.0+0.25*(float)(freq-1562)/390.0;p2=1-0.2*(float)(1952-freq)/390.0;}
    if(freq>=1952){s1=s1952;s2=s2440;p1=1.0+0.25*(float)(freq-1962)/488.0;p2=1-0.2*(float)(2440-freq)/488.0;}
    if(freq>=2440){s1=s2440;s2=s3050;p1=1.0+0.25*(float)(freq-2440)/610.0;p2=1-0.2*(float)(3050-freq)/610.0;}
    if(freq>=3050){s1=s3050;s2=s3812;p1=1.0+0.25*(float)(freq-3050)/762.0;p2=1-0.2*(float)(3812-freq)/762.0;}
    if(freq>=3812){s1=s3812;s2=s4765;p1=1.0+0.25*(float)(freq-3812)/953.0;p2=1-0.2*(float)(4765-freq)/953.0;}
    if(freq>=4765){s1=s4765;s2=s5956;p1=1.0+0.25*(float)(freq-4765)/1191.0;p2=1-0.2*(float)(5956-freq)/1191.0;}
}

xSoundPitch(s1,deffreq*p1);xSoundPitch(s2,deffreq*p2);
xPlaySound(s1);

}
};

Что я делаю не так? Потому как звук получается потусторонний, а фпс с 80 до 30 проседает. soundIt(int mode,int freq) вызывается каждый кадр.

Каково оптимальное количество полигонов для xEntityAddTriMeshShape?

Кстати, а PhysX сильно сложно с хорсом состыковать?

pozitiffcat 04.01.2012 17:43

Ответ: Vehicle Physics
 
Цитата:

Кстати, а PhysX сильно сложно с хорсом состыковать?
Без софт боди не сложно.

dsd 04.01.2012 22:52

Ответ: Vehicle Physics
 
Цитата:

Сообщение от pozitiffcat (Сообщение 216078)
Без софт боди не сложно.

Кул, значит за несколько следующих месяцев я, возможно, соберу очередное недоприложение.

Вопрос не по теме. Вот скачал я експресс студию 2010. Цветовая гама супер. Но в обычной студии если навестись на какую-нить функцию оно спустя пару сек выплевывало краткое её описание.
А если напечать ну хотябы: "Console::" то оно после двоеточия выдавало замечательный список возможных продолжений.
Как мне в экспресс включить автозавершение комманд и подобный списочек? Или в иде для экономных этой функции нет?

PhysX-3.1.1_PC_VC10_SDK_Core есть еще очень похожая сдк с VC9 в имени и во время установки експресс студии оно качало какую-то хрень с VC9, что вообще такое скрывается за этими буквами и есть ли связь?

pozitiffcat 04.01.2012 23:50

Ответ: Vehicle Physics
 
в 2010 версии интеллисенс выключен разработчиками. тебе надо создавать приложение win32 а не CLR. Там все есть. CLR для программирования на .NET фреймворке, для чего лучше подходит c#

dsd 07.01.2012 21:04

Ответ: Vehicle Physics
 


Почти доделал свою помесь фастбэка с фастбэком шелби гт350

moka 07.01.2012 21:09

Ответ: Vehicle Physics
 
Нормали очень кривые местами..

dsd 07.01.2012 21:13

Ответ: Vehicle Physics
 
Для первой модели пойдет :) Тем более это рендеры без сглаживания.
Ну и таки да, там есть много мест где полигоны немножко иначе пустить надо.


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

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