Опять учебник фленова. Компилятор MVS2010, компилируется белый экран, а должен разноцветный куб. В чем проблема?
#include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #include "dxfunc.h" #include <math.h> static TCHAR szWindowClass[] = _T("win32app"); static TCHAR szTitle[] = _T("FUCK OFF"); HINSTANCE hInst; int iWidth,iHeight; IDirect3D9 *pD3D = NULL; IDirect3DDevice9 *pD3DDevice = NULL; float ViewAngle=0; IDirect3DVertexBuffer9 * vBuffer; IDirect3DIndexBuffer9 * iBuffer; const int iVertsNum = 24; const int iIdxNum = 36; const int iPointsNum = 12; struct sVertex { float x, y, z; DWORD color; }; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateQuad() { const sVertex svVortexList[] = { -0.5f, -0.5f, -0.5f, 0x00ff0000, -0.5f, 0.5f, -0.5f, 0x00ff0000, 0.5f, -0.5f, -0.5f, 0x00ff0000, 0.5f, 0.5f, -0.5f, 0x00ff0000, 0.5f, -0.5f, -0.5f, 0x0000ff00, 0.5f, 0.5f, -0.5f, 0x0000ff00, 0.5f, -0.5f, 0.5f, 0x0000ff00, 0.5f, 0.5f, 0.5f, 0x0000ff00, 0.5f, -0.5f, 0.5f, 0x000000ff, 0.5f, 0.5f, 0.5f, 0x000000ff, -0.5f, -0.5f, 0.5f, 0x000000ff, -0.5f, 0.5f, 0.5f, 0x000000ff, -0.5f, -0.5f, 0.5f, 0x00ffff00, -0.5f, 0.5f, 0.5f, 0x00ffff00, -0.5f, -0.5f, -0.5f, 0x00ffff00, -0.5f, 0.5f, -0.5f, 0x00ffff00, -0.5f, 0.5f, -0.5f, 0x0000ffff, -0.5f, 0.5f, 0.5f, 0x0000ffff, 0.5f, 0.5f, -0.5f, 0x0000ffff, 0.5f, 0.5f, 0.5f, 0x0000ffff, 0.5f, -0.5f, -0.5f, 0x00ff00ff, 0.5f, -0.5f, 0.5f, 0x00ff00ff, -0.5f, -0.5f, -0.5f, 0x00ff00ff, -0.5f, -0.5f, 0.5f, 0x00ff00ff, }; void * pBuf; HRESULT hRes = pD3DDevice->CreateVertexBuffer(sizeof(sVertex) * iVertsNum, D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &vBuffer, 0); if (FAILED(hRes)) return; // заполнение вершинного буфера hRes = vBuffer->Lock(0, sizeof(sVertex) * iVertsNum, &pBuf, 0); if (FAILED(hRes)) return; memcpy(pBuf, svVortexList, sizeof(sVertex) * iVertsNum); vBuffer->Unlock(); const unsigned short Idxes[]={ 0,1,2,2,1,3, 4,5,6,6,5,7, 8,9,10,10,9,11, 12,13,14,14,13,15, 16,17,18,18,17,19, 20,21,22,22,21,23, }; // создание индексного буфера hRes = pD3DDevice->CreateIndexBuffer( sizeof(short) * iIdxNum, 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT,&iBuffer, 0); if (FAILED(hRes)) return; // заполнение индексного буфера hRes = iBuffer->Lock(0, sizeof(short) * iIdxNum, &pBuf, 0); if (FAILED(hRes)) return; memcpy(pBuf, Idxes, sizeof(short) * iIdxNum); iBuffer->Unlock(); } void SetView() { float z=1; D3DMATRIX View = { cos(z), -sin(z), 0, 0, sin(z), cos(z), 0, 0, 0, 0, 1, 0, 0, 0, 5, 1, }; pD3DDevice->SetTransform(D3DTS_VIEW, &View); } void DrawScene() { // выставляем матрицу для объекта в мировых координатах ViewAngle+=0.01; float b = ViewAngle; D3DMATRIX World = { cos(b)*cos(b), cos(b)*sin(b), sin(b), 0, -sin(b), cos(b), 0, 0, -sin(b)*cos(b), -sin(b)*sin(b), cos(b), 0, 0, 0, 0, 1, }; pD3DDevice->SetTransform(D3DTS_WORLD, &World); // вершинный формат pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE); // вершинный буфер pD3DDevice->SetStreamSource(0, vBuffer, 0, sizeof(sVertex)); // индексный буфер pD3DDevice->SetIndices(iBuffer); //pD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); // вывод объекта pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, iVertsNum, 0, iPointsNum); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Win32 Guided Tour"), NULL); return 1; } iWidth=GetSystemMetrics(SM_CXSCREEN); iHeight=GetSystemMetrics(SM_CYSCREEN); hInst = hInstance; HWND hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 500, NULL, NULL, hInstance, NULL); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), NULL); return 1; } if (DX3DInit(&pD3D, &pD3DDevice, hWnd, iWidth, iHeight, FALSE)!=S_OK) { MessageBox(hWnd, _T("Error DX"), _T("Error"), MB_OK); return FALSE; } CreateQuad(); SetView(); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: RECT r; SetRect(&r, 0, 0, iWidth, iHeight); pD3DDevice->Clear(1, (D3DRECT*)&r, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0, 0); pD3DDevice->BeginScene(); DrawScene(); pD3DDevice->EndScene(); pD3DDevice->Present(NULL, NULL, 0, NULL); break; case WM_DESTROY : if (vBuffer) {vBuffer->Release(); vBuffer=NULL;} if (iBuffer) {iBuffer->Release(); iBuffer=NULL;} if (pD3DDevice) {pD3DDevice= NULL; pD3DDevice=NULL;} if (pD3D) {pD3D= NULL; pD3D=NULL;} PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
Nikita.S.
Учебник бумажный? Если да - подожги его и туши мочой.
Если электронный - срочно форматни винты...
Полный бред в коде. Открой пример ДХ, он лежит в
Путь к СДК/Samples/C++/Direct3D/Tutorials/
и там смотри где пример с треугольником, с матрицами и т.д.
Вот с него и начинай изучение ДХ.
Удачи
>Фленов Directx куб
лол, я подумал что фленов - это типа как маленькие дети говорят хренов)
у Френка Луны неплохой учебник для начала.
Спасибо fzr125
Mr F на английском?
Nikita.S.
Не за что =) Извини, если грубо было )))
fzr125
> Учебник бумажный? Если да - подожги его и туши мочой.
> Если электронный - срочно форматни винты...
Отличный совет! +100500 к нему.
Пожалуй лучше если только самого Фленова поджечь и мочой потушить.
fzr125
> подожги его и туши мочой.
хДДД отжог
Mr F
спасибо за книжку друг!
П.С. пожалуй тоже вступлю в ряды хейтеров фленова
Крутые примеры про примитивы
хз, у меня примеры фленова почти всегда работали. Так что нечего афтора винить коли руки из заднего прохода. К тому же примеры писались явно не для 2010 студии, а она девочка привередливая.
Вот то, что фленов является ксероксом для генерации разнообразной макулатуры компьютерной тематики, это да. Главная его заслуга это Библия Делфи.
Кстати, будете бузеть он вас всех поломает, он же крутой хацкер.
Nikita.S.
> static TCHAR szTitle[] = _T("FUCK OFF");
как корабль назовёшь, так он и поплывёт
или это в книге фленова так и напечатано?
Тема в архиве.