Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Xynta

Автор Алексей Гринь, июня 4, 2009, 03:43

0 Пользователи и 1 гость просматривают эту тему.

Алексей Гринь



Решил попробовать себя в OpenGL и игростроении  8-)
Файл приложен к посту.

Такие вот комментарии отнумерованные:
0) вообще проект недоделан абсолютно, 1% я бы сказал
1) написано на gnu с++ за неделю
2) первый мой "вдумчивый" проект на с++
3) первый мой проект на опенгл  8-)
4) вообще я недолюбливаю с++, но я уже пытался организовать игровой двиг на ansi c, заколебался эмулировать ООП его средствами (тут мой мозг бесповоротно испорчен, не могу думать иначе), а в objective c все методы виртуальные, на метод-диспатчинг для отрисовки одного кадра требуется слишком времени, время деньги, как говорится
5) выбрал опенгл, потому шо интерфейсы директикса придумали больные на голову люди
6) так как я параноик и люблю иметь контроль АБСОЛЮТНО надо всем (а так же, чтобы нейминг конвеншн везде был один и тот же, а то в одной либе одно, в другой -- другое, ну их), не используются никакие сторонние и родные либы, включая загрузку текстур из бмп и хеш-таблицы, всё написано с любовью вручную
7) собственный формат сцен, который редактируется в простеньком редакторе, написанном на сишарпе =\

8) управление обычное - мышка плюс стрелки
9) надеюсь, что запустится без проблем где-то вне моего ноутбука. не гарантирую, что работает на нвидиа
10) в откомпиленном эксешнике включён режим отображения невидимой геометрии, красным изображены ограничители пространства, зелёным -- вейпойнты (скрыты в траве где-то)
11) многое придумывал с нуля (например такую банальную вещь как расчёт расстояния между двумя тридэ точками), стараясь не пользоваться нетом, ибо в школе я прогуливал стереометрию, надо типа мозги тренировать и доходить до всего самому
12) вырубается по alt+f4 ;)
13) писал я это всё на старом ноуте, до того как пролил на него чяй; сейчас он починен, данные восстановлены, собираюсь продолжать подвиги, поэтому и пишу сей пост
14) игровой мир должен быть мегакрут =\
15) от кайлов лучше подальше убежать, а то можно застрять, когда они окружат, из-за того, что описано далее
16) да, я быдлокодер

Какие проблемы у меня, вдруг кто поможет:
1) сглаживание алиасинга внутри отбленденной текстуры. Т.е., берётся RGBшная бмп-текстура, чисто чёрный цвет (0, 0, 0) заменяется на типа альфа-канал, в итоге получаем RGBA и скармливаем опенглу. Так вот, по контуру вырезанной какбэ картинки получается лесенка. Её хрен сгладишь. Опенгл умеет, как я понял, только края полигонов, линий и всё. Вообщем, я читал, что можно рендерить в буфер, в 2 или 4 раза больший, чем экран, с лучшим качеством, затем типа ужимать, и в итоге типа антиалиасинг. Но я не вкурил как это делать. Мультисемплинг (чо-то как-то так, забыл терминологию за 3 месяца) для краёв полигонов, линий и прочих примитивов у меня уже включён (расширение ARB_Multisample), можете проверить в проге на линиях.
2) не знаю, как по-умному реализовать "скольжение" объектов при столкновении. Вообщем, имеем точку, где находится объект сейчас, и точку, где он должен быть в следующий раз. Объекты имеют опримитивленные формы шара (персы; шар = точка центра и диаметр или радиус) и прямоугольника (ограничители пространства; прямоугольник состоит из 4 точек-вершин). Как определить в какую сторону скользить (вправо или влево)? Я чо-то завис.

Вот такие пироги.

P.S. вообще дело не в графике, а в геймплее и сложности игрового мира, который я задумал. но красивую более-менее картинку тоже хочется иметь...
肏! Τίς πέπορδε;

Bhudh

Алексей, вообще-то на играх системные требования пишут!!!
У меня чуть винда не вылетела!!! :)


Цитата: Алексей Гринь11) многое придумывал с нуля (например такую банальную вещь как расчёт расстояния между двумя тридэ точками)
Помню, как сам сию формулу вычислял... ::) И как удивился, что она такая длинная. ;D
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

myst


Алексей Гринь

Цитата: myst от июня  4, 2009, 16:05
А Цэ с решёткой чем не устроил?
p/invoke при каждом вызове opengl-функции? их за отрисовку одного кадра столько вызывается, оверхед гигантский наверно

Цитата: Bhudh от июня  4, 2009, 15:35
У меня чуть винда не вылетела!!! :)
не понял? а что было? там юзаются стандартные функции и стандартные расширения (АРБ) опенгла и стандартные сишные функции чтения с файлов. что случилос? ничо такого там нет, чтоб вылетало =\
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июня  4, 2009, 17:55
p/invoke при каждом вызове opengl-функции? их за отрисовку одного кадра столько вызывается, оверхед гигантский наверно
Там же вроде поддержка 3D кака-та была. Или это только для DirectX?

Bhudh

Сглупил. У меня OpenGL вообще не установлен. Только DirectX.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Алексей Гринь

Цитата: Bhudh от июня  4, 2009, 17:59
У меня OpenGL вообще не установлен.
Ну дела.

Цитата: myst от июня  4, 2009, 17:57
Там же вроде поддержка 3D кака-та была. Или это только для DirectX?
Только директикс. Для опенгл есть вообще-то Tao Framework, и я, в принципе, уже под него немного пытался что-то смастерить. Вся эта замута с п/инвоком слишком медленная, муторная, уж лучше обжектив си тогда :)
Пробовал также и XNA, но, блин, чтобы, блин, отрисовать шарик на чёрном фоне, нужно 250 мб фреймворка, 100 мб XNA Framework и то не факт, что всё это запустится... Короче, чем ближе к низкому уровню, тем легче. Не вижу ничего прикольного в юзер-френдли языках и фреймворках. От них одна морока. Уж лучше напрямую с памятью, напрямую графикой, так хотя бы будешь иметь контроль надо всем и реально понимать, что происходит и как.
肏! Τίς πέπορδε;

Bhudh

Цитата: Алексей ГриньНу дела.
Ну вот такие дела. А на кой он моей старушке?
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

myst

Цитата: Алексей Гринь от июня  4, 2009, 18:08
Уж лучше напрямую с памятью, напрямую графикой...
соберу велосипед из руды. :)

Моему мозгу тоже необходимо знать, как работает весь механизм. Иначе я чувствую себя неуютно. Поэтому я настолько суров, что пишу программы в Vim'е и собираю их make'ом. :)

Bhudh

Цитата: mystсоберу велосипед из руды.
:E: :E: :E: ;up:
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Алексей Гринь

Цитата: myst от июня  4, 2009, 18:48
Поэтому я настолько суров, что пишу программы в Vim'е и собираю их make'ом.
ну так и я правлю в code::blocks, потом компилю батником
всякие студии-шмудии — ад для нормального кодера
肏! Τίς πέπορδε;

Алексей Гринь

Посидел сегодня с температурой, сваял систему задач (пародия на goal-oriented action planning).

Цитата: Система задач.odtБазовой единицей поведения персонажа является задача (Task).
Задача – это минимальное действие, которое должен совершить персонаж (напр., дойти до определённого вейпойнта, начать диалог и т.д.), поэтому у задачи должен быть тип задачи.
В один момент времени у персонажа может быть ровно одна задача.
Типы задач:
1)WalkTask – персонаж ходит между вейпойнтами, интерактирует с предметами в случайном порядке, т.е. прогуливается
2)StayTask – персонаж стоит на месте (у определённого вейпойнта) определённое время. Сначала до места назначения он должен дойти.
3)FollowTask – персонаж следует за Movable объектом
4)...
У любой задачи должна быть конечная цель (кроме, пожалуй WalkTask, там это игнорируется). Целью может быть Movable или Waypoint.
Каждая задача характеризуется временем применения (Time Task::end, Task::start).
Во-первых, есть очередь сиюминутных задач (UrgentTaskQueue). Это задачи, которые создаются и исполняются прямо сейчас, и они не зависят от распорядка дня. В основном это сиюминутная реакция на действия игрока – ответные удары, ответный диалог, преследование и т. д. Очередь исполнятся до тех пор, пока не закончится.
Когда очередь сиюминутных задач завершена (задач не осталось), персонаж входит в фазу исполнения запланированных задач. Запланированные задачи записаны в специальный объект Schedule.
Каждой задаче в расписании соответствует время начала и время окончания (продолжительность). Это время может быть точной датой в будущем (напр., 3 декабря 2009-ого года) или же постоянным значением (каждое воскресенье в 7 вечера, каждую неделю, каждый месяц и т. д.). Иногда задачи не имеют ограничения по времени, и могут регулироваться только скриптами (neverExpires)
Каждая задача также может требовать другие задачи для исполнения перед собой (CompleteFirst)

Реализовал пока WalkTask (перс гуляет от вейпойнта к вейпойнту, периодически останавливается на определённое время; потом реализую интеракцию с предметами).

Создал тестовую вейпойнтную карту, 5 кайлов, пустил гулять. Т.к. у меня до сих пор не реализованы скольжения при столкновении, кайлы, встретившись, застревают...
Вот так:


Неужель никто не знает правильных алгоритмов? Лень искать :)
肏! Τίς πέπορδε;

Алексей Гринь

По-умному, конечно, можно было бы сделать систему обмена сообщениями между персами. И типа при столкновении один посылает сообщение "ты отойди вправо, а я пойду прямо". Но ежели их больше 2-х будет сталкиваться, то у меня мозг лопнет всё красиво реализовать.
肏! Τίς πέπορδε;

Алексей Гринь

Такая вот фигня. Обходить обходят. Коряво реализовано, но пофиг.
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июня  7, 2009, 07:43
Посидел сегодня с температурой
Ты чего это захворал? Лето ж на дворе. :what:

Ömer

Цитата: Bhudh от
Цитата: Алексей Гринь11) многое придумывал с нуля (например такую банальную вещь как расчёт расстояния между двумя тридэ точками)
Помню, как сам сию формулу вычислял... ::) И как удивился, что она такая длинная. ;D

:o вы(двойственное число) не изучали программирование в вузе?
ya herro, ya merro

Bhudh

Цитата: svarog от июня  8, 2009, 14:29вы (двойственное число)
 
ВА 

Цитата: svarog от июня  8, 2009, 14:29не изучали программирование в вузе?
 
Открою страшную тайну: я в ВУЗе вообще ничего не изучал.
 
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Саша Чёрный

Цитироватьвы(двойственное число) не изучали программирование в вузе?
на филологическом как-то не приходилось :)

и, насколько я знаю, если и есть непрофильные курсы программирования ("информатики"), все они сводятся к изучению визуалбасика и ворда :D

я самоучка, и, не хочу льстить себе, поумней многих моих знакомых, учащихся или уже закончивших специализированные технические учебные заведения

вообще наши вузы хреново учат всему (по крайней мере в провинции)

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр