Проблема при отрисовке 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);
А так, если не получиться, хз чего оно не работает...
|
|
| |
error_132 | Дата: Суббота, 06 Августа 2011, 12:03 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| нет, бяка какая-то у меня еще до кучи нормали кривые, хотя странно почем - все освещается) "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 |
|
| |
|