Directx11基础教程四之Texture(纹理)


一,看本节教程前应该掌握:

        (1) D3D11基础教程三之VertexShader,PixelShader,buffer


二,本节教程的程序结构:

Directx11基础教程四之Texture(纹理)_第1张图片



三,纹理坐标系:


Directx11基础教程四之Texture(纹理)_第2张图片


D3D11加载纹理资源的代码:

bool TexClass::Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename)
{
	HR(D3DX11CreateShaderResourceViewFromFileW(d3dDevice, TextureFilename, NULL, NULL, &mTexture, NULL));
	return true;
}


D3D11设置纹理资源的代码:

d3dDeviceContext->PSSetShaderResources(0, 1, &texture);


TexClass.h   (用于加载纹理)

#pragma once
#ifndef _TEX_CLASS_H
#define _TEX_CLASS_H

#include
#include"Macro.h"
#include //创建纹理资源的API

class TexClass
{
private:
	ID3D11ShaderResourceView* mTexture;

public:
	TexClass();
	TexClass(const TexClass&);
	~TexClass();

public:
	bool Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename);
	void Shutdown();
	ID3D11ShaderResourceView* GetTexture();

};
#endif // !_TEX_CLASS_H



TexClass.CPP

#include"TexClass.h"

TexClass::TexClass()
{
	mTexture = NULL;
}

TexClass::TexClass(const TexClass&other)
{

}

TexClass::~TexClass()
{

}

bool TexClass::Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename)
{
	HR(D3DX11CreateShaderResourceViewFromFileW(d3dDevice, TextureFilename, NULL, NULL, &mTexture, NULL));
	return true;
}

void TexClass::Shutdown()
{
	ReleaseCOM(mTexture);
}

ID3D11ShaderResourceView* TexClass::GetTexture()
{
	return mTexture;
}


四,本节教程得注意的地方:




(1)首先修复一下前几个教程冒出来的BUG,那时我以为是VS2015的bug,也就是在CameraClass.H里无法自动识别代码莫名其妙出现错误的BUG,

我发现如何一个.H文件单独包含库,而不包含则会出现这样的错误,并且我尝试在先在CamaraClass.H里先包含库,然后再包含也会出现这样的BUG,所以我推知里面某些代码的编写用到了里的代码,

所以在CameraClass.H里先包含,在包含


(2)能作为Shader编译文件畅游.HLSL .vs.ps .fx等格式,我试过都行,fx和HLSL格式都行,我为了不那么麻烦都是VertexShader和PixelShader都是放在MyShader.fx文件里


(3)Shader的调试方式(就是如何发现你的Shader有语法错误),以我的为粒子,右键“”MyShader.fx“” 属性-》配置属性-》项类型,然后设置“”HLSL编译器“”,在调试编译的时候,“”error X3501: 'main': entrypoint not found“”代表你没语法错误了,其它的都是语法错误,当你调试到“”error X3501: 'main': entrypoint not found“,这时候可以右键“”MyShader.fx“” 属性-》配置属性-》项类型,然后设置“”不参与生成“”.


(4) 第四点算是对第三点的补充,貌似VertexShader函数和PixelShader函数忘记 返回值(return)时编译错误也为“”error X3501: 'main': entrypoint not found“” ,比如

VertexOut VS(VertexIn ina)
{
	VertexOut outa;
	outa.Pos = mul(float4(ina.Pos,1.0f), World);
	outa.Pos = mul(outa.Pos, View);
	outa.Pos = mul(outa.Pos, Proj);
	outa.Tex= ina.Tex;
}


第五点,我把辅助的参数宏放到Macro.h里,比原教程节省大量代码.


五,本节教程的程序运行的结果:

Directx11基础教程四之Texture(纹理)_第3张图片



六,程序源代码链接如下

源码的链接:点击打开链接

你可能感兴趣的:(directx11入门)