Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Самописная игра: "Миссия МЧС" | страница 3
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 3 из 4
На страницу: Пред.  1, 2, 3, 4  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Самописная игра: "Миссия МЧС"»
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
ТехноМаг :
Вот тут: https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb147325(v=vs.85).aspx примерчик есть.

Это я уже понял, что вершины соединяются по часовой стрелке и именно в такой последовательности.
Меня заботит не то как это будет отрендерено и индексные буферы - мне не подходят, так как у меня значения vertex'ов постоянно изменяются. Смысл из записывать в буфер, если на следующем кадре X,Y уже другие с точностью до тысячных? Никаких буферов не хватит...

Вот собственно картина:
 Cкрытый текст   (кликните здесь для просмотра)

На ней красным обозначены номера точек, которые вызывают непонимание.
Если первый ряд алгоритмически понятно как сделать, то со вторым рядом уже непонятно: координата по Y у места соединения 26 должна быть та же, что и у места 3. Но только это не номера точек - это последовательность их соединения.
В общем не соображу какой должен быть алгоритм, хотя я его уже нарисовал...
Видимо, я пытаюсь осилить плоскость с неизвестным числом этих самых треугольников.
Попробую дорисовать эти квадраты дальше, может на двух строках получится понять...
    Добавлено: 14:12 02-01-2016   
ТехноМаг
 360 EGP


Рейтинг канала: 2(18)
Репутация: 93
Сообщения: 2507
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
Ну у тебя количество-то тоже? Тогда разницы никакой. А вообще я тебе в приват скайп скинул. Сегодня поздно вечером/завтра можно будет подрындеть на эту тему.
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
    Добавлено: 14:50 02-01-2016   
Криптон
 995 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
БулерМэн :
Но только это не номера точек - это последовательность их соединения
Разве не очевидно? Надо хранить массив объектов/структур (в зависимости от используемого языка) типа "точка". Сетку треугольников (т.е "что с чем соединяется") хранить, упоминая точки по номерам в этом массиве. Координаты точек хранить в свойствах/полях объектов/структур.

добавлено спустя 4 минуты:
Ну или я так и не понял смысл проблемы Совсем запутался...

Последний раз редактировалось: Криптон (14:59 02-01-2016), всего редактировалось 1 раз
    Добавлено: 14:59 02-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Криптон :
Координаты точек хранить в свойствах/полях объектов/структур.

Насколько я помню, этот путь отжирает скорострельность игры.
Многомерные структуры я уже реализовал, хоть они и быстрые - но все равно не дотягивают до "генерации на лету".

То есть, представь себе, что у тебя есть заранее известное количество точек. Нам нужны лишь координаты глубины, т.к. плоскость фиксированного размера и шага, поэтому
z_chord[x,y] (или си-подобнее - z_chord[x][y] )

Чтобы получить новую геометрию - в каждом кадре анимации умножаем значения массива z_chord[x,y] на соответствующий этой точке коэффициент, получая в итоге эффект волны.

Далее, нам нужно отрисовать 3d-сетку, которая "знает" о количестве точек по ширине и о количестве точек по высоте в данной сетке.

Криптон :
Сетку треугольников (т.е "что с чем соединяется") хранить, упоминая точки по номерам в этом массиве.

В том то и дело, что я не знаю какие с какими точки соединять Гы-гы Иб бин 33 квадрата по ширине и 29 квадратов по высоте, итого - 1914 треугольников, и 5742 точки! Предлагаешь вручную туда их забить?

Допустим, по вышеописанному - можно сказать, что координаты точек я знаю, но
Криптон :
Сетку треугольников (т.е "что с чем соединяется") хранить, упоминая точки по номерам в этом массиве.

я не понимаю как получить эту сетку Расстроен Вручную разбирать и записывать в тексте все вершины - влом.
Или все настолько очевидно - а я туплю Гы-гы

добавлено спустя 7 минут:
ЗЫ Ладно товарищи, придется таки создать в 3dsmax эту большую сетку и посмотреть в тексте выходного OBJ-файла - что с чем соединяется.
Может дойдет до меня наконец.

Последний раз редактировалось: БулерМэн (17:25 02-01-2016), всего редактировалось 3 раз(а)
    Добавлено: 17:25 02-01-2016   
Криптон
 995 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
БулерМэн :
Предлагаешь вручную туда их забить?

Объявляешь двумерный массив
Код:

var
  Points: array [0..33, 0..29] of TPoint;

(содержимое структуры/класса TPoint выбираешь под свои потребности. Я предполагаю, что там есть вещественные поля x,y,z)

На этапе инициализации:
Код:

const
  C_coeff = 0.01; {подобрать число в зависимости от размеров сцены}
var
  i, j: integer;
begin
  for i := 0 to 33 do
    for j := 0 to 29 do
    begin
      Points[i,j].x := i * C_coeff;
      Points[i,j].y := j * C_coeff;
    end;
end;

Координаты x, y у нас заполнены
На этапе построения каждого кадра - перерассчитываем координату z:
Код:

var
  i, j: integer;
begin
  for i := 0 to 33 do
    for j := 0 to 29 do
      Points[i,j].z := Z_Coord(Points[i,j].x, Points[i,j].y); {Некая функция, рассчитывающая координату z}
end;

И, наконец, выводим треугольники:
Код:

var
  i, j: integer;
begin
  for i := 0 to 32 do //Диапазон перебора на единицу меньше
    for j := 0 to 28 do //Диапазон перебора на единицу меньше
    begin
      //Этот кусок можно (и даже нужно) изложить иначе, я постарался написать максимально наглядно (и игнорируя снижение скорости исполнения).
      //Кроме координат, может потребоваться вывод glColor4f, glNormal3f и т.д., но тогда в TPoint нужны соответствующие поля

      //Отрисовываем один "квадратик" сетки
      //Первый треугольник
      glBegin(GL_TRIANGLES);
        glVertex3f(Points[i,j].X, Points[i,j].Y, Points[i,j].Z);
        glVertex3f(Points[i+1,j].X, Points[i+1,j].Y, Points[i+1,j].Z);
        glVertex3f(Points[i+1,j+1].X, Points[i+1,j+1].Y, Points[i+1,j+1].Z);
      glEnd;
      //Второй треугольник
      glBegin(GL_TRIANGLES);
        glVertex3f(Points[i+1,j+1].X, Points[i+1,j+1].Y, Points[i+1,j+1].Z);
        glVertex3f(Points[i,j+1].X, Points[i,j+1].Y, Points[i,j+1].Z);
        glVertex3f(Points[i,j].X, Points[i,j].Y, Points[i,j].Z);
      glEnd;
    end;
end;

Если я нигде не облажался (последний раз использовал OpenGL полтора года назад), то должно работать.

добавлено спустя 3 минуты:
Таким образом массив Points задаёт сетку, а поля структур TPoint - координаты конкретных точек.

Последний раз редактировалось: Криптон (18:41 02-01-2016), всего редактировалось 4 раз(а)
    Добавлено: 18:37 02-01-2016   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
как пошёл код, кажется понял чего так тщетно допытывается автор, как одним проходом без повторов забрать все вершины, GL_TRIANGLE_STRIP Улыбка

но вообще вершины сейчас принято дублировать для каждого треугольника, это потому что без нормалей и тангентов мало чего путного изобразишь, и лучче конечно освоить шейдеры, раз они есть в мейкере, это как раз то что дохтур прописал, можно даже не особо вдаваться в нижележащую математику
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 20:13 02-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Криптон :
for i := 0 to 33 do
for j := 0 to 29 do
begin
Points[i,j].x := i * C_coeff;
Points[i,j].y := j * C_coeff;
end;

Инетересный подход. Но у нас разные языки программирования: в моем случае запись вида "Нечто.X" это объект с переменной X.
В твоем примере - получается, что двумерный массив это объект, у которого есть координаты X,Y,Z, так получается?
Потом, почему я бы сказал что этот код не подходит, понятно что это пример, но - вложенные циклы! Много вложенных циклов - на GameMaker'e - не взлетит... Да и ~5 тыс. объектов реально тормознут игру. Такие фокусы я уже проделывал в одной своей игре, но опять таки - тормоза и не вариант.
Да, наверное такая реализация будет работать, но чрезвычайно медленно Расстроен
Sh.Tac. :
кажется понял чего так тщетно допытывается автор, как одним проходом без повторов забрать все вершины, GL_TRIANGLE_STRIP

Да, используется режим TRIANGLE_STRIP.

Вот пример реализации:
где
d3d_vertex_texture(x,y,z,xtex,ytex) Add vertex (x,y,z) to the primitive with position (xtex,ytex) in the texture, blending with the color and alpha value set before.

То есть я вместо того, чтобы рисовать просто треугольники - рисую сразу текстурируемые треугольники.
 Cкрытый текст   (кликните здесь для просмотра)

Код:

                /////////////////////////////////////
                d3d_vertex_texture(//1+
                i*secure_x,
                z_chord[i,n]*secure_x+n*secure_y,
                z_chord[i,n]*secure_x+n*secure_y,
                0,0//i*secure_x, n*secure_y
                );
               
                d3d_vertex_texture(//2+
                i*secure_x,
                z_chord[i,n+1]*secure_x+(n+1)*secure_y,
                z_chord[i,n+1]*secure_x+(n+1)*secure_y,
                0,0//i*secure_x, n*secure_y
                );
               
                d3d_vertex_texture(//3+
                (i+1)*secure_x,
                z_chord[i+1,n+1]*secure_x+(n+1)*secure_y,
                z_chord[i+1,n+1]*secure_x+(n+1)*secure_y,
                0,0//i*secure_x, n*secure_y
                );
               
                d3d_vertex_texture(//4+
                i*secure_x,
                z_chord[i,n]*secure_x+n*secure_y,
                z_chord[i,n]*secure_x+n*secure_y,
                0,0//i*secure_x, n*secure_y
                );
               
                 d3d_vertex_texture(//5+
                (i+1)*secure_x,
                z_chord[i+1,n]*secure_x+n*secure_y,
                z_chord[i+1,n]*secure_x+n*secure_y,
                0,0//i*secure_x, n*secure_y
                );   
                         
                d3d_vertex_texture(//6+
                i*secure_x,
                z_chord[i,n]*secure_x+n*secure_y,
                z_chord[i,n]*secure_x+n*secure_y,
                0,0//i*secure_x, n*secure_y
                );
               
                d3d_vertex_texture(//7+
                (i+1)*secure_x,
                z_chord[i+1,n+1]*secure_x+(n+1)*secure_y,
                z_chord[i+1,n+1]*secure_x+(n+1)*secure_y,
                0,0//i*secure_x, n*secure_y
                );               
                                 
                d3d_vertex_texture(//8+
                (i+1)*secure_x,
                z_chord[i+1,n]*secure_x+n*secure_y,
                z_chord[i+1,n]*secure_x+n*secure_y,
                0,0//i*secure_x, n*secure_y
                );

Это существенно экономит время процессора.
Наверное вы заметили, что используется 4 вершины на текстурный треугольник.

На счет шейдеров в GM. В частности GM8 и 8.1 - цитирую:
http://forum.hellroom.ru/index.php?topic=22077.0 :
На ГМ8 нельзя писать шейдеры, потому как шейдер это программа для видеокарты. Собственно если извратиться то её можно и не для изображения использовать.

То есть, оптимальным вариантом для данного решения - рисование сетки с заготовленными заранее текстурами.
Для сравнения: объекты со спрайтами - дают 6-10 FPS на моем не очень быстром процессоре AMD 2гГц и встроенной видеокарте nVidia. В противовес ставим "треугольники" в текущей кривой реализации - 12-14 FPS.
Sh.Tac. :
но вообще вершины сейчас принято дублировать для каждого треугольника,

Ты имеешь в виду дублировать вообще все вершины?! Это же адово медленно будет... И вопрос - зачем?

Последний раз редактировалось: БулерМэн (21:28 02-01-2016), всего редактировалось 3 раз(а)
    Добавлено: 21:18 02-01-2016   
Криптон
 995 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
БулерМэн :
что двумерный массив это объект, у которого есть координаты X,Y,Z, так получается?
Нет, это двумерный массив, каждый из элементов которого - объект (хотя я больше предпочитаю структуры - в Дельфи для них память выделяется/освобождается автоматом, и накладных расходов меньше, потому что не поддерживается наследственность). И запись вида "Points[i,j].x := i * C_coeff" означает, что взять элемент с индексами i и j, и в поле x этого элемента записать значение i * C_coeff.
По-моему, в Си такое тоже можно сделать.

БулерМэн :
на GameMaker'e - не взлетит
Да, насчёт возможностей GameMaker'а я не в курсе. Жаль, что там простейшие вещи сделать нельзя Расстроен

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

добавлено спустя 6 минут:
Криптон :
По-моему, в Си такое тоже можно сделать.

Вроде, как-то так:
Код:

//объявляем структуру "Точка"
struct Point
{
float x;
float y;
float z;
}

//Объявляем двумерный массив точек
Point data[33][29];

Но в сях я разбираюсь слабо...

Последний раз редактировалось: Криптон (22:00 02-01-2016), всего редактировалось 1 раз
    Добавлено: 22:00 02-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Криптон :
Нет, это двумерный массив, каждый из элементов которого - объект

понятно, жаль в GML такие фокусы не работают - язык довольно простой.
Криптон :
в Дельфи для них память выделяется/освобождается автоматом,

Автоматом в GML высвобождается память только если сам укажешь ее освободить. Но наверное это не автомат. И кажется даже не пистолет Гы-гы
Криптон :
По-моему, в Си такое тоже можно сделать.

Можно, структуры там похоже работают, но у меня нет великого желания переписывать игру на Си, хотя я работал с графикой OpenGl на Си. Но по сравнению с GML - Си это ассемблер Улыбка
Криптон :
Жаль, что там простейшие вещи сделать нельзя

Почему, можно, просто циклы на интерпретируемом языке - отнимают много времени. Я так понимаю, что разработчики GM - не стали заморачиваться на тему трансляции в машинный код пользовательского кода, а оставили в открытом виде. Отсюда тормоза, в отличии от программ например на TurboPascal в среде Lazarus.
Криптон :
нужно чёткую грань нарисовать, а не плавный переход.

Вот как раз четких граней мне не надо Гы-гы Я от них старательно избавиться хочу...
    Добавлено: 22:04 02-01-2016   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
БулерМэн :
На счет шейдеров в GM. В частности GM8 и 8.1 - цитирую:
как-то это несколько отличается от чуть более раннего Улыбка
Цитата:
В GAmeMakerStudio (то есть версия старше 8.1) - есть возможность работы с шейдерами, но придется переделывать ВЕСЬ код
как программаст могу лишь отметить, что переписывать код полезно, и лучче с чистого листа
ведь это очень печально, когда видение и понимание изменились, а код нет
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 13:10 04-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Sh.Tac. :
есть возможность работы с шейдерами, но придется переделывать ВЕСЬ код

зачем мне переписывать весь код, если у меня видеокарта не поддерживает шейдеры? М? Хы...
    Добавлено: 15:48 04-01-2016   
ТехноМаг
 360 EGP


Рейтинг канала: 2(18)
Репутация: 93
Сообщения: 2507
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
БулерМэн :
если у меня видеокарта не поддерживает шейдеры?


Это извени меня какая видеокарта у тебя. VooDoo штоли?
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
    Добавлено: 21:26 06-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
ТехноМаг :
Это извени меня какая видеокарта у тебя. VooDoo штоли?


 Cкрытый текст   (кликните здесь для просмотра)




Хм. Думал CUDA нет в моей карте, а она внезапно есть Подозрение.
    Добавлено: 23:01 06-01-2016   
ТехноМаг
 360 EGP


Рейтинг канала: 2(18)
Репутация: 93
Сообщения: 2507
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
БулерМэн :
Думал CUDA нет в моей карте


Я что-то совсем запутался. При чем тут CUDA и шейдеры? Что-то Вы путаете, батенька Подозрение.

6150 - 2ая модель пиксельных и вершинных шейдеров (даже вроде 3ая там уже есть, но точно не помню). Да. 3ая есть ( http://www.nvidia.ru/page/legacy_gpu_mobo_features.html )

Куда немножко не из этой серии. Это. Ты в скайпе ответил? Я через пару часиков до дома доберусь - посмотрю.
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."

Последний раз редактировалось: ТехноМаг (08:34 07-01-2016), всего редактировалось 3 раз(а)
    Добавлено: 08:09 07-01-2016   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
FFP видеокарт, то есть без шейдеров на рынке уже нет давно..
_________________
MOV topka, C++
    Добавлено: 21:04 07-01-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Апну темку, работа по игре стоит, ровно так как пожирает все время работа... но борьба с этим идет Гы-гы
    Добавлено: 18:35 26-09-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Внезапно нашлось время пофиксить некоторые баги в основной игре.
Теперь самолет взрывается корректно при столкновении со зданиями Хы...
    Добавлено: 23:53 27-09-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006

Вам тут самолет к подъезду подали Улыбка
    Добавлено: 02:10 30-09-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Дорогу осилит идущий, это как раз про эту игру Гы-гы
Переделал сетку на trianglelist и добавил UV-координаты текстуры, получилась вот такая поверхность:

Гифка 1,7 мБ
 Cкрытый текст   (кликните здесь для просмотра)


Видео, кликабельно, 1.3 мБ, Яндекс.Диск
Нажимайте кнопку "Сохранить" если не воспроизводится через сам Яндекс.

FPS в оригинале - 30. На видео, за счет того, что программа захвата тоже отнимает ресурсы компьютера - FPS падает.




На мой взгляд - похоже на волны на воде. А вы как считаете?

Последний раз редактировалось: БулерМэн (06:12 31-12-2016), всего редактировалось 1 раз
    Добавлено: 05:26 31-12-2016   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Похоже на синее желе, намазанное на лист бумаги, который кто-то пускает волнами. А UV-сдвиг никак не сделать?
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 09:55 31-12-2016   
Канал Игры Мечты: «Самописная игра: "Миссия МЧС"»
На страницу: Пред.  1, 2, 3, 4  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Ибо логично предположить, что если недостаточно чего-либо для запуска чего-либо, то второе чего-либо, а именно то, для которого не хватает - вообще не должно запускаться. (неизвестный пилот)

  » Самописная игра: "Миссия МЧС" | страница 3
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18