Перейти к контенту

Редактирование движка X-Ray


Рекомендуемые сообщения

3 часа назад, Zander_driver сказал:

А как в X-Ray проще всего проверить коллизию произвольных координат, (x,y,z), с статичной геометрией локации?

Точки нигде и ни с чем не коллизятся, им бы еще измерений несколько накинуть.

В xrCDB.h в классе COLLIDER есть методы ray_query, box_query, frustum_query.

Изменено пользователем abramcumner
  • Спасибо 1
Ссылка на комментарий

В связи с тем, что куда-то утерялись ссылки на исходники ЛА 2014 года с тремя рендерами. Удалось найти, поделюсь ссылкой, вдруг кому-то пригодится: Тык

jpwsa5byp73nyaufrbis15dcci1y.png
 

Ссылка на комментарий

Люди, движок не компилится. Отсутствует файл config.h при компиляции ode.dll. также компилятор ругался на стандартную библиотеку. Если что, visual C++ 19

Ссылка на комментарий
12.07.2020 в 21:42, Expropriator сказал:

по хиту. Если торкнуло, то

От таких ответов было бы смешно, если бы не было так грустно :rolleyes:

А вообще, ввиду того что раскопки по движку не обнаружили ничего готового к немедленному применению для обозначенной цели, даже в составе OGSR-движка. Ну или я плохо искал... во всяком случае, готового удобоваримого инструмента такого назначения, я в свободном доступе не видел. Написал быстренько свой клас-обертку над api движка, для тестирования коллизий с геометрией локации и объектов. Уже тестировалось - работает, причем даже сразу без всяких багов. Выкладываю, может быть, кому-то пригодится.

Куда нажимать и за что дергать:

InitSet(Fvector3, bool, bool) - Стартовые настройки. Задает центр лучеиспускания, и флаги - считать ли столкновения с актором, считать ли столкновения с игровыми объектами. Если оба false, то будет фиксировать столкновения только с геометрией локации.

Valid(Fvector3) - Пустить (из стартовых координат), луч с указанной дирекцией. Можно передавать не-нормализованные вектора - по их длине определит дальность трассировки. Возвращает true/false. Столкнулись/не столкнулись.

CollisionDist() - узнать дистанцию от старта до точки столкновения, если с чем-то/кем-то столкнулись.
 

Скрытый текст

 

 


/**
	Класс для проверки коллизии любого произвольного луча с геометрией уровня и объектов.
	Zander, 2020
*/
#pragma once
class CLevel;
class CObject;

struct S_LRQ_fvPacket {
	Fvector3 		A;
	Fvector3 		B;
	Fvector3* 		C;
	bool 			stopOnActor;
	bool 			stopOnObjects;
	S_LRQ_fvPacket(Fvector3 a, Fvector3 b, Fvector3 c, bool d, bool e) {
		A.set(a);
		B.set(b);
		C = &c;
		stopOnActor = d;
		stopOnObjects = e;
	}
};

class CLevelRQCast
{
public:
	CLevelRQCast();
	virtual ~CLevelRQCast();
private:
	// For collision testing
	bool 					TestRQ(Fvector3 a, Fvector3 b);	// Запуск теста столкновения.
	collide::rq_results		rq_storage;
	friend	CLevel;
	bool 					initialized;
	bool 					withActor;
	bool 					withObjects;
	bool 					collided;
protected:
	Fvector3				test_dir;			// Дирекция ожидаемых координат относительно старта трассировки
	Fvector3				initialCoords;		// Старт трассировки в мировых координатах
	Fvector3				collisionPoint;		// предполагаемое следующее положение камеры в мировых координатах
	static BOOL 			test_callback(const collide::ray_defs& rd, CObject* object, LPVOID params);
	static BOOL				trace_callback(collide::rq_result& result, LPVOID params);
public:
	void InitSet(Fvector3 pos, bool a, bool b); 	// Старт подключения. Указываем центр луче-испускания, и управляющие флаги.
	bool Valid(Fvector3 target);	// Возвращает true, если текущий луч (источник-таргет) ни с чем не столкнулся. false в обратном случае.
	float CollisionDist();
};

 

 

 

 

Скрытый текст

 

 

 


/**
	Класс для проверки коллизии любого произвольного луча с геометрией уровня и объектов.
	Zander, 2020
*/
#include "stdafx.h"
#include "CLevelRQCast.h"
#include "level.h"
#include "actor.h"


CLevelRQCast::CLevelRQCast()
{
	initialized = false;
	withActor = false;
	withObjects = false;
	collided = false;
}

CLevelRQCast::~CLevelRQCast()
{
}

bool CLevelRQCast::Valid(Fvector3 target)
{
	if (!initialized) return false;
	test_dir.set(pos);
	collided = TestRQ(initialCoords, test_dir);
	return collided;
}

float CLevelRQCast::CollisionDist()
{
	if (initialized && collided)
		return initialCoords.distance_to(collisionPoint);
		
	return (-1);
}

void CLevelRQCast::InitSet(Fvector3 pos, bool a, bool b)
{
	initialCoords.set(pos);
	initialized = true;
	withActor = a;
	withObjects = b;
}

bool CLevelRQCast::TestRQ(Fvector3 a, Fvector3 b)
{
	rq_storage.r_clear();
	collisionPoint.set(initialCoords);
	float range = test_dir.length();
	test_dir.normalize();
	collide::ray_defs RD(initialCoords, test_dir, range, CDB::OPT_CULL, collide::rqtBoth);
	BOOL result = FALSE;
	VERIFY(!fis_zero(RD.dir.square_magnitude()));
	S_LRQ_fvPacket* rda = xr_new<S_LRQ_fvPacket>(initialCoords, test_dir, collisionPoint, withActor, withObjects);
	result = Level().ObjectSpace.RayQuery(rq_storage, RD, trace_callback, rda, test_callback, rda);

	xr_delete(rda);

	return (!result);
}

BOOL  CLevelRQCast::trace_callback(collide::rq_result& result, LPVOID params)
{
	BOOL R;
	S_LRQ_fvPacket* pfd_RDA = (S_LRQ_fvPacket*)params;
	//динамический объект
	if (result.O) {
		R = TRUE;
		if (pfd_RDA->stopOnObjects) R = FALSE;
		if (result.O->ID() == Actor()->ID() && pfd_RDA->stopOnActor) R = FALSE; 
	}
	else R = FALSE;

	//вычислить точку попадания
	Fvector3 ep;
	ep.mad(pfd_RDA->A, pfd_RDA->B, result.range); 
	pfd_RDA->C->set(ep);

	return R;
}

BOOL CLevelRQCast::test_callback(const collide::ray_defs& rd, CObject* object, LPVOID params)
{
	BOOL R = TRUE;
	S_LRQ_fvPacket* pfd_RDA = (S_LRQ_fvPacket*)params;
	if (object) {
		if (pfd_RDA->stopOnObjects) R = FALSE;
		if (object->ID() == Actor()->ID() && pfd_RDA->stopOnActor) R = FALSE;
	}
	
	return R;
}

 

 

 

 

 

 

 

 

Изменено пользователем Zander_driver
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, а в чем изобретение? В движке постоянно такие лучики пускаются для разных проверок.

 

Можно вспомнить моё замечание о костылях и велосипедах. Я писал через год, но ты похоже идёшь опережающим темпом.

Изменено пользователем dsh
Ссылка на комментарий
16 часов назад, dsh сказал:

В движке постоянно такие лучики пускаются для разных проверок.

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

 

Upd. Не вижу смысла спорить об этом. Да и тема не для этого.

p.s. Для чего там колбеки и что в них делается, ты видел)

Изменено пользователем Zander_driver

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, вот то, что ты написал, кажется мне велосипедом. Т.к. материалы ты не обрабатываешь, то и коллбеки не нужны и можно обойтись уже готовыми средствами. Например чем-то вроде


Level().ObjectSpace.RayPick(Position(), dir, m_fJumpHeight, collide::rqtBoth, RQ, this)

Это я просто скопировал из первого попавшегося кода. Что означают параметры разобраться не сложно.

 

Изменено пользователем dsh
Ссылка на комментарий

Всем доброго времени суток. Не знаю уже кого и спросить.. Не сочтите идиотом, но простая задача завела в тупик. :crazy2:

Хотел вернуть второй слот исключительно под пистолеты, а третий под автоматы, smg, шотганы и прочее, как это было в ЧН и ТЧ. Казалось бы, сократи сетку в actor_menu.xml и дело в шляпе, дык нет же, при любом удобном способе ГГ пытается запихать дробовик в кобуру, от чего получает ожидаемый вылет с логом "нет места на ячейках". Тщательно сломав голову о конфиги и написав различные варианты решения скриптами, убедился что править нужно xrGame :dash2: А так как я далёк от распаковок, перепаковок, исходников и самого С++, принял решение НЕХнуть xrGame ЧН и напялить код блокировки неподходящего слота на ЗП, что разумеется так же ни к чему не привело. Поняв что где-то внутри, в каком-нибудь dragdrop'e сидит строчка которая вопреки моему мнению говорит что "slot2 и slot3 считай одно и то же, прыгайте хоть туда, хоть сюда, значения не имеет" решил с ней бороться. Помогите пожалуйста её найти и направить на путь истины, сил моих больше нет :cray5:

Ссылка на комментарий

Всем доброго вечера! Подскажите пожалуйста, какие основные и дополнительные компоненты при установке VS2019 нужно установить для сборки движка? Заранее благодарен!

Ссылка на комментарий
Только что, Expropriator сказал:

отдыхает

Мне кажется, что в этой теме, хорошим тоном считается постить фрагменты программного кода, а не скрины...

Вот если б вы исходниками своего рендера поделились - это другое дело... :grin2:

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, специально для тебя премьера нового движка. Эксклюзив!

https://yadi.sk/d/cF2kYZjrM00XDA

Основано на движках SCS (1510), ALL(1602)

Рабочий рендер R3 + R1 серверный.

R1 еще пока в хламе. Я его не почистил.

Меня прошу не материть за код Я для себя это делаю.

 

Тестировать можно на старой базе движка SCS :

https://www3.gameru.net/forum/index.php?s=&showtopic=71230&view=findpost&p=1680257

Мелкий патч:

https://www3.gameru.net/forum/index.php?s=&showtopic=71230&view=findpost&p=1680614

Последний билд https://yadi.sk/d/4iHz5YDV2dUFAw

 

Изменено пользователем Expropriator
  • Нравится 1

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
2 часа назад, Expropriator сказал:

SCS

https://ru.wikipedia.org/wiki/SCS_Software

(Тут была шутка :) но совпадение и правда забавное)

впрочем, я все равно в этом не разбираюсь. :wink:

2 часа назад, Expropriator сказал:

специально для тебя

Спасибо, но меня и моё устраивает) А так, здорово что выложил, кому-нибудь пригодится.

Изменено пользователем Zander_driver

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Где можно найти рабочие исходники SDK 0.7? Те что идут с исходниками движка скомпилил, но сдк не запустился. Да и размер LevelEditor.exe у меня получился 2.1 мб, а в сдк этот файл 2.4 весит. Т.е. скорее всего исходники не полные.

Ссылка на комментарий
10 минут назад, AndreySol сказал:

к ним и прилагается, обычно

Вообще-то, нет. Не всегда. Тем более речь об СДК, а не самом движке.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
11.09.2020 в 00:09, Expropriator сказал:

Крайэнгина 2 отдыхает

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

Ссылка на комментарий

@aromatizer, r2_dof_kernel 1. естественно. У меня же 7 вкорячено.

 

Последняя версия, уже точно.

https://www.amk-team.ru/forum/topic/14029-scs-redux/?do=findComment&comment=1348758

Изменено пользователем Expropriator

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
37 минут назад, Expropriator сказал:

r2_dof_kernel 1. естественно. У меня же 7 вкорячено.

Я не тактик, а стратег.)

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...