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

您所在的位置:网站首页 无法创建d3d11设备 Directx11基础教程四之Texture(纹理)

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

2024-07-14 01:01| 来源: 网络整理| 查看: 265

一,看本节教程前应该掌握:         (1) D3D11基础教程三之VertexShader,PixelShader,buffer

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

三,纹理坐标系:

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里,比原教程节省大量代码.

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

六,程序源代码链接如下

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3