zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« : 17-06-2009 10:37 » |
|
Я хочу наложить текстуру на два куба, но на две стороны текстура не накладывается.Вот как я обявляю вершины кубов// Создаём вершины для куба TRIANGLEVERTEX Vertices[] = { {-2.5f, -2.5f, -2.5f, 0x00000fff, 1.0f, 0.0f}, {-2.5f, 2.5f, -2.5f, 0x00000fff, 1.0f, 1.0f}, { 2.5f, 2.5f, -2.5f, 0x00000fff, 0.0f, 1.0f}, { 2.5f, -2.5f, -2.5f, 0x00000fff, 0.0f, 0.0f}, { 2.5f, -2.5f, 2.5f, 0x00000fff, 0.0f, 1.0f}, { 2.5f, 2.5f, 2.5f, 0x00000fff, 0.0f, 0.0f}, {-2.5f, 2.5f, 2.5f, 0x00000fff, 1.0f, 0.0f}, {-2.5f, -2.5f, 2.5f, 0x00000fff, 1.0f, 1.0f} };
// Заполняем индексный буфер unsigned short Indexes[36] = { 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 3, 2, 5, 3, 5, 4, 7, 6, 1, 7, 1, 0, 1, 6, 5, 1, 5, 2, 3, 4, 7, 3, 7, 0 };
И ещё так как кубы мелковаты, я установил точку откуда смотрю 10 в место 80 и тогда на экране появляется один куб который можно хорошо рассмотреть. Не ужели чтобы мне правельно выводить текстуры мне нужно описать 24 вершины куба в место 8 или можно как-то исхитрится?И ещё я компилирую в среде Microsoft Visual C++ 6.0 Standard Edition и если я хочу запустить программу на компьютере, где не установлена среда Microsoft Visual C++ 6.0, то выскакивает сообщение об ошибке что программа не может найти какуюто d3dx9_40.dll от directx. Что с этим делать? В архиве лежит код, исполняемый файл и файл с текстурой.
|
|
« Последнее редактирование: 17-06-2009 11:11 от zuze »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 17-06-2009 10:42 » |
|
>>Что с этим делать? установить DirectX9 на WXP или DirectX10 на висте А с текстурами - наверное, легко запутаться в описаловках, проще сделать в 3D редакторе и импортировать, наверняка это возможно ----------- хотя... сообщение про d3dx9_40.dll и у меня выскочило, а у меня 6 студия стоит
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #2 : 17-06-2009 10:49 » |
|
У меня установлен DirectX9 на Windows XP. Немного помучаюсь, а если не получится воспользую 3D редактором. В примере который есть у меня показано наложение текстуры на куб, но в примере 24 вершины, а я взял вершины из 3D редактора, а он там всё оптимизировал и построил куб из 8 вершин, вот теперь и мучаюсь с текстурой.
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #3 : 17-06-2009 13:51 » |
|
Можно сделть только так, используя 24 вершины // Создаём вершины для куба TRIANGLEVERTEX Vertices[] = {
{ 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //А { 1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //В { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //С { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A2 { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B2 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C2 { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D2 { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A3 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B3 { 1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C3 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D3 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A4 { 1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B4 { 1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C4 { 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D4 { 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A5 { -1.0f,-1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B5 { -1.0f,-1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C5 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D5 { 1.0f, 1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A6 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B6 { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C6 { 1.0f, 1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f} //D6 };
// Заполняем индексный буфер unsigned short Indexes[36] = { 0,1,2, 2,3,0, 4,5,6, 6,7,4, 8,9,10, 10,11,8, 12,13,14, 14,15,12, 16,17,18, 18,19,16, 20,21,22, 22,23,20 };
А что касается второго вопроса, пока не решил, как это исправить.
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #4 : 17-06-2009 15:36 » |
|
Разобрался со вторым вопросом. Оказывается надо было установить более новый DirectX, я установил DirectX 9.26.1590 (Март 2009).
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #5 : 18-06-2009 01:04 » |
|
И ещё маленькое замечание, в моём случае тексура серого цвета, а цвет при инициализации вершин 0x00000fff (синий) из-за этого синий цвет наползает на текстуру, что бы этого не было надо выбрать белый цвет (0xffffffff).
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 18-06-2009 02:52 » |
|
имхо, цвет вершин используется только при градиентной заливке полигона, а при накладывании текстуры этот градиент просто не надо включать, то есть цвет вершин не должен влиять на вид текстуры (подобрать опции )
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #7 : 18-06-2009 11:46 » |
|
Фу, разобрался оказывается, надо убрать цвет вершин и вставить в место него нормали, вот какие изменения я внёс и всё заработало. Было такstruct TRIANGLEVERTEX { float x, y, z; D3DCOLOR color; // цвет float tu, tv; };
А стало такstruct TRIANGLEVERTEX { float x, y, z; float nx, ny, nz; // нормали float tu, tv; };
Было так#define D3DFVF_TRIANGLEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) А стало так#define D3DFVF_TRIANGLEVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1) Было так// Создаём вершины для куба TRIANGLEVERTEX Vertices[] = {
{ 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //А { 1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //В { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //С { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A2 { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B2 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C2 { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D2 { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A3 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B3 { 1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C3 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D3 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A4 { 1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B4 { 1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C4 { 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D4 { 1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A5 { -1.0f,-1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B5 { -1.0f,-1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C5 { 1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D5 { 1.0f, 1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A6 { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B6 { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C6 { 1.0f, 1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f} //D6 };
А стало так// Создаём вершины для куба TRIANGLEVERTEX Vertices[] = {
{ 1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 1.0f, 1.0f,}, //А { 1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 1.0f,}, //В { -1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,}, //С { -1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 1.0f, 0.0f,}, //D { -1.0f,-1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 1.0f,}, //A2 { -1.0f, 1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 1.0f,}, //B2 { -1.0f, 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 0.0f,}, //C2 { -1.0f,-1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f,}, //D2 { -1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, //A3 { -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f,}, //B3 { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,}, //C3 { 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f,}, //D3 { 1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,}, //A4 { 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,}, //B4 { 1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,}, //C4 { 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,}, //D4 { 1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, 1.0f, 1.0f,}, //A5 { -1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, 0.0f, 1.0f,}, //B5 { -1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, 0.0f, 0.0f,}, //C5 { 1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, 1.0f, 0.0f,}, //D5 { 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,}, //A6 { -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,}, //B6 { -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,}, //C6 { 1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,} //D6 };
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 18-06-2009 14:02 » |
|
то есть разница была в конструкторе (третий аргумент - DWORD или float) ? )
----
хотя, при чём тут конструктор, его же там нету. Тогда я не понял разницу
---- а, всё понял ))) Дело в опциях и было, как я и предположил
|
|
« Последнее редактирование: 18-06-2009 14:05 от Алексей1153++ »
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #9 : 19-06-2009 07:43 » |
|
Может будет кому полезна следующая информация я попытался наложить две разные текстуры на два объекта (куба)У меня был такой код и обе текстуры накладывались на каждый объект (куб)// Функция рендеринга Direct3D void RenderingDirect3D(void) { if (pDirect3DDevice == NULL) return;
pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);
pDirect3DDevice->BeginScene();
pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX)); pDirect3DDevice->SetIndices(pBufferIndexes); pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);
// Установка идентификатора первой текстуры pDirect3DDevice->SetTexture(0, pTexture0); // Устанавливает состояния и операции первой текстуры pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); // Установка идентификатора второй текстуры pDirect3DDevice->SetTexture (1, pTexture1); // Устанавливает состояния и операции второй текстуры pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
Matrix();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
Matrix1();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
pDirect3DDevice->EndScene();
pDirect3DDevice->Present(NULL, NULL, NULL, NULL); }
Тогда я решил изменить код так, но это не помогло// Функция рендеринга Direct3D void RenderingDirect3D(void) { if (pDirect3DDevice == NULL) return;
pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);
pDirect3DDevice->BeginScene();
pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX)); pDirect3DDevice->SetIndices(pBufferIndexes); pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);
// Установка идентификатора первой текстуры pDirect3DDevice->SetTexture(0, pTexture0); // Устанавливает состояния и операции первой текстуры pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); Matrix();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
// Установка идентификатора второй текстуры pDirect3DDevice->SetTexture (1, pTexture1); // Устанавливает состояния и операции второй текстуры pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
Matrix1();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
pDirect3DDevice->EndScene();
pDirect3DDevice->Present(NULL, NULL, NULL, NULL); }
Тогда я рашил изменить так и всё заработало// Функция рендеринга Direct3D void RenderingDirect3D(void) { if (pDirect3DDevice == NULL) return;
pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);
pDirect3DDevice->BeginScene();
pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX)); pDirect3DDevice->SetIndices(pBufferIndexes); pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);
pDirect3DDevice->SetTexture(1, NULL); // Установка идентификатора первой текстуры pDirect3DDevice->SetTexture(0, pTexture0); // Устанавливает состояния и операции первой текстуры pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
Matrix();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
pDirect3DDevice->SetTexture(0, NULL); // Установка идентификатора второй текстуры pDirect3DDevice->SetTexture (1, pTexture1); // Устанавливает состояния и операции второй текстуры pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
Matrix1();
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
pDirect3DDevice->EndScene();
pDirect3DDevice->Present(NULL, NULL, NULL, NULL); }
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #10 : 03-03-2011 15:12 » |
|
Читаю книгу Горгонова(глава 10), не получается загрузить текстуру и освещение не работает, Visual Studio 2010: #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include <Windows.h> #include <d3dx9.h> #include <d3d9.h> #include <d3dx9core.h> #include <MMSystem.h> #include <d3dx9tex.h> #include <d3d9types.h> double angle; LPDIRECT3D9 pDIRECT3D9=NULL; LPDIRECT3DDEVICE9 pDirect3ddevice9=NULL; LPDIRECT3DVERTEXBUFFER9 pbuffervershin=NULL; LPDIRECT3DINDEXBUFFER9 pbufferindex=NULL; LPDIRECT3DTEXTURE9 textura001; LPD3DXFONT pfont; RECT rec; HFONT hfont; struct customvertex { FLOAT x,y,z; float nx, ny,nz; float tu,tv; };
HRESULT initialdirect3d(HWND hwnd) { if (NULL==(pDIRECT3D9=Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; D3DDISPLAYMODE display; if (FAILED(pDIRECT3D9->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&display))) return E_FAIL; D3DPRESENT_PARAMETERS direct3dparametr; ZeroMemory(&direct3dparametr,sizeof(direct3dparametr)); direct3dparametr.Windowed=FALSE; direct3dparametr.SwapEffect=D3DSWAPEFFECT_DISCARD; direct3dparametr.BackBufferFormat=display.Format; direct3dparametr.EnableAutoDepthStencil=TRUE; direct3dparametr.AutoDepthStencilFormat=D3DFMT_D16; direct3dparametr.BackBufferWidth=GetSystemMetrics(SM_CXSCREEN); direct3dparametr.BackBufferCount=3; direct3dparametr.BackBufferHeight=GetSystemMetrics(SM_CYSCREEN); direct3dparametr.FullScreen_RefreshRateInHz=display.RefreshRate; if (FAILED(pDIRECT3D9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, &direct3dparametr,&pDirect3ddevice9))) return E_FAIL; pDirect3ddevice9->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE); return S_OK; } HRESULT initialbuffervershin() { customvertex vershin[]={ { 1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f,1.0f,1.0f}, //a { 1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f,0.0f,1.0f}, //b {-1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f,0.0f,0.0f}, //c {-1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f,1.0f,0.0f}, //d
{-1.0f,-1.0f,-1.0f,-1.0f, 0.0f, 0.0f,1.0f,1.0f}, //a2 {-1.0f, 1.0f,-1.0f,-1.0f, 0.0f, 0.0f,0.0f,1.0f}, //b2 {-1.0f, 1.0f, 1.0f,-1.0f, 0.0f, 0.0f,0.0f,0.0f}, //c2 {-1.0f,-1.0f, 1.0f,-1.0f, 0.0f, 0.0f,1.0f,0.0f}, //d2
{-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,1.0f,1.0f}, //a3 {-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.0f,1.0f}, //b3 { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.0f,0.0f}, //c3 { 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,1.0f,0.0f}, //d3
{1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f,1.0f,1.0f}, //a4 {1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,0.0f,1.0f}, //b4 {1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f,0.0f,0.0f}, //c4 {1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f,1.0f,0.0f}, //d4
{ 1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f,1.0f,1.0f}, //a5 {-1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f,0.0f,1.0f}, //b5 {-1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f,0.0f,0.0f}, //c5 { 1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f,1.0f,0.0f}, //d5
{ 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,1.0f,1.0f}, //a6 {-1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,0.0f,1.0f}, //b6 {-1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f,0.0f,0.0f}, //c6 { 1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f,1.0f,0.0f} };//d6 const unsigned short Index[]={ 0,1,2 ,2,3,0, 4,5,6 ,6,7,4, 8,9,10 ,10,11,8, 12,13,14 ,14,15,12, 16,17,18 ,18,19,16, 20,21,22 ,22,23,20};
if (FAILED(D3DXCreateTextureFromFile(pDirect3ddevice9,"directx.bmp",&textura001))) return E_FAIL; if (FAILED(pDirect3ddevice9->CreateVertexBuffer(36*sizeof(customvertex),0, D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1,D3DPOOL_DEFAULT,&pbuffervershin,NULL))) return E_FAIL; void* pbv; if (FAILED(pbuffervershin->Lock(0,sizeof(vershin),(void**)&pbv,0))) return E_FAIL; memcpy(pbv,vershin,sizeof(vershin)); pbuffervershin->Unlock(); pDirect3ddevice9->CreateIndexBuffer(36*sizeof(Index),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&pbufferindex,NULL); void * pbi; pbufferindex->Lock(0,sizeof(Index),(VOID**)&pbi,0); memcpy(pbi,Index,sizeof(Index)); pbufferindex->Unlock(); return S_OK; } void matrix() { D3DXMATRIX matrixworld, matrixwotldx,matrixwotldy,matrixwotldz; D3DXMATRIX matrixview; D3DXMATRIX matrixprojection; UINT Time =timeGetTime() % 5000; float angle=Time*(2.0f*D3DX_PI)/5000.f; D3DXMatrixRotationY(&matrixwotldy,angle); D3DXMatrixRotationX(&matrixwotldx,angle); D3DXMatrixMultiply(&matrixworld,&matrixwotldx,&matrixwotldy); pDirect3ddevice9->SetTransform(D3DTS_WORLD,&matrixworld); D3DXMatrixLookAtLH(&matrixview,&D3DXVECTOR3(0.0f,0.0f,-11.0f),&D3DXVECTOR3(0.0f,0.0f,0.0f), &D3DXVECTOR3(0.0f,1.0f,0.0f)); pDirect3ddevice9->SetTransform(D3DTS_VIEW,&matrixview); D3DXMatrixPerspectiveFovLH(&matrixprojection,D3DX_PI/4,1.0f,1.0f,100.0f); pDirect3ddevice9->SetTransform(D3DTS_PROJECTION,&matrixprojection);
} void lightmaterial() { D3DMATERIAL9 material; D3DLIGHT9 light; ZeroMemory(&material,sizeof(D3DMATERIAL9)); material.Diffuse.r=material.Ambient.r=1.0f; material.Diffuse.g=material.Ambient.g=1.0f; material.Diffuse.b=material.Ambient.b=0.0f; material.Diffuse.a=material.Ambient.a=1.0f; pDirect3ddevice9->SetMaterial(&material); D3DXVECTOR3 vectordir; ZeroMemory(&light,sizeof(D3DLIGHT9)); light.Type=D3DLIGHT_DIRECTIONAL; light.Diffuse.r=1.0f; light.Diffuse.g=1.0f; light.Diffuse.b=1.0f; light.Range=1000.0f; vectordir=D3DXVECTOR3(0.0f,0.0f,1.0f); D3DXVec3Normalize((D3DXVECTOR3*)&light.Direction,&vectordir); pDirect3ddevice9->SetLight(0,&light); pDirect3ddevice9->LightEnable(0,TRUE); pDirect3ddevice9->SetRenderState(D3DRS_LIGHTING,TRUE); pDirect3ddevice9->SetRenderState(D3DRS_AMBIENT,0); } void renderingdirect3d() { if (pDirect3ddevice9==NULL) return; pDirect3ddevice9->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(60,100,150),1.0f,0); pDirect3ddevice9->BeginScene(); lightmaterial() ; matrix(); pDirect3ddevice9->SetStreamSource(0,pbuffervershin,0,sizeof(customvertex)); pDirect3ddevice9->SetFVF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1); pDirect3ddevice9->SetIndices(pbufferindex); pDirect3ddevice9->SetTexture(0, textura001); // Устанавливает состояния и операции первой текстуры pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE); pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG2,D3DTA_DIFFUSE); pDirect3ddevice9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE); pDirect3ddevice9->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,36,0,12); pDirect3ddevice9->EndScene(); pDirect3ddevice9->Present(NULL,NULL,NULL,NULL); } void deletedirect3d() { if (textura001!=NULL) textura001->Release(); if (pbufferindex!=NULL) pbuffervershin->Release(); if (pbuffervershin!=NULL) pbuffervershin->Release(); if (pDirect3ddevice9!=NULL) pDirect3ddevice9->Release(); if (pDIRECT3D9!=NULL) pDIRECT3D9->Release(); } LRESULT CALLBACK MainWinProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) { switch(msg) { case WM_CREATE: // Вызывается, когда впервые создается окно return(0); case WM_PAINT: // Вызывается, когда окно обновляется renderingdirect3d(); ValidateRect(hwnd, NULL); return(0); case WM_DESTROY: { deletedirect3d(); PostQuitMessage(0); return(0); } default: return(DefWindowProc(hwnd,msg,wparam,lparam)); } } int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow) { WNDCLASSEX windowsclass; HWND hwnd; MSG msg; windowsclass.cbSize=sizeof(WNDCLASSEX); windowsclass.style=CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW; windowsclass.lpfnWndProc=MainWinProc; windowsclass.cbClsExtra=0; windowsclass.cbWndExtra=0; windowsclass.hInstance=hinstance; windowsclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); windowsclass.hCursor=LoadIcon(NULL,IDC_ARROW); windowsclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); windowsclass.lpszMenuName=NULL; windowsclass.lpszClassName="WINDOWSCLASS"; windowsclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION); if (!RegisterClassEx(&windowsclass)) return(0); if (!(hwnd=CreateWindowEx(NULL,"WINDOWSCLASS","базовое окно для директа",WS_OVERLAPPEDWINDOW| WS_VISIBLE,0,0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),NULL,NULL,hinstance,NULL))) return(0); if (SUCCEEDED(initialdirect3d(hwnd))) { if (SUCCEEDED(initialbuffervershin() )) { ShowWindow(hwnd,SW_SHOWDEFAULT); UpdateWindow(hwnd); ZeroMemory(&msg,sizeof(msg)); while (msg.message!=WM_QUIT) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else renderingdirect3d(); } } } return(0); }
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 03-03-2011 16:52 » |
|
kiler4747, какие ошибки возвращаются из функций ?
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #12 : 03-03-2011 19:29 » |
|
"urok1.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\lpk.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\usp10.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\advapi32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\sechost.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\rpcrt4.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\sspicli.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\cryptbase.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\winmm.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\d3d9.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\version.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\d3d8thk.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\dwmapi.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\D3DX9_43.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены. "urok1.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\uxtheme.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\shell32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\shlwapi.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\ole32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\nvd3dum.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\powrprof.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\setupapi.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\cfgmgr32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\oleaut32.dll", Невозможно найти или открыть файл PDB "urok1.exe": Загружено: "C:\Windows\SysWOW64\devobj.dll", Невозможно найти или открыть файл PDB
но проект всеравно запускается но без текстуры и освещения
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #13 : 03-03-2011 20:23 » |
|
kiler4747, отлично - сборка прошла. Теперь переходим к: kiler4747, какие ошибки возвращаются из функций ?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #14 : 03-03-2011 21:34 » |
|
-2005530520 pDirect3ddevice9->Present(NULL,NULL,NULL,NULL); S_OK S_OK S_OK
Добавлено через 1 минуту и 56 секунд: -2005530520 pDirect3ddevice9->Present(NULL,NULL,NULL,NULL); все остальные S_OK
|
|
« Последнее редактирование: 03-03-2011 21:36 от kiler4747 »
|
Записан
|
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #16 : 04-03-2011 13:38 » |
|
HRESULT: 0x88760868 (2289436776) Name: D3DERR_DEVICELOST Description: Device lost Severity code: Failed Facility Code: FACILITY_D3D (2166) Error Code: 0x0868 (2152)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 04-03-2011 15:11 » |
|
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #18 : 04-03-2011 15:59 » |
|
Незнаю
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 04-03-2011 16:05 » |
|
kiler4747, перебори лень и найди там, по ссылке, описание ошибки
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #20 : 04-03-2011 16:24 » |
|
Я нашол описание ошибки, но не понял что нужно сделать
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 04-03-2011 17:26 » |
|
ну ты шо! Вот же всё написано, английским по белому The device has been lost but cannot be reset at this time. Therefore, rendering is not possible.A Direct 3D device object other than the one that returned this code caused the hardware adapter to be reset by the OS. Delete all video memory objects (surfaces, textures, state blocks) and call Reset() to return the device to a default state. If the application continues rendering without a reset, the rendering calls will succeed.
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #22 : 04-03-2011 17:28 » |
|
Так что мне нужно исправить?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #23 : 04-03-2011 18:09 » |
|
у тебя с английским как ?
|
|
|
Записан
|
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #24 : 04-03-2011 18:16 » |
|
не оч
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #25 : 04-03-2011 18:30 » |
|
Хочешь программировать - придется подучить. У нас почти у всех "не оч", но стараемся. Кроме того, есть онлайн-словари (хорош multitran.ru) и переводчики (например, Гугль).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
kiler4747
Участник
Offline
|
|
« Ответ #26 : 04-03-2011 18:53 » |
|
Исправил, но всеравно не работает HWND hw; HRESULT renderingdirect3d() { if (pDirect3ddevice9==NULL) return E_FAIL; dd=pDirect3ddevice9->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(60,100,150),1.0f,0); pDirect3ddevice9->BeginScene(); lightmaterial() ; matrix(); dd=pDirect3ddevice9->SetStreamSource(0,pbuffervershin,0,sizeof(customvertex)); dd=pDirect3ddevice9->SetFVF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1); dd=pDirect3ddevice9->SetIndices(pbufferindex); dd=pDirect3ddevice9->SetTexture(0, textura001); // Устанавливает состояния и операции первой текстуры dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE); dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG2,D3DTA_DIFFUSE); dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE); dd=pDirect3ddevice9->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,36,0,12); pDirect3ddevice9->EndScene(); if (FAILED(pDirect3ddevice9->Present(NULL,NULL,NULL,NULL))) { deletedirect3d(); initialdirect3d(hw); } }
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 04-03-2011 18:58 » |
|
kiler4747, во-первых, поиск не нашёл в твоём коде ни "Reset", ни "D3DERR_DEVICELOST" во-вторых, для достижения удобства оберни объекты в классы, приделай методы Load и Delete. Тогда код сильно упроститься и станет читаемым Про детали не спрашивай, я уже ничего не помню, да и в изучении DX далеко зайти не успел
|
|
|
Записан
|
|
|
|
|