Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(lib, "ScrnSavw.lib")
- #else
- #pragma comment(lib, "ScrnSave.lib")
- #endif
- #pragma comment(lib, "Comctl32.lib")
- #include <windows.h>
- #include <ScrnSave.h>
- #include <CommCtrl.h>
- #include <mmsystem.h>
- #include <d3d9.h>
- #include <d3dx9.h>
- #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
- LPDIRECT3D9 Direct3D = NULL;
- LPDIRECT3DDEVICE9 DirectDevice = NULL;
- LPDIRECT3DVERTEXBUFFER9 VBuffer = NULL;
- LPDIRECT3DINDEXBUFFER9 IBuffer = NULL;
- D3DXMATRIX WorldR;
- D3DXMATRIX View;
- RECT winRect;
- UINT Time = 0;
- FLOAT Angle = 0;
- UINT timer_id;
- //структура, описывающая вершину:
- struct CUSTOMVERTEX {
- FLOAT X, Y, Z;
- DWORD Color;
- };
- //Массив вершин:
- CUSTOMVERTEX CubeVertex[] =
- {
- //куб
- //грань 1
- { 1.0f, -1.0f, -1.0f, 0x00ff0000 },
- { 1.0f, 1.0f, -1.0f, 0x0000ff00 },
- { -1.0f, 1.0f, -1.0f, 0x000000ff },
- { -1.0f, -1.0f, -1.0f, 0x00ffff00 },
- //грань 2
- { -1.0f, -1.0f, -1.0f, 0x0000ff00 },
- { -1.0f, 1.0f, -1.0f, 0x000000ff },
- { -1.0f, 1.0f, 1.0f, 0x00ffff00 },
- { -1.0f, -1.0f, 1.0f, 0x0000ffff },
- //грань 3
- { -1.0f, -1.0f, 1.0f, 0x000000ff },
- { -1.0f, 1.0f, 1.0f, 0x00ffff00 },
- { 1.0f, 1.0f, 1.0f, 0x0000ffff },
- { 1.0f, -1.0f, 1.0f, 0x00ff00ff },
- //грань 4
- { 1.0f, -1.0f, 1.0f, 0x00ffff00 },
- { 1.0f, 1.0f, 1.0f, 0x0000ffff },
- { 1.0f, 1.0f, -1.0f, 0x00ff00ff },
- { 1.0f, -1.0f, -1.0f, 0x00ff0000 },
- //грань 5
- { 1.0f, -1.0f, -1.0f, 0x0000ffff },
- { -1.0f, -1.0f, -1.0f, 0x00ff00ff },
- { -1.0f, -1.0f, 1.0f, 0x00ff0000 },
- { 1.0f, -1.0f, 1.0f, 0x0000ff00 },
- //грань 6
- { 1.0f, 1.0f, 1.0f, 0x00ff00ff },
- { -1.0f, 1.0f, 1.0f, 0x00ff0000 },
- { -1.0f, 1.0f, -1.0f, 0x0000ff00 },
- { 1.0f, 1.0f, -1.0f, 0x000000ff }
- };
- //Массив индексов:
- unsigned short CubeIndex[] =
- {
- 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
- };
- float iWidth = (float)winRect.right - (float)winRect.left;
- float iHeight = (float)winRect.bottom - (float)winRect.top;
- float Aspect = iWidth / iHeight;
- float x = 1.0f / sqrt(2.0f);
- float y = x;
- // Отправить объявления функций, включенных в этот модуль кода:
- LONG WINAPI ScreenSaverProc(HWND, UINT, WPARAM, LPARAM);
- BOOL WINAPI ScreenSaverConfigureDialog(HWND, UINT, WPARAM, LPARAM);
- BOOL WINAPI RegisterDialogClasses(HANDLE);
- HRESULT DInit(HWND hWnd)
- {
- if (FAILED(Direct3D = Direct3DCreate9(D3D_SDK_VERSION)))
- return E_FAIL;
- D3DDISPLAYMODE Display;
- if (FAILED(Direct3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
- return E_FAIL;
- D3DPRESENT_PARAMETERS Device;
- ZeroMemory(&Device, sizeof(Device));
- //Device.hDeviceWindow = hWnd;
- Device.BackBufferFormat = D3DFMT_R5G6B5;
- Device.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);
- Device.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);
- Device.Windowed = FALSE;
- Device.SwapEffect = D3DSWAPEFFECT_DISCARD;
- Device.FullScreen_RefreshRateInHz = Display.RefreshRate;
- Device.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
- if (FAILED(Direct3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &Device, &DirectDevice)))
- return E_FAIL;
- DirectDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
- //(*DirectDevice)->SetRenderState(D3DRS_AMBIENT, 0x00ffffff);
- DirectDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
- return S_OK;
- }
- HRESULT ObjInit()
- {
- VOID *vBuf;
- VOID *iBuf;
- if (FAILED(DirectDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX)*24, 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &VBuffer, 0)))
- return E_FAIL;
- if (FAILED(VBuffer->Lock(0, sizeof(CUSTOMVERTEX) * 24 , (void**)&vBuf, 0)))
- return E_FAIL;
- memcpy(vBuf, CubeVertex, sizeof(CUSTOMVERTEX) * 24 );
- VBuffer->Unlock();
- if (FAILED(DirectDevice->CreateIndexBuffer(sizeof(short)*36, 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &IBuffer, 0)))
- return E_FAIL;
- if (FAILED(IBuffer->Lock(0, sizeof(short) * 36 , (void**)&iBuf, 0)))
- return E_FAIL;
- memcpy(iBuf, CubeIndex, sizeof(short) * 36 );
- IBuffer->Unlock();
- return S_OK;
- }
- VOID Matrix(LPDIRECT3DDEVICE9 DirectDevice, D3DXMATRIX World, D3DXMATRIX View, float Aspect)
- {
- D3DXMATRIX Projection;
- DirectDevice->SetTransform(D3DTS_WORLD, &World);
- DirectDevice->SetTransform(D3DTS_VIEW, &View);
- D3DXMatrixPerspectiveFovLH(&Projection, D3DX_PI / 4, Aspect, 0.25f, 10000.0f);
- DirectDevice->SetTransform(D3DTS_PROJECTION, &Projection);
- }
- LONG WINAPI ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_CREATE:
- GetWindowRect(hWnd, &winRect);
- timer_id = SetTimer(hWnd, 1, 1000, NULL);
- if (FAILED(DInit(hWnd)))
- return FALSE;
- //Иинциализация объекта:
- else if (FAILED(ObjInit()))
- return FALSE;
- break;
- case WM_TIMER:
- Time = timeGetTime() % 5000;
- Angle = Time * (2.0f * D3DX_PI) / 5000.0f;
- WorldR =
- {
- cos(Angle * 2) + (1 - cos(Angle * 2))*x*x, (1 - cos(Angle * 2))*x*y, sin(Angle * 2)*y, 0,
- (1 - cos(Angle * 2))*x*y, cos(Angle * 2) + (1 - cos(Angle * 2))*y*y, -sin(Angle * 2)*x, 0,
- -sin(Angle * 2)*y, sin(Angle * 2)*x, cos(Angle * 2), 0,
- 0, 0, 0, 1
- };
- View =
- {
- abs(cos(Angle)), 0, 0, 0,
- 0, abs(cos(Angle)), 0, 0,
- 0, 0, abs(cos(Angle)), 0,
- 0, 0, 5, 1
- };
- DirectDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 20, 20, 20), 1.0f, 0);
- DirectDevice->BeginScene();
- Matrix(DirectDevice, WorldR, View, Aspect);
- DirectDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
- DirectDevice->SetStreamSource(0, VBuffer, 0, sizeof(CUSTOMVERTEX));
- DirectDevice->SetIndices(IBuffer);
- DirectDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
- DirectDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 24, 0, 12);
- DirectDevice->EndScene();
- DirectDevice->Present(NULL, NULL, NULL, NULL);
- break;
- case WM_DESTROY:
- if (timer_id)
- KillTimer(hWnd, timer_id);
- if (IBuffer != NULL)
- IBuffer->Release();
- if (VBuffer != NULL)
- VBuffer->Release();
- if (DirectDevice != NULL)
- DirectDevice->Release();
- if (Direct3D != NULL)
- Direct3D->Release();
- PostQuitMessage(0);
- break;
- default:
- return DefScreenSaverProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- return FALSE;
- }
- BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
- {
- return TRUE;
- }
- Device.Windowed = TRUE;
- Device.Windowed = FALSE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement