/ Published in: C++
You have to link to ""d3d9.lib" and include the SDK folder on project settings.
This code works using DirectX SDK (June 2010).
I made it on a Singleton to make the access to it easier.
Comments in spanish because I'm spanish.
Be happy! :)
This code works using DirectX SDK (June 2010).
I made it on a Singleton to make the access to it easier.
Comments in spanish because I'm spanish.
Be happy! :)
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
----------------------------------------- Direct3D.h ---------------------------------------- /* Esto se utilizará para poder manejar en cualquier programa la librerÃa gráfica. Se han puesto en una clase aparte para obtener más portabilidad de este código. */ /* by Aday Melián Carrillo for the common knowledge */ #pragma once #include "Singleton.h" #include <d3d9.h> #include <D3dx9core.h> // Necesitaremos incluir en el Linker las siguientes librerÃas situadas en el directorio de DirectX: //"d3d9.lib" class ManejadorDirect3D : public Singleton<ManejadorDirect3D> { // Variables necesarias para el manejo de DirectX LPDIRECT3D9 d3d; // Puntero a la interfaz Direct3D LPDIRECT3DDEVICE9 d3ddev; // Puntero a la clase del dispositivo // Variables para el texto LPD3DXFONT pFuente; public: // Prototipos de función void initD3D(HWND hWnd); // Inicializa Direct3D LPDIRECT3DDEVICE9 GetDevice(void); // Obtenemos acceso al dispositivo de video void StartRender(void); // Comienza el Renderizado // En la aplicación, entre estas dos funciones añadiremos los diferentes renderizados. void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color); // Escribimos en pantalla void StopRender(void); // Finaliza el renderizado actual void cleanD3D(void); // Deinicializa Direct3D }; ----------------------------------------- Direct3D.cpp ------------------------------------- #include "Direct3D.h" // Inicializa Direct3D void ManejadorDirect3D::initD3D(HWND hWnd) { d3d = Direct3DCreate9(D3D_SDK_VERSION); // Creamos la interfaz Direct3D D3DPRESENT_PARAMETERS d3dpp; // Creamos una estructura para guardar información de varios dispositivos ZeroMemory(&d3dpp, sizeof(d3dpp)); // Vaciamos la estructura para su uso d3dpp.Windowed = TRUE; // Hacemos que el programa se adapte a una ventana d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // Descartamos los frames que puedan haber d3dpp.hDeviceWindow = hWnd; // Seleccionamos la ventana que utilizará Direct3D // Creamos un dispositivo de clase utilizando toda la información anterior d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); // Inicializamos la posibilidad de escribir fuentes D3DXCreateFont( d3ddev, 20, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pFuente ); d3ddev->ShowCursor(true); } // Obtenemos acceso al dispositivo de video LPDIRECT3DDEVICE9 ManejadorDirect3D::GetDevice(void){ return d3ddev; } void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color) { D3DCOLOR fontColor = color; // Escribimos el texto pasado por parámetro del color descrito pFuente->DrawText(NULL, text, -1, &rct, 0, fontColor ); } // Función de comienzo de renderizado void ManejadorDirect3D::StartRender(void) { // Vaciamos la pantalla a un azúl profundo d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0); d3ddev->BeginScene(); // Comenzamos la escena 3D } // Entre estas dos funciones hemos de ejecutar todos los renders en la aplicación principal // Función para finalizar el renderizado. void ManejadorDirect3D::StopRender(void) { d3ddev->EndScene(); // Finalizamos la escena 3D d3ddev->Present(NULL, NULL, NULL, NULL); // Mostramos el frame que hemos preparado } // Función de deinicialización y limpieza de Direct3D y COM void ManejadorDirect3D::cleanD3D(void) { pFuente->Release(); d3ddev->Release(); // Cerramos y liberamos el dispositivo Direct3D d3d->Release(); // Cerramos y liberamos Direct3D }