Понедельник, 25 Ноября 2024, 03:49

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема при отрисовке Direct3D
error_132Дата: Пятница, 05 Августа 2011, 21:50 | Сообщение # 1
частый гость
Сейчас нет на сайте
Раньше рендрил просто квдраты (какбы стены) и не было заметно, только когда подходишь близко и поварачиваешься в какую-ибудь сторону, то квадрат исчезает, хотя место для отрисовки его части остается, когда начал рендрить квадраты ввиде пола, то стало совсем плохо - квадрат видно только тогда, когда ты на него не наступаешь. не могу понять в чем может быть проблема, если для диагноза нужен код, то скажите какую часть, код довольно грамосткий чтобы выкладывать все

Сообщение отредактировал error_132 - Пятница, 05 Августа 2011, 22:02
DemeronДата: Пятница, 05 Августа 2011, 22:42 | Сообщение # 2
User created in C++
Сейчас нет на сайте
Хм... Я думаю, что это связано с тем, что ты рисуешь плоские объекты, ведь когда я редактирую в 3Ds Max плоскость, а затем поворачиваю ее - она становиться невидимой... Честно говоря я не уверен, хотя все может быть...
error_132Дата: Пятница, 05 Августа 2011, 22:48 | Сообщение # 3
частый гость
Сейчас нет на сайте
вот ехешник, глянь - поймешь что я хотел сказать, там проблема не в плоскости

http://rghost.ru/16978711
DemeronДата: Пятница, 05 Августа 2011, 23:08 | Сообщение # 4
User created in C++
Сейчас нет на сайте
Думаю, что ты что-то накосячил с параметрами... Нашел точки обзора, где рисуются только 1 треугольник:

error_132Дата: Суббота, 06 Августа 2011, 00:37 | Сообщение # 5
частый гость
Сейчас нет на сайте
это я то знаю, но инициализация устройства и рендер у меня основываются на уроках горнакова, и понять в каком месте херь не могу

Сообщение отредактировал error_132 - Суббота, 06 Августа 2011, 00:38
DemeronДата: Суббота, 06 Августа 2011, 00:46 | Сообщение # 6
User created in C++
Сейчас нет на сайте
Quote (error_132)
это я то знаю, но инициализация устройства и рендер у меня основываются на уроках горнакова, и понять в каком месте херь не могу

Ну короче говоря ты толком не знаешь DX)) Скинь мне код инициализации DirectX, может быть найду баг.
error_132Дата: Суббота, 06 Августа 2011, 00:51 | Сообщение # 7
частый гость
Сейчас нет на сайте
инициализация:
Code
if(NULL==(pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
         return false;
     D3DDISPLAYMODE Display;
     if(FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,
                    &Display)))
         return false;
     D3DPRESENT_PARAMETERS d3dp;
     ZeroMemory(&d3dp, sizeof(d3dp));
     d3dp.Windowed = true;
     d3dp.SwapEffect = D3DSWAPEFFECT_DISCARD;
     d3dp.BackBufferFormat = Display.Format;
     d3dp.EnableAutoDepthStencil = true;
     d3dp.AutoDepthStencilFormat = D3DFMT_D16;
     d3dp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
     if(FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                    *target->GetHandle(),
                    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                    &d3dp, &pDirect3DDevice)))
         return false;
     pDirect3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
     pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, true);
     pDirect3DDevice->SetRenderState(D3DRS_AMBIENT, 0);
     pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
     pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1,
                    D3DTA_TEXTURE);
     pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP,
                    D3DTOP_MODULATE);
     return true;

во время рендринга для камеры:
Code
D3DXMatrixIdentity(&Mview);
     D3DXMatrixIdentity(&Mproj);
     D3DXMatrixLookAtLH(&Mview, &D3DXVECTOR3(camera->x, camera->z, camera->y),
                        &D3DXVECTOR3(camera->xto, camera->zto, camera->yto),
                        &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
     pDirect3DDevice->SetTransform(D3DTS_VIEW, &Mview);
     D3DXMatrixPerspectiveFovLH(&Mproj, D3DXToRadian(45), 640.0/480.0, 1, 200.0f);
     pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &Mproj);
DemeronДата: Суббота, 06 Августа 2011, 01:21 | Сообщение # 8
User created in C++
Сейчас нет на сайте
Попробуй:
pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
pDirect3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

D3DXMatrixPerspectiveFovLH(&Mproj, D3DXToRadian(45), 640.0/480.0, 0, 200.0f);

А так, если не получиться, хз чего оно не работает... sad
error_132Дата: Суббота, 06 Августа 2011, 12:03 | Сообщение # 9
частый гость
Сейчас нет на сайте
нет, бяка какая-то sad у меня еще до кучи нормали кривые, хотя странно почем - все освещается)
"D3DXMatrixPerspectiveFovLH(&Mproj, D3DXToRadian(45), 640.0/480.0, 0, 200.0f);"
я проверил канеш "на вдруг", но такого быть не может

Добавлено (06.08.2011, 12:02)
---------------------------------------------
а проблема может быть не в инициализации и матрицах?

Добавлено (06.08.2011, 12:03)
---------------------------------------------
и еще, у меня квадрат не индеексированный, поэтому наверн с определенных мест отображается только один треугольник

DemeronДата: Суббота, 06 Августа 2011, 12:39 | Сообщение # 10
User created in C++
Сейчас нет на сайте
Quote (error_132)
и еще, у меня квадрат не индеексированный, поэтому наверн с определенных мест отображается только один треугольник

Может быть, хотя врятли....
error_132Дата: Суббота, 06 Августа 2011, 14:51 | Сообщение # 11
частый гость
Сейчас нет на сайте
Code
if(pDirect3DDevice == NULL) {
         Release();
         return false;
     }
     for(unsigned int j=0;j<Lights.size();++j)
         Lights[j]->Update();
     pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                            D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
     pDirect3DDevice->BeginScene();
     pDirect3DDevice->SetFVF(D3DFVF_DPXVERTEX);
     D3DXMatrixIdentity(&Mview);
     D3DXMatrixIdentity(&Mproj);
     D3DXVECTOR3* vec1 = new D3DXVECTOR3(camera->x, camera->z, camera->y);
     D3DXVECTOR3* vec2 = new D3DXVECTOR3(camera->xto, camera->zto, camera->yto);
     D3DXVECTOR3* vec3 = new D3DXVECTOR3(0.0f, 1.0f, 0.0f);
     D3DXMatrixLookAtLH(&Mview, vec1, vec2, vec3);
     pDirect3DDevice->SetTransform(D3DTS_VIEW, &Mview);
     D3DXMatrixPerspectiveFovLH(&Mproj, D3DXToRadian(45), 640.0f/480.0f, 1, 1000.0f);
     pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &Mproj);
     for(unsigned int i=0;i<Meshes.size();++i) {
         D3DXMatrixIdentity(&Mworld);
         D3DXMatrixTranslation(&Mworld, Meshes[i]->x, Meshes[i]->z, Meshes[i]->y);
         pDirect3DDevice->SetTransform(D3DTS_WORLD, &Mworld);
         pDirect3DDevice->SetStreamSource(0, Meshes[i]->vb, 0, sizeof(DPXVERTEX));
         pDirect3DDevice->SetTexture(0, Meshes[i]->texture->Texture);
         pDirect3DDevice->SetMaterial(&Meshes[i]->material->Material);
         pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, Meshes[i]->tcount);
     }
     pDirect3DDevice->EndScene();
     pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
     return true;

вот код рендеринга, может я с матрицами напортачил
а вот код того как я вожу камеру (не помнил как делать и сделал "от балды"):
Code
float direction = 90.0f;
if(direction>359.0f)
             direction-=360.0f;
         if(direction<0.0f)
             direction+=360.0f;
         if(app->input->KeyboardCheck(DIK_LEFT))
             direction -= 0.1f;
         if(app->input->KeyboardCheck(DIK_RIGHT))
             direction += 0.1f;

         if(app->input->KeyboardCheck(DIK_UP)) {
             app->device->camera->x -= cos(direction*M_PI/180.0f)*0.02f;
             app->device->camera->y += sin(direction*M_PI/180.0f)*0.02f;
         }
         if(app->input->KeyboardCheck(DIK_DOWN)) {
             app->device->camera->x += cos(direction*M_PI/180.0f)*0.02f;
             app->device->camera->y -= sin(direction*M_PI/180.0f)*0.02f;
         }
         app->device->camera->xto = app->device->camera->x - cos(direction*M_PI/180.0f);
         app->device->camera->yto = app->device->camera->y + sin(direction*M_PI/180.0f);
DemeronДата: Суббота, 06 Августа 2011, 15:09 | Сообщение # 12
User created in C++
Сейчас нет на сайте
Quote (error_132)
может я с матрицами напортачил

кроме "странного" кода где Y и Z поменяны местами больше ничего необычного не заметил...
Code
D3DXMatrixTranslation(&Mworld, Meshes[i]->x, Meshes[i]->[b]z[/b], Meshes[i]->[b]y[/b]);


Вот это не обязательно делать каждый кадр:
Quote (error_132)
pDirect3DDevice->SetFVF(D3DFVF_DPXVERTEX);


Quote (error_132)
D3DXMatrixPerspectiveFovLH(&Mproj, D3DXToRadian(45), 640.0f/480.0f, 1, 1000.0f);      pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &Mproj);
error_132Дата: Суббота, 06 Августа 2011, 22:48 | Сообщение # 13
частый гость
Сейчас нет на сайте
Quote
кроме "странного" кода где Y и Z поменяны местами больше ничего необычного не заметил...

я просто привык что Z - снизу в верх идет, вот и сделал иллюзию что так оно и есть

Добавлено (06.08.2011, 15:31)
---------------------------------------------
а в коде для камееры все норм, там где cos и sin?

Добавлено (06.08.2011, 16:30)
---------------------------------------------
нет, с камерой косяка нет, я и без нее щас проверил, тут я даже незнаю... мистика какая-то

Добавлено (06.08.2011, 22:48)
---------------------------------------------
вообщем решил что ДХ не для меня, перепишу все под ГЛ - там я разбираюсь по более


Сообщение отредактировал error_132 - Суббота, 06 Августа 2011, 22:48
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг