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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Темы форума
Привет выжившие
14.05.2024
 Kaps
WoL
1.05.2024
 VoroneTZ
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
RES - Движок для пик…
27.09.2023
 rimush
177 - One Button Str…
20.09.2023
 VoroneTZ
JS 13k contest
13.09.2023
 Mefistofel
184 - Arcade II
14.08.2023
 tiger1025
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

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

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

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

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

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

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

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

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


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

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


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

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

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

Опубликовано 09.01.2009 18:21 (15 лет назад)    #
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 (15 лет назад)    #
ViZgl
Вау, почти готовая игра =) Может тоже скопи/пастить =)
Adler
Avatar пользователя

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

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

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

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

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

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

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

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

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

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

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

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

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

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

186!

GTA
0% [0 Голосов]
Стратегия
50% [3 Голосов]
Гонки
17% [1 Голос]
Мультяшная
0% [0 Голосов]
Хорор
0% [0 Голосов]
Вид сверху
33% [2 Голосов]
Свое
0% [0 Голосов]

Голосов: 6
Начало: 14.05.2024 21:08

Для доступа к голосованию, у вас должно быть 10 сообщений на форуме.
 Архив опросов
Мини-чат
Вам необходимо залогиниться.

Архив чата

25,432,994 уникальных посетителей

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