Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объект в виде сетки. нет поверхности! DirectX9 D3D 
V
    Опции темы
ano360
Дата 28.12.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

Репутация: нет
Всего: нет



Занимаюсь по книге про DirectX
Книга рассчитана на Visual С++ 6 какжется, у меня 2005.
Суть вот в чем. Описывается загрука простейшей модели с текстурой из файла .x и .bmp соответсвенно и отображение её на экране.
У меня почемуто вместо поверхности отображается только сетка(. подскажите плз. код для занющих вроде простой
И ещё . странный эфект . такое чуство что когда часть сетки образующей модель попадает в освещённую область-она становитс цвета текстуры вместо черного.
Код

//Загрука модели
DWORD LoadMesh (IDirect3DDevice9 *D3Dc,ID3DXMesh **mesh,LPDIRECT3DTEXTURE9 **tex,D3DMATERIAL9 **mat){
LPD3DXBUFFER mtrlBuf;
DWORD nMr;

D3DXLoadMeshFromX (TEXT("m.x"),D3DXMESH_SYSTEMMEM,D3Dc,NULL,&mtrlBuf,NULL,&nMr,mesh);
D3DXMATERIAL* pmat=(D3DXMATERIAL*)mtrlBuf->GetBufferPointer();

(*mat)=new D3DMATERIAL9[nMr];
(*tex)=new LPDIRECT3DTEXTURE9[nMr];

for (DWORD i=0;i<nMr;i++){
    (*mat)[i]=pmat[i].MatD3D;
    if(FAILED(D3DXCreateTextureFromFile(D3Dc,LPCWSTR(pmat[i].pTextureFilename),&(*tex)[i])))
    if(FAILED(D3DXCreateTextureFromFile(D3Dc,TEXT("t.bmp"),&(*tex)[i])))
        tex[i]=NULL;
}
return nMr;
}

//Установака камеры ,света. d3dc это объект типа Direcr3DDevice9
   D3DLIGHT9 light;
   ZeroMemory(&light,sizeof(D3DLIGHT9));
   light.Type=D3DLIGHT_DIRECTIONAL;
   light.Direction=D3DXVECTOR3(0.1f,0.1f,0.5f);
   light.Diffuse.a= light.Diffuse.r= light.Diffuse.g= light.Diffuse.b=1.0f;
   
   d3dc->SetLight(0,&light);
   d3dc->LightEnable(0,TRUE);
   D3DMATRIX View={1,0,0,0,
        0,1,0,0,
        0,0,1,0,
        0,0,500,1};
  d3dc->SetTransform(D3DTS_VIEW,&View);

//Вывод на экран
d3dc->Clear(1,(D3DRECT*)&r,D3DCLEAR_TARGET,D3DCOLOR_XRGB(200,255,255),1.0,0);
d3dc->BeginScene();

d3dc->SetRenderState(D3DRS_LIGHTING,TRUE);
for(DWORD i=0;i<dnm;i++){
      d3dc->SetMaterial (&Mat[i]);
      if(Tex[i])
          d3dc->SetTexture(i,Tex[i]);
          Mesh->DrawSubset(i);

d3dc->EndScene();
d3dc->Present(NULL,NULL,0,NULL);

}

Инициализаций DIrect 3d: она по идее должна быть правильной, т.к. собранй вручную(по кординатам) куб отображается нормально и в цвете
Код


HRESULT MinitDX3D(IDirect3D9 **dirx9,IDirect3DDevice9 **dirxdev9,HWND wind,DWORD w,DWORD h,BOOL full){
    if((*dirx9=Direct3DCreate9(D3D9b_SDK_VERSION))==NULL)
        return E_FAIL;
    D3DPRESENT_PARAMETERS d3param;
    ZeroMemory(&d3param,sizeof(d3param));

    d3param.BackBufferWidth=w;
    d3param.BackBufferHeight=h;
    int full_res;
    if(!full){
        full_res=MessageBox(hWnd,TEXT("FULL?"),TEXT("full screen"),MB_YESNO|MB_ICONQUESTION);
    }else{
        full_res=IDYES;
    }
    if(full_res==IDYES){
        d3param.BackBufferFormat=D3DFMT_R5G6B5;
        d3param.SwapEffect=D3DSWAPEFFECT_FLIP;
        d3param.Windowed=FALSE;
        d3param.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
        d3param.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
    }else{
        RECT wndRect;
        RECT clientRect;
        GetWindowRect(hWnd,&wndRect);
        GetClientRect(hWnd,&clientRect);

        int iW=w+(wndRect.right-wndRect.left)-(clientRect.right-clientRect.left);
        int iH=h+(wndRect.bottom-wndRect.top)-(clientRect.bottom-clientRect.top);
        MoveWindow(hWnd,wndRect.left,wndRect.top,iW,iH,TRUE);
        
        D3DDISPLAYMODE d3disp;
        (*dirx9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3disp);

        d3param.BackBufferFormat=d3disp.Format;
        d3param.SwapEffect=D3DSWAPEFFECT_DISCARD;
        d3param.Windowed=TRUE;
    }
        DWORD Flags=D3DCREATE_MIXED_VERTEXPROCESSING|D3DCREATE_MULTITHREADED;

        HRESULT hRes;
        if(FAILED(hRes=(*dirx9)->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,Flags,&d3param,dirxdev9)))
            return hRes;
        float Aspect = (float)d3param.BackBufferWidth/(float)d3param.BackBufferHeight;
        D3DXMATRIX matProg;
        D3DXMatrixPerspectiveFovLH(&matProg,D3DX_PI/4.0f,Aspect,0.1f,1000.0f);
        (*dirxdev9)->SetTransform(D3DTS_PROJECTION,&matProg);
        (*dirxdev9)->SetRenderState(D3DRS_LIGHTING, FALSE);
        return S_OK;
} 




Это сообщение отредактировал(а) ano360 - 28.12.2007, 16:44


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
ano360
Дата 28.12.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

Репутация: нет
Всего: нет



Я устранил проблему. 
Суть оказалась в том,что я выводил объект на экран в 2х местах(WinApi приложение):
В событии onPaint  я рисовал на экране куб и указывал,что надо строить проволочный куб.
Код

d3dc->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
 остался с прошлого урока и на экране даже не отображался за счет того что 
модель выводилась в обработки сообщений и преед выводом очищался экран:
Код

    while (true)
    {    if (PeekMessage(&msg,0,0,0,PM_NOREMOVE)){
            if(!GetMessage(&msg,NULL,0,0)) break ;
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    if(d3dc!=NULL){
    d3dc->Clear(1,(D3DRECT*)&r,D3DCLEAR_TARGET,D3DCOLOR_XRGB(200,255,255),1.0,0);
    d3dc->BeginScene();
    DrawScene2();
    d3dc->EndScene();
    d3dc->Present(NULL,NULL,0,NULL);}        
    }



Это сообщение отредактировал(а) ano360 - 28.12.2007, 20:53


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.