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

这个博客展示了如何使用C++和Direct3D创建一个3D立方体。通过定义顶点结构、初始化Direct3D设备和缓冲区,以及设置摄像机和投影矩阵,实现了立方体的动态旋转显示。
摘要由CSDN通过智能技术生成
#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,
好的,以下是OpenGL代码来创建一个3D立方体: ```c++ #include <GL/glut.h> void init() { glEnable(GL_DEPTH_TEST); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glBegin(GL_QUADS); // Front face glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Back face glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f(1.0f, 1.0f, -1.0f); glVertex3f(1.0f, -1.0f, -1.0f); // Top face glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); // Bottom face glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(1.0f, -1.0f, -1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Left face glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Right face glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f); glVertex3f(1.0f, 1.0f, -1.0f); glVertex3f(1.0f, 1.0f, 1.0f); glEnd(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("3D Cube"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 这段代码使用 OpenGL 库来创建一个3D立方体。使用glBegin()和glEnd()函数来组织绘图,以及glVertex3f()函数来指定每个顶点的位置。通过glColor3f()函数来设置每个面的颜色。此外,gluLookAt()函数用于设置视角,以便我们可以看到立方体
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值