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

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

cameraViewDir, ..upDir, eyePos -> GL glRotatef...15 мар. 200715:53#3
OAKmaden
gluLookAt  находится вроде в glu32.dll которая лежит в стандартной поставке Windows. так что используй и не парься.
Windows NT/2000: Requires Windows NT 3.5 or later.
  Windows 95/98: Requires Windows 95 or later. Available as a redistributable for Windows 95.
  Header: Declared in Glu.h.
  Library: Use Glu32.lib.
рендеринг ландшафта. подскажите пути оптимизации.15 мар. 200714:17#118
progman
даже не смотри в irrlicht.
там даже не создаются аппаратные буферы... вслучае Direct3D рендер идет через DrawIndexedPrimitiveUP в случае OpenGL даже не используется расширение GL_ARB_vertex_buffer_object это говорит об убогости рендера. Помню я запостил целый кусок кода по этому поводу вроде IronPeter офигел и сначала не поверил что это внутри irrlicht.
В Ogre пробелы между полигонами в демке terraine'а наблюдал при рендере через OpenGL.
Люди поможте с бампом!14 мар. 200712:58#7
Dimka_2006
ну дак это уже пещерный век так реализовывать бамп...
рендеринг ландшафта. подскажите пути оптимизации.13 мар. 200719:36#106
ProstoyUser
>И, я так понимаю, что многие отказались от октри. Теперь квадтри юзаете?
никто от него не отказывался
Не работает Bloom эффект.13 мар. 200711:40#13
Проблема решена... все таки  дело то было в настройках техники эффекта!! надо было запостить шейдер...
а дело вот в чем для всех техник был отключен тест глубины, а вот в техники смешивания 2 текстур не был отключен...
вот про что имеется ввиду:
technique Bloom
{
    pass p0 
    {    
    PixelShader = compile ps_1_4 Bloom();
    Vertexshader = null;    
          ZEnable = false; // Вот где была зарыта собака
    }    
}

technique Bright
{
    pass p0
    {
      Vertexshader = null;
        PixelShader = compile ps_2_a BrightPassFilter();
        ZEnable = false;
    }   
}

technique Blur {
   pass p1 {
        VertexShader = compile vs_1_1 blurVS();
        PixelShader = compile ps_2_a  Blur();
        ZEnable = false;
    }
}
Спасибо всем кто откликнулся. Если что-то еще не так будет работать я подниму тему.

Правка: 13 мар. 2007 11:47

billboard - как сориентировать на камеру?13 мар. 200710:57#50
progman
помнишь пост 8? а теперь посмотри на пост 44, там ты найдешь Up,Dir, Right вектора камеры....
попробуй разобраться в этих кусках кода и все должно заработать.
Не работает Bloom эффект.12 мар. 200720:27#10
NULL_PTR
>а очистить цвет в данном месте выходит?
IDirect3DDevice9::Clear ?
если это то чистится в методе BeginRenderTarget
>дхдебаг молчит?
молчит конечно
Не работает Bloom эффект.12 мар. 200720:26#9
SoRRoW
>Ты знаешь, по виду final'а похоже, что ты рендеришь в текстуру, которую нельзя рендерить
да нет этот рендер таржет используется как финальный и почему нельзя,
если с остальными все ок, более они создаются с одинаковыми параметрами как и этот.
Usage верный,
>проверь выбранный режим мультисамплинга
D3DMULTISAMPLE_NONE == режиму при создании устройства Direct3D.
также с Depth Stencil форматом. он такой-же как и при создании устройства Direct3D.
billboard - как сориентировать на камеру?12 мар. 200720:19#42
progman
попробуй это:
http://www.equalmeans.net/~chriss/EQM/Billboard.zip
может поможет...
Не работает Bloom эффект.12 мар. 200720:17#6
NULL_PTR
>а ты на экран вывел её?
издеваешься ;)
render->BeginScene();
    render->BindTexture(FinalTexture);
    PPQuad->DrawSubset(0);
    render->EndScene();
Не работает Bloom эффект.12 мар. 200720:03#4
NULL_PTR
>На финальной картинке один мусор, или это у меня с отрисовкой изображения проблемы?
Да нет это у все так. вот не пойму в чем дело :(
интеренсно то что я на каждом шаге сохранял текстуры прямо на диск ни одна текстура не портилась и верно приходит в шейдер...
но в финальном результате получается черти что
Не работает Bloom эффект.12 мар. 200719:39#2
Scart
>Во-первых, зачем скрины такого размера???
ну не стал заморачиватся обрезанием...
>Во-вторых, какое API? DirectX? Может текстура (Final) создается неправильно? Покажи как ее создаешь и как в нее рисуешь.
Direct3D.
Scart
Итак вот код:
    static const char *tBloom = "Bloom";
    ppEffect->SetTechnique(tBloom);
    //Set dynamic shader variables
    ppEffect->SetTexture("srcTexture", BlurTexture);
    ppEffect->SetTexture("sceneTexture", SceneTexture);
    ppEffect->GetEffect()->CommitChanges();
    render->BeginRenderTarget(Final);
    while(ppEffect->NextPass()) {
      //Render the Quad
      PPQuad->DrawSubset(0);
    }
    render->EndRenderTarget();
ppEffect - это обертка над ID3DXEffect.
вот BeginRenderTarget:
// Начало рендеринга в RenderTarget
void Direct3DRender::BeginRenderTarget(RenderTarget *renderTarget) const
{
... // неважный для проблемы код
renderToTexture = static_cast<RenderToTexture *>(renderTarget);
#ifdef _DEBUG
  HRESULT hr = S_OK;
  hr = pDevice->GetRenderTarget(0, &static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldRT);
  OutDirect3DError(hr);
  hr = pDevice->GetDepthStencilSurface(&static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldDepthStencil);
  hr = pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);  
  hr = pDevice->BeginScene();
  if (static_cast<Direct3DRenderToTexture *>(renderToTexture)->RT) {
    hr = pDevice->SetRenderTarget(0, static_cast<Direct3DRenderToTexture *>(renderToTexture)->RT);
  }
  hr = pDevice->SetDepthStencilSurface(static_cast<Direct3DRenderToTexture *>(renderToTexture)->depthStencil);
...
#else
....
#endif
...
}
// конец рендера рендеринга в RenderTarget
void Direct3DRender::EndRenderTarget() const
{
  if (!renderToTexture) {
    assert(renderToTexture && "NULL Pointer");
    return;
  }
#ifdef _DEBUG
  if (static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldDepthStencil) {
    hr = pDevice->SetDepthStencilSurface(static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldDepthStencil);
    static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldDepthStencil->Release();
    static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldDepthStencil = NULL;
  }
  // восстановление render target'а
  if (static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldRT) {
    hr = pDevice->SetRenderTarget(0, static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldRT);

    static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldRT->Release();
    static_cast<Direct3DRenderToTexture *>(renderToTexture)->oldRT = NULL;
  }
  hr = pDevice->SetRenderState(D3DRS_ZWRITEENABLE, true);
  OutDirect3DError(hr);
  hr = pDevice->EndScene();
#else
...
#endif
  renderToTexture = NULL;
}
Рендер в текстуру с отальными операциями сохранение и восстановления Depth Stencil, RenderTarget  стандартен.
так представле класс RenderTarget:
class Direct3DRenderToTexture : public RenderToTexture {
public:
  // render target
  IDirect3DSurface9 *RT;
  // старый render target
  IDirect3DSurface9 *oldRT;
  // depth stencil
  IDirect3DSurface9 *depthStencil;
  // стрый depth stencil
  IDirect3DSurface9* oldDepthStencil; 
  Direct3DRenderToTexture();
  virtual ~Direct3DRenderToTexture();
};
класс рендер в текстуру:
class RenderToTexture : public RenderTarget {
private:
  // результирующая текстура
  std::auto_ptr<Texture> texture;
public:
...
}
Класс Texture ничего особенного не предствляет, внутри его наследника (Direct3DTexture) содержится IDirect3DTexture9 *.
Класс RenderTarget  практически пустой интерфейс(ну там еще имя есть std::string).
Создаю рендер таржет так:
...
// финальная текстура
  Texture *FinalTexture;
....
// рендер в текстуру финальный для теста
  RenderToTexture *Final;
....
  render->CreateRenderToTexture(Final, 
    render->GetCurrentVideoMode().GetWidth(), 
    render->GetCurrentVideoMode().GetHeight(),
    Render::PIXEL_FORMAT_RBGA); // PIXEL_FORMAT_RBGA == 0 т.е. в CreateRenderToTexture будет формат D3DFMT_A8R8G8B8
  FinalTexture = Final->GetTexture();

Вот более подробно:
// создание рендера в текстуру
void Direct3DRender::CreateRenderToTexture(RenderToTexture *&rToTexture, unsigned int width, unsigned int height, int format) const
{
  static D3DFORMAT formats[] = { 
              D3DFMT_A8R8G8B8,
              D3DFMT_R32F
  };
  assert(format <= Render::PIXEL_FORMAT_FLOAT32 && "Out Of Range");
  if (rToTexture) {
    DeleteRenderToTexture(rToTexture);
  }
  rToTexture = new Direct3DRenderToTexture;
  Texture *texture = new Direct3DTexture;
  rToTexture->SetTexture(texture);
  IDirect3DTexture9 *d3dt9 = NULL;
  HRESULT hr = pDevice->CreateTexture(width, height,
    1, 
    D3DUSAGE_RENDERTARGET,
    formats[format],
    D3DPOOL_DEFAULT,
    &d3dt9,
    NULL);
  OutDirect3DError(hr);
  texture->SetWidth(width);
  texture->SetHeight(height);
  static_cast<Direct3DTexture *>(texture)->SetTexture(d3dt9);
  hr = d3dt9->GetSurfaceLevel(0, &static_cast<Direct3DRenderToTexture *>(rToTexture)->RT);
  OutDirect3DError(hr);
  hr = pDevice->CreateDepthStencilSurface(currentMode.GetWidth(),
    currentMode.GetHeight(),
    depthStencilformat,
    multiSampleType,
    0,
    TRUE,
    &static_cast<Direct3DRenderToTexture *>(rToTexture)->depthStencil, NULL);
  renderTargets.push_back(pRenderTarget(static_cast<RenderTarget *>(rToTexture)));
}
Думаю вусе понятно объяснил.
Архитектура движка12 мар. 200718:38#6
Scart
Мощно...
Не работает Bloom эффект.12 мар. 200718:06#0
Привет!! всем.
Поиск ничего не дал.
Делаю так:
1) Рендер сцены в текстуру.
2) Применяю эффект BrightPass к этой текстуре и сохраняю это в текстуре BrightTexture;
3) Применяю эффект Blur к этой текстуре и сохраняю результат в BlurTexture;
4) Финальный рендеринг(для теста тоже в текстуру) смешиваю цвет текстуры сцены и BlurTexture и сохраняю результат в FinalTexture;
5) Рендерю Квадрат с текстурой FinalTexture;
вот что получается:
Сцена:
Изображение удалено
BrightPass:
Изображение удалено
Blur:
Изображение удалено
Final:
Изображение удалено
Почему не работает смешивание? то что текстуры приходят верные проверял сам сохраняя их перед/после каждого прохода.
Что еще нужно запостить для решения проблемы шейдер, код?

Правка: 13 мар. 2007 11:47

Мнение о DoomIII12 мар. 200713:39#114
Злющий дядька
>И вообще, я забыл что сижу на очередной скучнейшей паре, где рассказывают про азы MSSQL, и полностью погрузился в игру.. :)
да БД это такая скукотища...

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

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