ФлеймФорумПрограммирование

Разбить 3д модель здания на сферы, для препятствия. (3 стр)

Страницы: 1 2 3 4 511 Следующая »
#30
15:33, 18 ноя 2022

ronniko
А, в смысле зачем сделали методом а не симметричной свободной функцией? Это синтаксические приколы, тут я хз.
Короче у тебя на самом деле 2д задача "круг-линия", и эти формулы тебе не нужны

#31
16:00, 18 ноя 2022

Оно ?

//Поэтому входные параметры - это радиус окружности и коэффициенты A,B,C уравнения прямой.
double r, a, b, c; // входные данные

double x0 = -a*c/(a*a+b*b),  y0 = -b*c/(a*a+b*b);
if (c*c > r*r*(a*a+b*b)+EPS)
  puts ("no points");
else if (abs (c*c - r*r*(a*a+b*b)) < EPS) {
  puts ("1 point");
  cout << x0 << ' ' << y0 << '\n';
}
else {
  double d = r*r - c*c/(a*a+b*b);
  double mult = sqrt (d / (a*a+b*b));
  double ax,ay,bx,by;
  ax = x0 + b * mult;
  bx = x0 - b * mult;
  ay = y0 - a * mult;
  by = y0 + a * mult;
  puts ("2 points");
  cout << ax << ' ' << ay << '\n' << bx << ' ' << by << '\n';
}
#32
16:03, 18 ноя 2022

ronniko
Если ты могешь писать код на крестах, зачем ты пишешь игоря на асме?

#33
16:03, 18 ноя 2022

https://gamedev.ru/code/forum/?id=40808

#34
(Правка: 16:11) 16:05, 18 ноя 2022

Если ты могешь писать код на крестах, зачем ты пишешь игоря на асме?

Люблю асм. Свободу стиля кода и малый размер экзешника.
Ненавижу саму жирную, медленную и ужасную Visual studio, варнинги и подключение либ и долгую компиляцию.

#35
(Правка: 16:21) 16:12, 18 ноя 2022

https://gamedev.ru/code/forum/?id=40808
Тарас это подойдет ? Выглядит прелестно и просто.

//x,y,r - координаты круга
//x01,y01,x02,y02 - координаты отрезка

inline bool cCross(float x, float y, float r, float x01, float y01, float x02, float y02)
{
float rr=r*r;

  //Проверка на нахождение одного из концов отрезка в круге
  if ((x01-x)*(x01-x)+(y01-y)*(y01-y)<=rr) return true;
  if ((x02-x)*(x02-x)+(y02-y)*(y02-y)<=rr) return true;
#36
16:38, 18 ноя 2022

ronniko
> -a*c/(a*a+b*b)
Уравнение прямой изначально должно быть нормировано, так что для правтльно набора это лишнее деление. А так вроде оно

#37
16:56, 18 ноя 2022

Такой еще нашёл вариант.
https://www.geeksforgeeks.org/check-line-touches-intersects-circle/

#include <bits/stdc++.h>
using namespace std;
 
void checkCollision(int a, int b, int c,
                  int x, int y, int radius)
{
    // Finding the distance of line from center.
    int dist = (abs(a * x + b * y + c)) /
                     sqrt(a * a + b * b);
 
    // Checking if the distance is less than,
    // greater than or equal to radius.
    if (radius == dist)
        cout << "Touch" << endl;
    else if (radius > dist)
        cout << "Intersect" << endl;
    else
        cout << "Outside" << endl;
}
 
// Driven Program
int main()
{
    int radius = 5;
    int x = 0, y = 0;
    int a = 3, b = 4, c = 25;
    checkCollision(a, b, c, x, y, radius);
    return 0;
}
#38
17:49, 18 ноя 2022

ronniko
не надо никаких полигонов и никаких прямых,
чтобы сделать молниеносный коллижн.

"теория" на пальцах:

1. Позиции всех вертексов  сваливаешь в 3d разряженный массив M.
2. Где индексы = PositionVertex % D
3. D расстояние срабатывания коллижена.
4. Если у перса PositionPers, то просто смотришь PositionPers % D в мапе M
5. Если оно тама есть, то детекшен коллижен тру.

мапа M будет у тя похлеще октодерева!

)))

сложность поиска двоичный логарифм, т.е
для 1'000'000 полигонов имеем 3'000'000 индексных точек в M.
то в мапе нужно будет сделать всего 21 сравнения.

поэтому и молниеносно.

но есть ограничения и требования к настройке сего алгоритма, но это уже мелочи...

#39
18:07, 18 ноя 2022

Нашел такое объяснение.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#40
18:21, 18 ноя 2022


  xlat-code
 

1. Позиции всех вертексов  сваливаешь в 3d разряженный массив M.

Допусти.
Тогда у меня один и тотже дом в трех местах на карте.
Как быть ?
Это же надо прибавлять к вертех world position.

Где индексы = PositionVertex % D

А значит с этим могут быть не состыковки.

#41
18:28, 18 ноя 2022

ronniko
> Как быть ?
умножь мировую матрицу на вертексы модели и положи в М.

ronniko
алгоритм то понятен?

это не троллинг.
проверял на 2D.
т.е. хочу сказать что это реально работает.

#42
18:45, 18 ноя 2022

умножь мировую матрицу на вертексы модели и положи в М.

То есть 20 раз продублировать дом на 8 000 вершин.
10 раз продублировать дом на 12 000 вершин.
12 раз продублировать дом на 4 000 вершин.

А я думаю зачем так много ОЗУ надо игре war z
Минимум 8 гиг.

#43
18:52, 18 ноя 2022

ronniko
> А значит с этим могут быть не состыковки.
чо за фигня,
даю революционную технолоджу, а они - господа носом воротят)

> проверял на 2D.
быстрый коллижен | Разбить 3д модель здания на сферы, для препятствия.
в тесте 9 файлов, но сам суть тут:

+ Показать

ВНИМАНИЕ, это всего лишь нано-тест!

#44
18:56, 18 ноя 2022

Твой алгоритм для 2д можно.
Для 3д есть косяк.
Большой треугольник.
Ты предлагаешь вершины проверять.
И будет герой проходить через большой треугольник. Потому что расстояние большое от вершины, до вершины.

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

Страницы: 1 2 3 4 511 Следующая »
ФлеймФорумПрограммирование