Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
187 - ?
30.10.2024
 Mefistofel
Galactic Showdown -…
21.10.2024
 KregHek
Новый IGDC
5.08.2024
 rimush
186 - Strategy!
15.07.2024
 VoroneTZ
WoL
3.07.2024
 Darthman
Привет выжившие
21.05.2024
 GeePee
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
Сейчас на сайте
Гостей: 32
На сайте нет зарегистрированных пользователей

Пользователей: 1,790
новичок: Durved
Обсуждение «43 - Carnage»
Страница 6 из 12 << < 3 4 5 6 7 8 9 > >>
Division
Avatar пользователя

Опубликовано 09.01.2009 14:20 (16 лет назад)    #
Я за - сложно успеть за такой короткий срок. Делаю не с нуля, и то с большим трудом успеваю. Если +5 дней - может нормальный пострендер будет)
Adler
Avatar пользователя

Опубликовано 09.01.2009 14:24 (16 лет назад)    #
Я тоже за продление. Может даже успею шейдеры приделать и ещё фишки в геймпее добавлю, музыку наконец.
ЗЫ: решил всё таки поучаствовать.

редакция от Adler, 09.01.2009 15:16

JKot
Avatar пользователя

Опубликовано 09.01.2009 15:26 (16 лет назад)    #
хм 9 дней , ну ладно я тоже за я много время упустил и тоже думаю что не всё учпею сделать что задумал..

Кстати тут тоже обсуждается тема физики авто, даже код выкладывают ;)

http://isadateam.com/forum/index.php?showtopic=127&pid=2442&st=0&#entry2442

редакция от JKot, 09.01.2009 15:32

Division
Avatar пользователя

Опубликовано 09.01.2009 15:39 (16 лет назад)    #
ИМХО самая сложная часть - collision detection. У меня всё упрощено донельзя, машинки как две окружности представлены. Кто как делает?
ViZgl
Avatar пользователя

Опубликовано 09.01.2009 15:52 (16 лет назад)    #
JKot написал:
Кстати тут тоже обсуждается тема физики авто, даже код выкладывают ;)

http://isadateam.com/forum/index.php?showtopic=127&pid=2442&st=0a33;entry2442


В самом начале написания игры, взял эту физику(она у меня давно и в C++ и в Delphi была переведена), но немножко подраздумывал и пришел к выводу, что для такой физики будет сложно писать AI !!! И решил писать простую физику, заносы тупо интерполяция вектора скорости к углу поворота корпуса, выходит вполне прикольно, даже весело.
ViZgl
Avatar пользователя

Опубликовано 09.01.2009 16:00 (16 лет назад)    #
Division написал:
ИМХО самая сложная часть - collision detection. У меня всё упрощено донельзя, машинки как две окружности представлены. Кто как делает?


Я еще не писал коллизии, пока так ездят сквозь дуруг-друга. Ну впринципе, если машинки аппроксимировать сферами, то можно их толкать, но силу задавать в соответствии с углами поворота корпуса ;), ну хз нужно подумать ))
Hexman
Avatar пользователя

Опубликовано 09.01.2009 16:36 (16 лет назад)    #
сейчас пока что нахожусь в городе где родился DeePro Engine :)) 12-ого только смогу взяться за кодинг, а поучавствовать ужасно хочется...
DRON
Avatar пользователя

Опубликовано 09.01.2009 16:50 (16 лет назад)    #
2Hexman
Ну вот я и говорю 5 дней еще добавить.
2ViZgl
А можешь дать С++ код физики авто? :)
ViZgl
Avatar пользователя

Опубликовано 09.01.2009 18:21 (16 лет назад)    #
DRON написал:
ViZgl
А можешь дать С++ код физики авто? :)


Вот лови :)

#ifndef __CAR_PHYSIC__
#define __CAR_PHYSIC__

#include <math.h>

float sgn(float t)
{
if (t == 0.0f) return 0;
return t < 0.0f ? -1.0f : 1.0f;
}

struct CarParameter
{
public:
float kAF; //Коэффициент трения о воздух и в подвеске
float MaxFRCY; //Максимальная продольная сила трения, выше - пробуксовка
float MaxFRCX; //Максимальная поперечная сила трения, выше - занос
float MaxRotFRC; //Максимальная сила трения вращения
//Примерные значения MaxFRCY, MaxFRCX и MaxRotFRC:
//для асфальта - 20, 20, 10
//для льда - 5, 5, 3
//для гравия - 10,15, 5

float Power; //Мощность движка в квт, деленная на массу в кг(1 л.с. = 736 ватт)
//При мощности 165 л.с. и массе 1 т. Power = 165 * 0.736 / 1000

float CarSpeed; //Максимальная скорость без учета трения в м/с (1 км/ч = 0.278 м/с)
float Radius; //Радиус поворота в м.
float CtrlSens; //Чувствительность управления
float carExBack; //Расстояние от задней оси до центра тяжести в м.

char KPPMaxstep; // Число ступеней передач вперед
float KPP[10]; // Коэффициенты КПП

vec2 carSize;
};

class Car
{
public:

// Глобальные параметры
float Accel; // Текущее положение педали газа
float Break; // Текущее положение педали тормоза
float Steer; // Текущее положение руля
unsigned char KPPstep; // Текущая передача

float Speed; //Скорость
float CarX; //Координата X центра тяжести машины
float CarY; //Координата Y центра тяжести машины
float Alpha; //Угол поворота корпуса вокруг вертикальной оси Z
float SpeedAlpha; //Скорость вращения
float SpeedX; //X компонента вектора скорости
float SpeedY; //Y компонента вектора скорости

bool bTurnLeft;
bool bTurnRight;
bool bForward;
bool bBackward;

// Локальные параметры(для расчета сил, дейстующих на машину)
float SpX; //Скорость по локальной оси X
float SpY; //Скорость по локальной оси Y
float FrcX; //Сила по локальной оси X
float FrcY; //Сила по локальной оси Y
float ForceX; //Сила по оси X
float ForceY; //Сила по оси Y
float RotFRC; //Момент силы вращения
float tmp;

// Параметры машины
float kAF; //Коэффициент трения о воздух и в подвеске
float MaxFRCY; //Максимальная продольная сила трения, выше - пробуксовка
float MaxFRCX; //Максимальная поперечная сила трения, выше - занос
float MaxRotFRC; //Максимальная сила трения вращения
//Примерные значения MaxFRCY, MaxFRCX и MaxRotFRC:
//для асфальта - 20, 20, 10
//для льда - 5, 5, 3
//для гравия - 10,15, 5

float Power; //Мощность движка в квт, деленная на массу в кг(1 л.с. = 736 ватт)
//При мощности 165 л.с. и массе 1 т. Power = 165 * 0.736 / 1000

float CarSpeed; //Максимальная скорость без учета трения в м/с (1 км/ч = 0.278 м/с)
float Radius; //Радиус поворота в м.
float CtrlSens; //Чувствительность управления
float carExBack; //Расстояние от задней оси до центра тяжести в м.

char KPPMaxstep; // Число ступеней передач вперед
float KPP[10]; // Коэффициенты КПП

vec2 carSize;
Texture tex;
public:
Car()
{
bTurnLeft = false;
bTurnRight = false;
bForward = false;
bBackward = false;
Accel = 0.0f;
Break = 0.0f;
Steer = 0.0f;
KPPstep = 0;
Speed = 0.0f;
CarX = 0.0f;
CarY = 0.0f;
Alpha = 0.0f;
SpeedAlpha = 0.0f;
SpeedX = 0.0f;
Speed = 0.0f;
}

Car(CarParameter& param)
{
bTurnLeft = false;
bTurnRight = false;
bForward = false;
bBackward = false;
Accel = 0.0f;
Break = 0.0f;
Steer = 0.0f;
KPPstep = 0;
Speed = 0.0f;
CarX = 0.0f;
CarY = 0.0f;
Alpha = 0.0f;
SpeedAlpha = 0.0f;
SpeedX = 0.0f;
Speed = 0.0f;
carSize = 0.0f;
SetupParameters(param);
}

~Car() {}

void SetupParameters(CarParameter& param)
{
kAF = param.kAF;
MaxFRCY = param.MaxFRCY;
MaxFRCX = param.MaxFRCX;
MaxRotFRC = param.MaxRotFRC;
Power = param.Power;
CarSpeed = param.CarSpeed;
Radius = param.Radius;
CtrlSens = param.CtrlSens;
carExBack = param.carExBack;
KPPMaxstep = param.KPPMaxstep;
carSize = param.carSize;
for (int i=0; i < 10; ++i)
{
KPP[i] = param.KPP[i];
}
}

void update(float dt)
{
// Локальные параметры(для расчета сил, дейстующих на машину)
SpX = 0.0f; //Скорость по локальной оси X
SpY = 0.0f; //Скорость по локальной оси Y
FrcX = 0.0f; //Сила по локальной оси X
FrcY = 0.0f; //Сила по локальной оси Y
ForceX = 0.0f; //Сила по оси X
ForceY = 0.0f; //Сила по оси Y
RotFRC = 0.0f; //Момент силы вращения
tmp = 0.0f;

if (bForward)
{ // газ
Accel = Accel + CtrlSens * dt;
if (Accel > 1) Accel = 1.0f;
}
else
{ // Холостые обороты
Accel = Accel - CtrlSens * dt;
if (Accel < 0.1f) Accel = 0.1f;
}

if (bBackward)
{ // Тормоз
Break = Break + dt * CtrlSens;
if (Break > 1.0f) Break = 1.0f;
}
else
{ // Выровнять
Break = Break - dt * CtrlSens;
if (Break < 0.0f) Break = 0.0f;
}


if (bTurnRight)
{ // Поворот влево
Steer = Steer + CtrlSens * dt;
if (Steer > 0.5f) Steer = 0.5f;
}
else
if (bTurnLeft)
{ // Поворот вправо
Steer = Steer - CtrlSens * dt;

if (Steer < -0.5f) Steer = -0.5f;
}
else
//Выровнять
if (abs(Steer) < CtrlSens)
{
Steer = 0.0f;
}
else
{
Steer = Steer - dt * CtrlSens * sgn(Steer);
}

// обнулить значения
bTurnLeft = false;
bTurnRight = false;
bForward = false;
bBackward = false;

// Перевод величин в локальную систему координат автомобиля
if (SpeedY > 0.0000001f)
{
tmp = atanf(SpeedX / SpeedY);
}
else
{
if (SpeedY < -0.0000001f)
{
tmp = pi + atanf(SpeedX / SpeedY);
}
else
tmp = 1.570796f * sgn(SpeedX);
}
tmp -= Alpha;
Speed = sqrtf(SpeedX * SpeedX + SpeedY * SpeedY);
SpX = -Speed * sinf(tmp);
SpY = Speed * cosf(tmp);

// Расчет сил
if (KPPstep == 0)
{
FrcY = 0.0f; // Продольная сила
}
else
{
FrcY = (KPP[KPPstep] * CarSpeed * Accel - SpY) * Power / (KPP[KPPstep] * KPP[KPPstep]);
}

FrcY = FrcY - (Break / dt + kAF) * sgn(SpY);
FrcX = (-SpY * Steer * carExBack / Radius - SpX) / dt;

if (abs(FrcX) > MaxFRCX)
{
FrcX = MaxFRCX * sgn(FrcX); // занос
}

if (abs(FrcY) > MaxFRCY)
{
FrcY = MaxFRCY * sgn(FrcY); // пробуксовка
}

if (KPPstep == 0)
{
tmp = 0.0f;
}
else
{
tmp = 2.0f / (abs(KPP[KPPstep]) * CarSpeed);
}

RotFRC = (Steer * SpY / Radius - SpeedAlpha + SpX * Accel * tmp) / dt;
tmp = MaxRotFRC * (CarSpeed - SpY) / CarSpeed;
if (abs(RotFRC) > tmp)
{
RotFRC = sgn(RotFRC) * tmp;
}

// Перевод величин в мировую систему координат
ForceY = FrcY * cosf(Alpha) + FrcX * sinf(Alpha);
ForceX = FrcY * sinf(Alpha) - FrcX * cosf(Alpha);

SpeedAlpha += RotFRC *dt;
SpeedX += ForceX * dt;
SpeedY += ForceY * dt;
Alpha += SpeedAlpha * dt;
CarX += SpeedX * dt;
CarY -= SpeedY * dt;
}

void turnLeft()
{
bTurnLeft = true;
}

void turnRight()
{
bTurnRight = true;
}

void pressGas()
{
bForward = true;
}

void pressBreak()
{
bBackward = true;
}

void NextKPPStep()
{ // Передача +
if (KPPstep == 9)
KPPstep = 0;
else
if (KPPstep < KPPMaxstep)
{
KPPstep += 1;
}
}

void BackKPPStep()
{ // Передача -
if (KPPstep == 9) return;
else
if (KPPstep == 0)
{
KPPstep = 9;
}
else
{
if (KPPstep > 0)
{
KPPstep -= 1;
}
}
}

void render()
{ // !!!!!!!!!!!!!!!!!!!!!
glPushMatrix();
glTranslatef(CarX, CarY, 0.0f);
glRotatef(Alpha * 180.0f/pi, 0.0f, 0.0f, 1.0f);


tex.bind();

glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex2f( - carSize.x, -carSize.y);
glTexCoord2f(0.0f, 0.0f); glVertex2f( - carSize.x, carSize.y);
glTexCoord2f(1.0f, 0.0f); glVertex2f( carSize.x, carSize.y);
glTexCoord2f(1.0f, 1.0f); glVertex2f( carSize.x, -carSize.y);
glEnd();

tex.unbind();
glPopMatrix();
}
};

#endif
beisik
Avatar пользователя

Опубликовано 09.01.2009 18:35 (16 лет назад)    #
ViZgl
Вау, почти готовая игра =) Может тоже скопи/пастить =)
Adler
Avatar пользователя

Опубликовано 09.01.2009 23:16 (16 лет назад)    #
блин, как ужасно, когда уже что-то работает и можно играть, но не удобно и не красиво. А ещё ужаснее то, что это невольно отвлекает от кодинга. Приходится всё отрубать и смотреть исключительно на то что отлаживается или приделывается. Так я уже отключил менюшку и убрал все объекты с цены. Клаву тоже вырубил. Оставил только мап, который сейчас настраиваю под редактор. :)
DRON
Avatar пользователя

Опубликовано 10.01.2009 06:06 (16 лет назад)    #
2ViZgl
Сенкс, сэкономил мне день работы :))
2Adler
А у меня много времени на подготовку графики уходит... саму игру накодить будет думаю довольно быстро.
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 10.01.2009 07:27 (16 лет назад)    #

Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 10.01.2009 07:38 (16 лет назад)    #
Ну не круто ли?
Сам удивился - это мое величайшее достижение в моделировании :)
как бы теперь сделать еще парочку.
А самое прикольное, что эти модели нужны только для текстуры вида сверху и карты освещения (я тоже разобрался и решил добавить бампа - для объема)
У меня есть модель передвижения, половина стрельбы (тока ракетки), аи, наворачивающий круги по маршруту, пыль, дым, следы шин, ускорение. Еще немного кривая модель передвижения - как по льду, заносы регулярно.
Нужно - коллизии, трамплины, всякие красивости, научить компа стрельбаться, сделать трассы и еще может чего.

Концепция - гонки по пустыне(ну или что-то апокалиптическое) со взрывами, вхождение в минимальные радиусы поворотов и стрельба. Хардрок в комплект не входит (качественные треки просто не влезут).
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 10.01.2009 07:38 (16 лет назад)    #
Да я тоже за +5 дней
Division
Avatar пользователя

Опубликовано 10.01.2009 09:26 (16 лет назад)    #
Mefistofel
Моделька прикольная) Будешь учить ИИ входить в минимальный радиус поворота? Я вот тоже думаю не помешает.
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 10.01.2009 09:44 (16 лет назад)    #
Сейчас ии просто едет к конечной точке маршрута, доедет - возьмет следующую и тд. При это он входит во все повороты с математической точностью и офигительным заносом - ему то все равно.
Если его еще и в минимальные радиусы научить входить (маршрут то есть так составлять) он вообще всех рвать будет - это не нужно.
Я хочу его как нибудь поинтереснее сделать, может читерить его научить? Типа обгоняет тебя - снизить скорость, отстает - повысить?
Думаю сделать на точках маршрута метки - типа обычная метка - просто ехать, здесь поворот - притормози, здесь прямая - можно целится и стрелять, здезь узко - ставь мины и тд.
DRON
Avatar пользователя

Опубликовано 10.01.2009 09:49 (16 лет назад)    #
Мда у меня вообще пока ничего нет :( зато разум чист для новых идей :))) И по сравнению с вами будет Lo-gen, вообще я подумаю и может заюзаю пару фишек DPE хотя не хочется раньше времени :))) Думаю HDR с паралаксом будуи красиво сомтреться :) хотя не не буду... передумал... буду следовать плану ))))) у меня будут свои башнесносительные вещи о которых я не расскажу ))))

редакция от DRON, 10.01.2009 09:54

Soulghai
Avatar пользователя

Опубликовано 10.01.2009 10:04 (16 лет назад)    #
to ViZgl
А какие параметры задать изначально нужно для твоего кода )
а-то на Делфи перевёл, а машинку с места сдвинуть не могу )).
grouzdev
Администратор
Avatar пользователя

Опубликовано 10.01.2009 13:49 (16 лет назад)    #
Mefistofel, очень круто
Страница 6 из 12 << < 3 4 5 6 7 8 9 > >>
Перейти на форум:
Конкурсы
Открытые конкурсы:
Активных нет
Недавние конкурсы:
 186 - Strategy
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

26,159,326 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.