一个简单的3D立方体C++源码

这个博客展示了如何使用C++和Direct3D创建一个3D立方体。通过定义顶点结构、初始化Direct3D设备和缓冲区,以及设置摄像机和投影矩阵,实现了立方体的动态旋转显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<d3d9.h> //Direct3D程序不需的头文件
#include<d3dx9.h>//如果要使用D3DX库就必须加入这个头文件
#include<mmsystem.h>
#include<windows.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"winmm.lib")


//4个本程序用到的全局变量
LPDIRECT3D9 g_pD3D = NULL; //Direct3D指针
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;//Direct3D设备
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;//顶点缓冲区指针
LPDIRECT3DINDEXBUFFER9    g_pIB = NULL;//索引缓冲区指针

//定义使用到的顶点结构
struct CUSTOMVERTEX
{
    FLOAT x,y,z;
    DWORD color;
};

//定义上述顶点的FVF结构
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

//初始化Direct3D设备过程函数
HRESULT InitD3D(HWND hWnd)
{
    //创建Direct3D对象
    if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
    {
        return E_FAIL;
    }

    //填写创建Direct3D设备结构体
    D3DPRESENT_PARAMETERS  d3dpp;
    ZeroMemory(&d3dpp,sizeof(d3dpp));

    d3dpp.Windowed = false;//运行在窗口模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//最高效的工作方式
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//屏幕缓冲区数据像素格式

    //创建Direct3D设备
    if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice)))
    {
        return E_FAIL;
    }
    return S_OK;
}

//初始化与本程序绘图相关的数据函数
HRESULT InitDraw()
{
    //创建顶点缓冲区
    g_pD3DDevice->CreateVertexBuffer( 8 * sizeof(CUSTOMVERTEX),
        D3DUSAGE_WRITEONLY,
        D3DFVF_CUSTOMVERTEX,
        D3DPOOL_MANAGED,
        &g_pVB,
        0);
    //创建索引缓冲区
    g_pD3DDevice->CreateIndexBuffer(36 * sizeof(WORD),
        D3DUSAGE_WRITEONLY,
        D3DFMT_INDEX16,
        D3DPOOL_MANAGED,
        &g_pIB,
        0);
    //创建立方体的8个顶点,注意每个顶点的颜色都不同
    //在绘制时,Direct3D会根据顶点颜色对三角形内部像素进行插值,所以立方体看起来是彩色的 <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值