DirectX11-Sample-Tutorial07-纹理+光照

完整代码看这里



Tutorial07.fx

Texture2D txDiffuse : register( t0 );
SamplerState samLinear : register( s0 );

cbuffer cbNeverChanges : register( b0 )
{
    matrix view;
};

cbuffer cbChangeOnResize : register( b1 )
{
    matrix projection;
};

cbuffer cbChangesEveryFrame : register( b2 )
{
    matrix world;
    float4 vMeshColor;
};


//--------------------------------------------------------------------------------------
struct VS_INPUT
{
    float4 Pos : POSITION;
    float2 Tex : TEXCOORD0;
};

struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float2 Tex : TEXCOORD0;
};


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.Tex = input.Tex;
    
    return output;
}


float4 PS( PS_INPUT input) : SV_Target
{
    return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor;
}

main.cpp

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



//顶点结构
struct SimpleVertex 
{
	XMFLOAT3 Pos;
	XMFLOAT2 Tex;
};

//常缓存结构,包括相机矩阵,和光照等
struct CBNeverChanges
{
	XMMATRIX mView;
};

struct CBChangeOnResize
{
	XMMATRIX mProjection;
};

struct CBChangesEveryFrame
{
	XMMATRIX mWorld;
	XMFLOAT4 vMeshColor;
};

//全局变量
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版本

ID3D11Device* g_device	=	NULL;//设备,显卡
ID3D11DeviceContext* g_deviceContext	=	NULL;//设备上下文
IDXGISwapChain* g_swapChain	=	NULL;//交换链
ID3D11RenderTargetView* g_renderTargetView	=	NULL;//渲染目标视图

ID3D11Texture2D* g_depthBuffer	=	NULL;//深度缓存
ID3D11DepthStencilView* g_depthStencilView	=	NULL;//深度模板视图

ID3D11VertexShader* g_vertexShader	=	NULL;//顶点着色器
ID3D11PixelShader* g_pixelShader	=	NULL;//像素着色器

ID3D11InputLayout* g_inputLayout	=	NULL;//输入布局
ID3D11Buffer* g_vertexBuffer	=	NULL;//顶点缓存
ID3D11Buffer* g_indexBuffer	=	NULL;//索引缓存

ID3D11Buffer*                       g_pCBNeverChanges = NULL;
ID3D11Buffer*                       g_pCBChangeOnResize = NULL;
ID3D11Buffer*                       g_pCBChangesEveryFrame = NULL;
ID3D11ShaderResourceView*           g_pTextureRV = NULL;
ID3D11SamplerState*                 g_pSamplerLinear = NULL;

XMMATRIX g_world;
XMMATRIX g_view;
XMMATRIX g_projection;
XMFLOAT4 g_vMeshColor( 0.7f, 0.7f, 0.7f, 1.0f );

//全局函数
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );//初始化窗口
HRESULT InitDevice();//初始化d3d设备
HRESULT CompileFromFile( 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 )
{
	//初始化窗口
	if ( FAILED( InitWindow( hInstance, nCmdShow ) ) )
	{
		return 0;
	}

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

	//循环接收消息
	MSG msg;
	ZeroMemory( &msg, sizeof( msg ) );
	while( msg.message != WM_QUIT )
	{
		if ( PeekMessage( &msg, g_hWnd, 0, 0, PM_REMOVE ) )
		{
			TranslateMessage( &msg );
			DispatchMessage( &msg );
		}
		else
		{
			Render();
		}
	}

	ShutdownDevice();

	return ( int )msg.wParam;
}

HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow )
{
	//初始化窗口类
	WNDCLASSEX wcex;
	wcex.cb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值