GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (40 стр.)

Сообщения на форуме пользователя Andrey (40 стр.)

GetDCOrgEx + OpenGL21 окт. 201017:30#2
my.name
>либо как то обновлять контекст в рендере.
это каким образом можно сделать?
Создание огромного LOD ландшафта21 окт. 201011:36#7
Haroogan
> а ты учел что соседи могут различаться не на 1 ЛОД а на 2 например, т. е.
> когда нужно будет уже не по одной вершине убирать, а целых 3!?
А зачем так делать? можно проще, соседние лоды отличаются не более чем на 1 уровень. По идее это логично. Раcстояние посчитать по другому для этого и все. Зачем усложнять реализацию? Если отличается больше чем на 1 лод, можно уменьшить размер батча. Если батчей много то ландшафт разбивать на так называемые страницы и грузить динамически.
Vertex cache optimization15 окт. 201015:13#8
Z
> AMD tootle.
отличная штука
arabesc
> если, например, в контексте tootle, то из-за изменения порядка отрисовки
> треугольников модели, что повлияет на раннее z-отсечение
> p.s. но это, видимо, должен быть тяжёлый шейдер или сильный overdraw...
ну хуже она не сделает.
STL для игр12 окт. 201010:47#81
Rageous
> если для человека своп с последним элементом - сложный и непонятный код, то ему
> стоит поискать другое место работы
ну тут своп не нужен, достаточно присвоения последнего на место удаляемого. А про другое место полностью согласен!
STL для игр12 окт. 201010:05#77
outcast
> Went
> > ЩИТО??? Удаляю, я, значит, первый элемент вектора, и получаю мегакопирование
> > по
> > самые не балуйся.
>
> Заменить удаляемый элемент на последний и уменьшить размер на 1 - никак нельзя?
Нельзя для некоторых это сложный и непонятный код.
Бьярн Страуструп приезжает в Москву.11 окт. 201011:23#0
Бьярн Страуструп приезжает в Москву на конференцию Разработка ПО 2010.
http://cee-secr.org/lang/ru-ru/workshops/advanced-programming-techniques/

Я иду. Кто что про это думает?

Надо потестить демку на скорость.11 окт. 201010:40#7
Sergio
Падение, лог:
Начало работы
RENDER: NVIDIA Corporation
RENDER: GeForce 7600 GS/PCI/SSE2
RENDER: 2.1.2
RENDER: Vertex shader shaders\fullscreen.program compile report: 
RENDER: 0(1) : warning C7568: #version 150 not fully supported on current GPU target profile

RENDER: Fragment shader shaders\fullscreen.program compile report: 
RENDER: 0(1) : warning C7568: #version 150 not fully supported on current GPU target profile
[/code=]
Архитектура рендеринга сцены - что уменьшает FPS?9 окт. 201022:39#59
Try
>> if(!lighting) {glEnable(GL_LIGHTING); lighting=true;}
> это, вроде, на уровне дров учитывается
Это же вендорозависимо. На это не стоит полагаться.
QueryPerformanceCounter и многоядерность8 окт. 201011:24#109
arabesc
> за что вы так timeGetTime не любите?
чем это хуже clock() ? вызов clock() меньше по времени чем timeGetTime().
DirectX динамическая текстура6 окт. 201014:36#12
Ravager
> D3DFMT_X8R8G8B8
поставь формат D3DFMT_A8R8G8B8. Я такой ставил когда делал видео в текстуру.
запись данных в Direct3D текстуру у меня сделано вот так, там учитывается все:
// write pixel data
// width - width of Texture
// height - height of Texture
// bpp - bype per pixel of texture
bool Direct3DTexture::WriteData(const void* pixels)
{
  D3DLOCKED_RECT lockRect = {0};
  texture->LockRect(level, &lockRect, &rect, 0);
  void *data = NULL;
  if (!lock(&data, 0, lockRect)) {
    return false;
  }
  assert(lockRect.pBits && "NULL Pointer");
  size_t Pith = width * bpp;
  if (lockRect.Pitch == Pith) {
    memcpy(lockRect.pBits, pixels, Pith * height);
  }
  else {
    size_t copySize = Pith < static_cast<size_t>(lockRect.Pitch) ? Pith : lockRect.Pitch;
    char* outData = reinterpret_cast<char *>(lockRect.pBits);
    const char* inData = reinterpret_cast<const char *>(pixels);
    for(uint n = 0; n < height; ++n) {
      memcpy(outData, inData, copySize);
      inData += Pith;
      outData += lockRect.Pitch;
    }
  }
  texture->UnlockRect(0);
  return true;
}
DirectX динамическая текстура6 окт. 201012:37#10
Ravager
мне кажется мутекс неправильно ты поставил
static void *lock(void *data, void **p_pixels)
{
    ctx *cx = (ctx*)data;
    cx->mutex->lock();
    void*pix = cx->mainWindow->m_pRender->LockTexture();

    *p_pixels = pix;
    return NULL; /* picture identifier, not needed here */
}

static void unlock(void *data, void *id, void *const *p_pixels)
{

    ctx *cx = (ctx*)data;
    cx->mutex->unlock();
    cx->mainWindow->m_pRender->UnlockTexture();
    cx->mainWindow->update();
 //   cx->mainWindow->renderFrame(cx);



 //   assert(id == NULL); /* picture identifier, not needed here */
}
Да и текстуру попробуй во так создать:
//create texture matching size
void DirectXRender::SetTextureSize(int width, int height)
{
    if( width != m_Width || height != m_Height )
    {
        SAFE_RELEASE(m_pd3dTexture);
        m_Width = width;
        m_Height = height;
        HRESULT hr = m_pd3dDevice->CreateTexture(m_Width,
                                    m_Height,
                                    1,
                                    D3DUSAGE_DYNAMIC,
                                    D3DFMT_X8R8G8B8,
                                   D3DPOOL_DEFAULT,
                                    &m_pd3dTexture,
                                    0);
        if(FAILED(hr))
            throw DXException(hr,"When creating texture");

        //save size
    }
    CreateResources();
}
Проверь что возвращает IDirect3DTexture9::LockRect/IDirect3DTexture9::UnlockRect
Проверь что выдает DXDebug
Загрузка уровней6 окт. 201011:42#29
innuendo
> кстати, а octree хорошо будет жить на хексагональном ландшафте ?
лучше уже quadtree. Пробовать нужно.

Загрузка уровней6 окт. 201011:18#27
innuendo
> а если сцена динамическая ? - ну не вся конечно, арены, например, помнишь ? :)
Упс, да тогда естественно узлы не удалять. Есть вероятность что туда попадут динамические объекты при движении.
Загрузка уровней6 окт. 201010:44#25
AxMeT
> Повторный обход для удаления пустых узлов считаю лишней операцией. Возможно
> лучше выбрать другой вид дерева (или шаг разбиения), если таких узлов много.
Это при загрузке уровня идет. Вообще Это возможно сделать в тулзах и сохранить готовое дерево в файл. В другом виде дерева тоже могут быть пустые узлы.
Загрузка уровней6 окт. 20109:50#22
^Kenny^
> может быть моделька,
coordBox
> Тоесть уровень - не один меш а множество изолированыых друг от друга стен,
> ящиков, порожков и т.д. Я хочу приминить ОктТри для всей сцены.
т.е. моделька у ^Kenny^,  стены, ящики, порожки у coordBox это мешь с геометрией? если да то нужно подумать делать понятие объект от рисовки которые содержит набор полигонов из геометрии уровня и объект мешь который как раз содержит геометрию этих объектов.
PlayerDark
> у меня была идея - если полигон принадлежит сразу нескольким узлам дерева,
> выносить его вверх по иерархии нодов, не надо будет ничего делить.
Хорошая идея. Дробление не нужно. В таком случае нужно собирать данные не только с узлов а еще и с листьев.
coordBox
> рассматривал такой вариант. Тут нарушаются некоторые правила в дереве. В
> часност то, что "только листья содержат геометрию, и толькоони рисуются"
> ты реализовавал это или нет?
Кто сказал про такие правила? Если сделать так то не нужно дробить полигоны, дублировать т.е. мы упрощаем реализацию и решаем проблему дублирования полигонов по узлам.
AxMeT
> Лишнее дробление Octree. В этом он проигрывает KD-tree.
вот тут еще не понятно. в Octree будет меньше рекурсивных вызовов, если конечно делать обход дерева используя рекурсию, таким образом, Octree экономит ресурсы CPU, причем не всегда число дочерних узлов будет всегда 8. Можно же после построения пройти по дереву и удалить пустые узлы(не содержащие ссылок на дочерние или не содержащие ассоциированную геометрию).
> Тогда будут много ложных попаданий.
поясни про ложные попадания.
coordBox
> проверок польше при обходе придётся делать. то мы тупо рендим лист если он
> видим. а тут по пути к листу придётся ещё узлы все опрашивать неимеютли они
> геометрию? если да то рендить, и идти ниже.
Не совсем верно. Лучше обойти дерево собрать список данных для рендеринга, возможно отсечь еще через Occlusion Culling(или вообще это сделать еще на этапе обхода дерева через иерархические запросы предсказания когерентность и т.д.), потом это все отсортировать по материалам(а там заодно шейдеры текстуры растер операции и т.д.), расстоянию
Вот потом уже рисовать.

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр