ПрограммированиеФорумГрафика

[Решено] Проблема с перехватом мешей (2 стр)

Страницы: 1 2 3 Следующая »
#15
16:05, 3 ноя 2016

А разве нет? И как тогда нужно правильно делать?

#16
16:05, 3 ноя 2016

ENAleksey
> m_pVB = pVB;
о чем я и говорю. Ты сохраняешь тупо указатель на буффер, в котором данные меняются в течении кадра, толку от него 0.

#17
16:07, 3 ноя 2016

А точно, это ведь указатель) Сейчас попробую сам буфер сохранять.

#18
16:14, 3 ноя 2016

ENAleksey
> Сейчас попробую сам буфер сохранять.
чтение из буфера не очень шустрая операция. По хорошему между lock() unlock() узнать адрес данных в рам перед заливкой и скопировать их себе для отложенного рендера. Либо второй вариант,  создать пул буфферов и для каждой модельки подсовывать свой включая вызовы lock() unlock().

#19
16:15, 3 ноя 2016

Он видимо локает что бы анимацию ловить, а точнее измененную сетку персонажей.
Чтобы получить от них тени.

#20
16:19, 3 ноя 2016

ronniko
кто он? lock приходит от движка игры, он в свою очередь локает чтобы залить актуальные данные для конкретной модели которая пойдет на рендер. При рендере след. модели очередной лок перезапишет этот буффер.

#21
16:25, 3 ноя 2016

кто он?

ENAleksey

очередной лок перезапишет этот буффер.

Я думал ENAleksey это знает как дважды два !

#22
16:39, 3 ноя 2016

Aroch
> По хорошему между lock() unlock() узнать адрес данных в рам перед заливкой и
> скопировать их себе для отложенного рендера.
То есть получить этот адрес?

SetTransform(D3DTS_WORLD, 0019F9B4)
SetTransform(D3DTS_TEXTURE0, 0019F9C4)
VertexBuffer(0710F120)->Lock(20448, 23008, 0019F95C, 6144)  // 0019F95C этот?
VertexBuffer(0710F120)->Unlock()
SetStreamSource(0, 0710F120, 32)
IndexBuffer(0710F288)->Lock(45556, 3462, 0019F9C0, 4096)
IndexBuffer(0710F288)->Unlock()
SetIndices(0710F288, 639)
SetRenderState(D3DRS_ZWRITEENABLE, 1)
SetTexture(0, 119BC050)
SetRenderState(D3DRS_ALPHABLENDENABLE, 0)
SetRenderState(D3DRS_ALPHATESTENABLE, 0)
DrawIndexedPrimitive(4, 0, 719, 22778, 577) // Rock
// STAGE_UNIT
#23
16:47, 3 ноя 2016

Если да, то всё остальное понятно. Значит рисовать можно будет с помощью DrawIndexedPrimitiveUp, или это будет медленнее, и лучше записывать все данные в свой буфер?

#24
16:48, 3 ноя 2016

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

Если да, то как же это тормозит и садит FPS Варкрафта ?

#25
16:51, 3 ноя 2016

Да, все декорации и юниты + ландшафт, только фильтрую частицы и всякие эффекты типа glow. 60 fps, правда пока не пробовал на больших сценах.

Ещё нужно будет как-то рендеринг в карту теней оптимизировать, но это уже потом.

#26
17:04, 3 ноя 2016

Чувак сделай лучше риппер который рипает все, чам этой херней страдать

#27
17:34, 3 ноя 2016

Polyflow3d, риппер для варкрафта или вообще? Если второе, то их полно в сети. А если для варкрафта, то зачем? Там и так все модели и текстуры лежат в открытых архивах игры. К тому же я сделал логгер примитивов и возможность рипнуть меш по указанным numVertices и primCount.

#28
18:16, 3 ноя 2016

ENAleksey
полно - это какие? я знаю dxripper , он работает только с dx9, и ninja - он глючный весьма, и тоже вроде в dx11 не умеет .

#29
18:43, 3 ноя 2016

ENAleksey
> VertexBuffer(0710F120)->Lock(20448, 23008, 0019F95C, 6144) // 0019F95C этот?
да, перед unlock'om сохрани 23008 байт в отдельный свой буффер.
грубо говоря:

DXWrapper::lock(int offset, size_t sz, void** buffer, DWORD vertex_decl)
{
  size_t my_sz = sz;
  my_buffer = *buffer;
  vb->Lock( offset, sz, buffer, vertex_decl );
}

DXWrapper::unlock()
{
  model_data = new unsigned char[my_sz];
  memcpy((void*)model_data, my_buffer, my_sz);
  vb->Unlock();
}
Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.