//
//说明 :Direct3D成长日记(05):简单几何模型绘制。
//作者 :shenzi
//完成时间 :2009.05.07
//描述 :绘制简单的立体图形-正方体。可以通过鼠标进行控制几何体,鼠标按
// 下拖动鼠标,旋转几何体,松开鼠标停止。F1控制是否用索引顶点。
//
//包含头文件,相应库:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment (lib, "d3dx9.lib")
//全局变量声明:
LPDIRECT3D9 g_pD3D = NULL; //Direct3D接口指针
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;//Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVBuffer = NULL; //顶点缓存
LPDIRECT3DVERTEXBUFFER9 g_ppVBuffer =NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVBuffer_Indexed = NULL;
LPDIRECT3DINDEXBUFFER9 g_pIndexBuffer = NULL;
LPDIRECT3DTEXTURE9 g_pTexture1 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture2 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture3 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture4 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture5 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture6 = NULL; //纹理对象
#define WINDOW_CLASS_NAME L"Direct3D"
#define WINDOW_NAME L"Direct3DBasics Tutorial"
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
//鼠标移动控制的旋转
float g_fSpinX = 0.0f;
float g_fSpinY = 0.0f;
int fillMode = 2;
//顶点结构
struct CUSTOMVERTEX
{
FLOAT X, Y ,Z;
FLOAT u,v;
};
#define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_TEX1)
//函数声明:
HRESULT InitD3D( HWND); //初始化Direct3D
void RenderFrame( void); //场景渲染
void CleanD3D( void); //释放资源
HRESULT InitGraphics(void); //初始化图形
void SetupMatrices(void); //模型视图投影矩阵设置
//WINDOWS 消息处理函数:
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM);
//WinMain函数:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hprevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//变量声明:
HWND hwnd;
MSG msg;
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
//创建窗口类
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor( NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = WINDOW_CLASS_NAME;
wc.hIconSm = NULL;
//注册窗口类
RegisterClassEx(&wc);
//初始化窗口
hwnd = CreateWindowEx( NULL,
WINDOW_CLASS_NAME,
WINDOW_NAME,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
SCREEN_WIDTH,
SCREEN_HEIGHT,
NULL, NULL, hInstance, NULL);
//显示,更新窗口:
//说明 :Direct3D成长日记(05):简单几何模型绘制。
//作者 :shenzi
//完成时间 :2009.05.07
//描述 :绘制简单的立体图形-正方体。可以通过鼠标进行控制几何体,鼠标按
// 下拖动鼠标,旋转几何体,松开鼠标停止。F1控制是否用索引顶点。
//
//包含头文件,相应库:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment (lib, "d3dx9.lib")
//全局变量声明:
LPDIRECT3D9 g_pD3D = NULL; //Direct3D接口指针
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;//Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVBuffer = NULL; //顶点缓存
LPDIRECT3DVERTEXBUFFER9 g_ppVBuffer =NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVBuffer_Indexed = NULL;
LPDIRECT3DINDEXBUFFER9 g_pIndexBuffer = NULL;
LPDIRECT3DTEXTURE9 g_pTexture1 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture2 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture3 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture4 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture5 = NULL; //纹理对象
LPDIRECT3DTEXTURE9 g_pTexture6 = NULL; //纹理对象
#define WINDOW_CLASS_NAME L"Direct3D"
#define WINDOW_NAME L"Direct3DBasics Tutorial"
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
//鼠标移动控制的旋转
float g_fSpinX = 0.0f;
float g_fSpinY = 0.0f;
int fillMode = 2;
//顶点结构
struct CUSTOMVERTEX
{
FLOAT X, Y ,Z;
FLOAT u,v;
};
#define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_TEX1)
//函数声明:
HRESULT InitD3D( HWND); //初始化Direct3D
void RenderFrame( void); //场景渲染
void CleanD3D( void); //释放资源
HRESULT InitGraphics(void); //初始化图形
void SetupMatrices(void); //模型视图投影矩阵设置
//WINDOWS 消息处理函数:
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM);
//WinMain函数:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hprevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//变量声明:
HWND hwnd;
MSG msg;
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
//创建窗口类
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor( NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = WINDOW_CLASS_NAME;
wc.hIconSm = NULL;
//注册窗口类
RegisterClassEx(&wc);
//初始化窗口
hwnd = CreateWindowEx( NULL,
WINDOW_CLASS_NAME,
WINDOW_NAME,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
SCREEN_WIDTH,
SCREEN_HEIGHT,
NULL, NULL, hInstance, NULL);
//显示,更新窗口: