DirectX11-Sample-Tutorial05-立方体的绘制和坐标系的变换


本文实现的是立方体的绘制和坐标系变换。完整代码看这里



Tutorial05.fx

//--------------------------------------------------------------------------------------
// Constant Buffer Variables
//--------------------------------------------------------------------------------------
cbuffer CameraMatrix : register( b0 )
{
	matrix world;
	matrix view;
	matrix projection;
}

//--------------------------------------------------------------------------------------
struct VS_INPUT
{
    float4 Pos : POSITION;
    float4 Color : COLOR;
};

struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float4 Color : COLOR;
};


//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PS_INPUT VS( VS_INPUT input )
{
    PS_INPUT output = (PS_INPUT)0;
    output.Pos = mul( input.Pos, world );
    output.Pos = mul( output.Pos, view );
    output.Pos = mul( output.Pos, projection );
    output.Color = input.Color;
    
    return output;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PS_INPUT input) : SV_Target
{
    return input.Color;
}

main.cpp

#include <Windows.h>
#include <tchar.h>

#include <d3d11.h>
#include <D3DX11.h>
#include <D3Dcompiler.h>
#include <xnamath.h>

//全局结构,定义空间点和像素,相机矩阵,用于导入GPU中
struct SimpleVertex
{
	XMFLOAT3 Pos;//( x, y, z )
	XMFLOAT4 Color;//( B, G, R, A )
};

struct CameraMatrix
{
	XMMATRIX world;//世界坐标系
	XMMATRIX view;//视图坐标系
	XMMATRIX projection;//投影坐标系
};

//全局变量
HINSTANCE g_hInstance	=	NULL;//进程实例
HWND g_hWnd	=	NULL;//窗口句柄

D3D_DRIVER_TYPE g_driverType	=	D3D_DRIVER_TYPE_HARDWARE;//驱动类型
D3D_FEATURE_LEVEL g_featureLevel	=	D3D_FEATURE_LEVEL_11_0;//SDK版本

//利用函数D3D11CreateDeviceAndSwapChain()获取,设备、设备上下文、交换链
ID3D11Device* g_device	=	NULL;//设备,使用完要release
ID3D11DeviceContext* g_deviceContext	=	NULL;//设备上下文
IDXGISwapChain* g_swapChain	=	NULL;

//利用设备上下文获取渲染目标视图
ID3D11RenderTargetView* g_renderTargetView	=	NULL;

//引入深度缓存和深度模板,解决遮挡问题
ID3D11Texture2D* g_depthBuffer	=	NULL;
ID3D11DepthStencilView* g_depthStencilView	=	NULL;

//编译顶点着色器文件,获取g_vertexShader
ID3D11VertexShader* g_vertexShader	=	NULL;

//编译像素着色器文件,获取g_pixeShader
ID3D11PixelShader* g_pixelShader	=	NULL;

//引入顶点和颜色模型,创建顶点缓存
//创建顶点分布和缓存
ID3D11InputLayout* g_inputLayout	=	NULL;
ID3D11Buffer* g_vertexBuffer	=	NULL;
//创建顶点标号缓存
ID3D11Buffer* g_indexBuffer	=	NULL;

//创建相机矩阵,以及对应的缓存
ID3D11Buffer* g_cameraMatrixBuffer	=	NULL;

XMMATRIX g_world1;//世界坐标系1
XMMATRIX g_world2;//世界坐标系2
XMMATRIX g_view;//视图坐标系
XMMATRIX g_projection;//投影坐标系


//全局函数声明
//初始化窗口
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );

//初始化设备
HRESULT InitDevice();
HRESULT CompileShaderFromFile( WCHAR* filename, LPCSTR entrypoint, LPCSTR shaderModel, ID3DBlob** ppBlob );//编译着色器文件

//接收消息,渲染窗口
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );//窗口过程函数看,用于接收输入设备的消息
void Render();//渲染窗口

//关闭设备
void ShutdownDevice();


int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPreInstance, LPWSTR nCmdLine, int nCmdShow )
{
	g_hInstance	=	hInstance;

	//初始化窗口
	if ( FAILED( InitWindow( g_hInstance, nCmdShow ) ) )
	{
		return 0;
	}

	//初始化设备
	if ( FAILED( InitDevice() ) )
	{
		ShutdownDevice();
		return 0;
	}

	//接收消息
	MSG msg	=	{ 0 };
	w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值