Перейти к содержимому


Свернуть чат Чат Открыть чат во всплывающем окне

Гость : (2 дней назад) У кого-нибудь есть полный пак инструментария от lz?
Yakim (Watco... : (14 Июль 2018 - 00:06) :D
Yakim (Watco... : (14 Июль 2018 - 00:06) nope
Yandersen : (13 Июль 2018 - 22:07) Айаяй. Поди Якимко заспамил чат стикерами. :)
Yandersen : (13 Июль 2018 - 22:06) Да лан, тут каждый день кто-нить из админов заглядывает. Как пропустили?
Nextovoy : (13 Июль 2018 - 01:04) Я писал
Гость : (10 Июль 2018 - 22:42) Сорьки, что так у нас. Чего три года так и не попытался в чат писнуть? :)
Nextovoy : (06 Июль 2018 - 16:15) Спасибо
lz : (04 Июль 2018 - 19:44) Активировал.
Гость : (03 Июль 2018 - 16:30) Активируйте его.
Гость : (03 Июль 2018 - 16:30) Мой профиль - Nextovoy
Гость : (03 Июль 2018 - 16:25) Написать в чат. Профиль в ручную админы активируют.
Гость : (03 Июль 2018 - 15:47) Ох уж эта дурацкая привычка писать всё раздельно засоряя чат. Это всё классно, конечно, но ребята, одменестраторы, так называемые. Третий год пытаюсь зарегистрироваться (буквально, третий) на этом форуме, но ПИСЬМО С ПОДТВЕРЖДЕНИЕМ НА ПОЧТУ ТАК И НЕ ПРИХОДИТ. Что делать?
Гость : (03 Июль 2018 - 15:46) Перешёл я всё же по ссылке Redoctor'a...
Гость : (03 Июль 2018 - 15:41) Пора уже M4
Гость : (29 Июнь 2018 - 00:18) итак м3
lz : (28 Июнь 2018 - 16:01) Мы тебе и тут передадим.
Гость : (28 Июнь 2018 - 13:13) Зачем в телеграмме делать?!Я вот например не могу зайти,написать в чат,подписаться и не только у меня это.
Redoctor : (24 Июнь 2018 - 19:35) https://vk.com/away....0_23001&cc_key=
Redoctor : (24 Июнь 2018 - 19:34) Тогда в телеграмме в поисковике набери Механоиды 3
Гость : (24 Июнь 2018 - 19:05) Не открывается.
Redoctor : (24 Июнь 2018 - 18:00) https://t.me/mechanoids3 Для тех кто в танке.
Yakim (Watco... : (15 Июнь 2018 - 01:33) КРУЗИИИС!!!11

Изображение
lz : (15 Июнь 2018 - 00:09) КРУЗИС!
lz : (15 Июнь 2018 - 00:09) ЗИС
lz : (15 Июнь 2018 - 00:09) КРУ
Yakim (Watco... : (14 Июнь 2018 - 14:50) Крузис и Королева тоже не в моем вкусе, а проигрывать нечего =D
lz : (14 Июнь 2018 - 13:55) Конечно, полюбить - так королеву, проиграть - так миллион, сделать - так крузис.
smt005 : (14 Июнь 2018 - 00:22) И от третьего лица тоже можно сделать простенькую игру. Простая игра это лучше чем ничего.
smt005 : (14 Июнь 2018 - 00:21) А, ты хочеш что-бы хит был, с "Crysis" графоном и контентом на 100500 часов игры?
Yakim (Watco... : (14 Июнь 2018 - 00:18) Ни топдовншутеры, ни стратежки)
Yakim (Watco... : (14 Июнь 2018 - 00:15) Не, спасибо, не в моем вкусе=)
smt005 : (13 Июнь 2018 - 23:13) Помнится за пару недель от скуки сделал. Делал по вечерам.
smt005 : (13 Июнь 2018 - 23:13)
smt005 : (13 Июнь 2018 - 23:11) Или например такое, только с моделями из игры -> https://youtu.be/RFDdN5dcX8s
smt005 : (13 Июнь 2018 - 23:07) Yakim, да сами себя пните... :) Сделайте что-то, хотя бы уровня "Scrolling TopDown Shooter".
Yakim (Watco... : (12 Июнь 2018 - 22:17) так что, думаю завтра с утреца стартану марафон)
Yakim (Watco... : (12 Июнь 2018 - 22:15) хе-хе, не сомневайся, я в чате по уе уже поинтересовался, сказали обалденный сериал)))
Yandersen : (12 Июнь 2018 - 20:56) Оооооо, поди ща залипнет на пару дней, стопудофф. :)
Yakim (Watco... : (12 Июнь 2018 - 18:28) Окей гляну)
Yandersen : (12 Июнь 2018 - 16:23) Сериал Пространство посмотри. Не по части Мехов, просто шикарен, авось ману доставит.
Yakim (Watco... : (11 Июнь 2018 - 18:50) Дуст и ты уже закаленные и пустые, надож где-то ману доставать)))
Yakim (Watco... : (11 Июнь 2018 - 18:49) Думаю, кого быть пнуть, что-бы тот пнул в ответ да по сильнее.
Yakim (Watco... : (11 Июнь 2018 - 18:48) Давненько и не маленько хе-хе, делать нечего, прокрастинирую =)
Yandersen : (11 Июнь 2018 - 17:46) Якимка, ты там шо, упоролсо маленько? Чиво картинами опспамилсо?

Фотография
- - - - -

Требуется помощь!


Лучший Ответ PA3UJIb, 07 Май 2015 - 15:05

Так подойдёт?

Да, так пойдет.
int quadrulate(uint16** _topLeft, uint16** _topRight, uint16** _botLeft, uint16** _botRight, uint16* _source, uint32 _side)
{
	// т.к. _side = 2^n + 1, то half будет 2^(n-1) + 1
	uint32	half = _side / 2 + 1;
	
	// выделяем память
	uint32	size = half*half*sizeof(uint16);
	*_topLeft = (uint16*)calloc(4, size);
	if (!(*_topLeft))
		return -1;
	*_topRight	= *_topLeft  + size;
	*_botLeft	= *_topRight + size;
	*_botRight	= *_botLeft  + size;
	
	// раскладываем данные из входного массива
	for (uint32 i=0; i<half; i++)
	{
		for (uint32 j=0; j<half; j++)
		{
			uint16*	ptr1 = *(_topLeft + i*half + j);
			uint16*	ptr2 = *(_topRight + i*half + j);
			uint16*	ptr3 = *(_botLeft + i*half + j);
			uint16*	ptr4 = *(_botRight + i*half + j);
			
			*ptr1 = *(_source + i*_side + j);
			*ptr2 = *(_source + (i+half-1)*_side + j);
			*ptr3 = *(_source + i*_side + (j+half-1));
			*ptr4 = *(_source + (i+half-1)*_side + (j+half-1));
		}
	}
	
	return 0;
}
Спасибо за "толчок" в нужном направлении Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 39

#1 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 12 Июль 2014 - 23:27

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



#2 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 12 Июль 2014 - 23:33

Товарищи! Кто знает какие из общеиспользуемых форматов файлов для 3D моделей имеют простую структуру, позволяющую легко грузить из них модельки? Может, есть какие библиотеки для загрузки моделей из разных форматов файлов? Кто знает, подскажите что к чему, поделитесь инфой иль кодом, а то я всё с .obj играюсь, а он приелся уже текстовостью, на что-то посолиднее хотелось бы к руку наложить.



#3 OFFLINE   Taugeshtu

Taugeshtu
  • Создатель
  • 36 сообщений

Отправлено 12 Июль 2014 - 23:39

Проще .obj только уже вышедшие из употребления форматы (помянем .x)
Сейчас общепринятый стандарт - .fbx, но т.к. он умеет вообще всё, в том числе хранить порнушку в fullHD, написать под него импортер - это очень крутой таск.


, наверное...


#4 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 12 Июль 2014 - 23:46

И вот ещё вопрос насчёт текстурирования ландшафта картовысотного. Общепринято делить текстуры на горизонтальные и вертикальные - горизонтальные идут на плоские участки, вертикальные - на склонах. Уточню условия: у меня ось У вертикально идёт, а оси X и Z - в горизонтальной плоскости. С горизонтальной текстурой всё просто - её координаты сетке соответствуют (координаты x,z). А вот вертикальную текстуру я дважды накладываю - сбоку и спереди, таксказать: для одной я использую координаты y,x, для другой - y,z. Ну и потом три полученных цвета смешиваю в определённых пропорциях. И неплохо как бы получается, но вот что-то сегодня задумался: а можно ли каким-нить читом накладывать вертикальную текстуру так, чтобы не два раза из неё цвет выковыривать, а лишь один раз? Мне так кажется, что нет, но что-то закрались сомнения "а вдруг"...

 

Проще .obj только уже вышедшие из употребления форматы (помянем .x) Сейчас общепринятый стандарт - .fbx, но т.к. он умеет вообще всё, в том числе хранить порнушку в fullHD, написать под него импортер - это очень крутой таск.

А вопрос как раз был в том, чтоб простой формат найти. И поддерживаемый разными прогами для 3D моделлинга. Ну вот давайте иначе попробую вопрос сформулировать: какие файлоформаты, экспортируемые, скажем 3DMAX'ом можно в принципе расковырять и грузить модельки из них? Нужно чисто геометрию: вершины, текстурные координаты, нормали, бинормали, тангенты, индексы, примитивы. Ну чтоб вот грузануть статичный объект и рисовать его в проге, да? Что-нить такое простенькое существует? Не текстовое только, именно бинарный файл нужен, а то ашипки акругления же.



#5 OFFLINE   Taugeshtu

Taugeshtu
  • Создатель
  • 36 сообщений

Отправлено 12 Июль 2014 - 23:50

Ответ: нельзя.

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


, наверное...


#6 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 13 Июль 2014 - 00:01

Знач текстуринг ландшафта 3 обращения к текстурам требует и никак иначе. Ну оки.

Буду благодарен за текстурки ландшафтной тематики в формате, желательно, .bmp (или что легко в него переконвертить - jpg там, tga, png и пр.), включающие в придачу к обычной цветовой карте ещё bump-мапу, карту высот (offset-map, её для параллакса юзают) и желательно ещё и с картой бляскучести. Такие наборы кто-нить знает, где наскрести? Может, у кого есть?

Очень надо 4 набора таких хотя бы.



#7 OFFLINE   Taugeshtu

Taugeshtu
  • Создатель
  • 36 сообщений

Отправлено 13 Июль 2014 - 00:07

Скорее всего, можно найти на cgpersia.com. Только тссс.


, наверное...


#8 OFFLINE   SHW

SHW

    Разработчик

  • Создатель
  • 32 сообщений
  • Откуда:Самара
  • Настоящее имя:Слава

Отправлено 22 Июль 2014 - 18:00

А как же COLLADA? Он, конечно, текстовый, но зато поддерживает вообще всё. FBX - проприетарный Autodesk-овский формат и меняется каждый год. Зато они предоставляют бесплатную библиотечку для импорта файлов в этом формате.
Your mind is software. Program it.
Your body is a shell. Change it.
Death is a disease. Cure it.

#9 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 22 Июль 2014 - 21:56

Думаю, меховский .mod можно расковырять - если вдруг в нём не много требухи окажется, так можно его юзать.  :)



#10 OFFLINE   Yakim (Watcover3396)

Yakim (Watcover3396)
  • Создатель
  • 167 сообщений
  • Откуда:Донецкая Народная Республика
  • Настоящее имя:Дмитрий

Отправлено 22 Июль 2014 - 22:12

Yandersen, .mod это что за формат такой? я такой не видел



#11 OFFLINE   GranMinigun

GranMinigun

    Хранитель Форума

  • Админ
  • 170 сообщений
  • Откуда:Верхняя Салда
  • Настоящее имя:Александр

Отправлено 22 Июль 2014 - 22:34

Yakim (Watcover3396), модели же.


Mama Africa

#12 OFFLINE   Yakim (Watcover3396)

Yakim (Watcover3396)
  • Создатель
  • 167 сообщений
  • Откуда:Донецкая Народная Республика
  • Настоящее имя:Дмитрий

Отправлено 22 Июль 2014 - 22:45

GranMinigun, ааа, понятно, никогда с ними не сталкивался.

Смысл их ковырять? Все модель и так можно выдрать, с помощью рипера.



#13 OFFLINE   GranMinigun

GranMinigun

    Хранитель Форума

  • Админ
  • 170 сообщений
  • Откуда:Верхняя Салда
  • Настоящее имя:Александр

Отправлено 23 Июль 2014 - 00:16

Рипером не выйдет полностью повторить исходную геометрию с исходными же координатами. А вообще, либо Микс, либо Разум на форуме выкладывали конвертер моделей. Тут вопрос в другом - нужно ли использовать этот формат в местной разработке? А для этого нужно знать структуру формата.


Mama Africa

#14 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 23 Июль 2014 - 01:08

Чивооо?.. Отлично всё повторяется, если тип данных не конвертать. Координаты в 99% случаев идут в формате float. Если рипать эти бинарные данные и переводить в текстовый формат, как в .obj, а потом при загрузке из него снова переводить текстовую интерпретацию во float, то немножко будет другое значение. Но если выдирать float и так и юзать, то то же самое будет. Форма бутылки на прозрачность воды в ней не влияет.  ;)

Конвертер моделей из .mod в .obj Razum написал и недавно поделился со мной исходниками (см. тут). Я его коды сам не смотрел пока.  :)



#15 OFFLINE   SHW

SHW

    Разработчик

  • Создатель
  • 32 сообщений
  • Откуда:Самара
  • Настоящее имя:Слава

Отправлено 23 Июль 2014 - 14:07

Не вижу особого смысла использовать меховский формат он слишком стар для этого. Для внутреннего использования лучше разработайте свой бинарный формат, а для импорта и текстовые obj или COLLADA сойдут. В мехах так по сути и было. Все модельки, лоды, дестрои, позы анимации экспортировались в отдельные obj, а потом собирались в .mod с помощью того же редактора, что идёт в СДК. Потери точности от текстового формата ничтожны. Float итак всего 7 значащих знаков, указываете при экспорте 8 знаков после запятой и всё, практически никаких потерь.
Your mind is software. Program it.
Your body is a shell. Change it.
Death is a disease. Cure it.

#16 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 14 Август 2014 - 13:51

Товарищи, нужен меш-оптимизатор для массива индексов треугольников (индекс в формате int). Т.е. функция, которая эти треуги перетасует, чтоб под пост-трансформационный кэш оптимизировать. Ну что-то вроде такого:
void OptimizeMesh(int* IndexBuffer, int TrianglesCount);
Есть у кого-нить что-нить подобное?

#17 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 15 Август 2014 - 05:18

Ну вот пока что написал эмулятор пост-трансформационного кэша:

//------------------------------------------------------------------------------
#include <stdlib.h>   //free, malloc
//==============================================================================

//The class emulating the GPU's vertex cache
class CVertexCache{

 unsigned int Size; //Quantity of indices the cache can fit
 int* Indices;      //FIFO buffer storing the vertex indices

public:

 int VerticesProcessed;   //Stats: total amount of entered indices
 int VerticesTransformed; //Stats: amount of indices pushed into the buffer

private:

 //Do not allow copying as there is a dynamic array inside
 void operator = (CVertexCache){};
 CVertexCache(const CVertexCache&){};

public:

 //Destructor frees the dynamic array
 inline ~CVertexCache(){ free(Indices); memset(this,0,sizeof(CVertexCache)); }

 //Check the index-capacity of the cache
 inline int GetSize()const{ return Size; }
 //Set the desired cache-capacity; returned value is true unless malloc fails
 bool SetSize(unsigned int QuantityOfIndexSlots){
  this->~CVertexCache();
  if(!QuantityOfIndexSlots)return true;
  if((Indices=(int*)malloc(QuantityOfIndexSlots*4))==NULL)return false;
  Size = QuantityOfIndexSlots;
  for(unsigned i=0;i<Size;i++)Indices[i]=-1;
  return true;
 }//SetSize---------------------------------------------------------------------

 //Default constructor
 inline CVertexCache(){ memset(this,0,sizeof(CVertexCache)); }
 //Constructor that allows to specify the cache size at initialization
 inline CVertexCache(unsigned int QuantityOfIndexSlots){
  memset(this,0,sizeof(CVertexCache));
  SetSize(QuantityOfIndexSlots);
 }//Constructor-----------------------------------------------------------------
 
 //Empty the cache buffer and reset the statistics
 void Clear(){
  VerticesProcessed=0; VerticesTransformed=0;
  for(unsigned i=0;i<Size;i++)Indices[i]=-1;
 }//Clear-----------------------------------------------------------------------

 //Return the index value stored in the specified slot; -1 returned for
 //out-of-bounds requests or if the specified slot is empty
 inline int operator[](unsigned int SlotID)const{
  if(SlotID<0||SlotID>=Size)return -1;
  else return Indices[SlotID];
 }//Operator[]------------------------------------------------------------------
 
 //Return the number in range [1.0...0.0] representing the relative position of
 //the given vertex in the cache; the value 1.0 corresponds to the first
 //position, the value (1.f/Position) is for the last one and 0.0 returned if
 //the given index is not in the cache
 double GetPosition(int Index)const{
  for(unsigned i=0;i<Size;i++)if(Indices[i]==Index)
   return double(Size-i)/double(Size);
  return 0.0;
 }//GetPosition-----------------------------------------------------------------

 //Introduce a new index; if it is not in the cache already, it will be pushed
 //into the FIFO buffer shifting all indices by one position; if the index is
 //the restart index, it is silently ignored
 void InputVertex(int Index, int PrimitiveRestartIndexValue=0xffffffff){
  if(Index==PrimitiveRestartIndexValue)return;
  VerticesProcessed++;
  if(!Size)return;
  for(unsigned i=0;i<Size;i++)if(Indices[i]==Index)return;
  VerticesTransformed++;
  for(unsigned i=Size-1;i>0;i--)Indices[i]=Indices[i-1];
  Indices[0]=Index;
 }//InputVertex-----------------------------------------------------------------

 //Process all the indices of the given buffer; refer to the stats afterwards;
 //the returned value indicates how many times in average each different vertex
 //was transformed
 double Process(int* IndexBuffer, unsigned int IndexCount,
                int PrimitiveRestartIndexValue=0xffffffff){
  Clear();
  if(!IndexBuffer||!IndexCount)return 0.0;
  unsigned VertexCount=0;
  for(unsigned i=0;i<IndexCount;i++){
   int Index = IndexBuffer[i];
   if(Index==PrimitiveRestartIndexValue)continue;
   InputVertex(Index,PrimitiveRestartIndexValue);
   unsigned s = i;
   for(unsigned v=i+1;v<IndexCount;v++)if(IndexBuffer[v]==Index)s=v;
   if(s==i)VertexCount++;
  }
  if(!VertexCount)return 0.0;
  return double(VerticesTransformed)/double(VertexCount);
 }//Process---------------------------------------------------------------------

};//CVertexCache________________________________________________________________

Инициализируя класс нужно указать размер кэша (сколько вертексов в него помещается):

 

CVertexCache Cache(16);

 

Ну и потом этому кэшу можно скармливать массив индексов:

 

//int* Indices, unsigned int IndexCount
double AverageTransformationsPerVertex = Cache.Process(Indices,IndexCount);

 

Возвращаемое значение - это сколько раз в среднем каждая вершина была трансформирована. Теоретический минимум - единица, т.е. один раз.

 

Вот теперь думаю над алгоритмом перетасовки треугольников, чтобы к этой единице приближаться. Для обычной сетки легко можно добиться значения 2 просто рендеря сетку полосами, без всяких оптимизаций.
 

А вот, кстати, изобрёл только что формулу для теоретически-возможного миниимума при рендере сетки при заданном размере кэша:

http://www.opengl.or...l=1#post1261027



#18 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 16 Август 2014 - 05:57

 

 

I'm sorry if I'm rude, but I think you are wasting your time.

Действительно, зачем эмулировать то, что есть в каждой видеокарте с 2009 года


 


#19 OFFLINE   SHW

SHW

    Разработчик

  • Создатель
  • 32 сообщений
  • Откуда:Самара
  • Настоящее имя:Слава

Отправлено 16 Август 2014 - 09:51

Я тоже считаю, что вы фигнёй страдаете. Лучше бы занялись чем-то более полезным.

 

Если вы хотите довести начатое до логического завершения, а не просто потыкать палочкой и бросить, придерживайтесь правила 20 / 80. 20% действия должны давать 80% результата. 

А на вашу оптимизацию вы потратите кучу времени получив какие-то доли процента прироста производительности. И то не факт.


Your mind is software. Program it.
Your body is a shell. Change it.
Death is a disease. Cure it.

#20 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 16 Август 2014 - 23:18

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






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных