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

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

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

@Zander_driver, по хиту. Если торкнуло, то ....:dash2:

 

В визуалке в поиск набери SGameMtl или material

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Zander_driver сказал:

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

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

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

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

В связи с тем, что куда-то утерялись ссылки на исходники ЛА 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
08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

Подхалимов и льстецов не терплю. Не нравится, что я сделал? Сделай сам, как тебе нравится. Не умеешь - твои проблемы, я тоже когда-то не умел. Да и сейчас, не умею, не знаю, но делаю что хочу.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 часов назад, dsh сказал:

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

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

 

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

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

Изменено пользователем Zander_driver
08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

Подхалимов и льстецов не терплю. Не нравится, что я сделал? Сделай сам, как тебе нравится. Не умеешь - твои проблемы, я тоже когда-то не умел. Да и сейчас, не умею, не знаю, но делаю что хочу.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@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 нужно установить для сборки движка? Заранее благодарен!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Крайэнгина 2 отдыхает
ssq-diesel-09-11-20-04-03-28-garbage.png ssq-diesel-09-11-20-04-01-54-garbage.png ssq-diesel-09-11-20-04-00-34-garbage.png

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

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, Expropriator сказал:

отдыхает

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

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

08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

Подхалимов и льстецов не терплю. Не нравится, что я сделал? Сделай сам, как тебе нравится. Не умеешь - твои проблемы, я тоже когда-то не умел. Да и сейчас, не умею, не знаю, но делаю что хочу.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@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

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Expropriator сказал:

SCS

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

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

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

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

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

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

Изменено пользователем Zander_driver
08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

Подхалимов и льстецов не терплю. Не нравится, что я сделал? Сделай сам, как тебе нравится. Не умеешь - твои проблемы, я тоже когда-то не умел. Да и сейчас, не умею, не знаю, но делаю что хочу.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@XinnogeN XinnogeN

А исходники движка вы откуда взяли? Так, вот к ним и прилагается, обычно, все что необходимо для сборки.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, AndreySol сказал:

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

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

08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

Подхалимов и льстецов не терплю. Не нравится, что я сделал? Сделай сам, как тебе нравится. Не умеешь - твои проблемы, я тоже когда-то не умел. Да и сейчас, не умею, не знаю, но делаю что хочу.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

×
×
  • Создать...