我对DX11的理解和简化框架与快速游戏制作(续6)
来源:互联网 发布:jrnl java 编辑:程序博客网 时间:2024/06/02 04:25
下面是Sprite类的设定:
在原先的DEVICE的工程文件中添加"SpriteBatch.h",因为它也是个公共的类;sprite是相对简单的一个渲染部件。它包含在视窗任何位置任何范围来快速绘制图片,同时包含裁减、偏移和镜像等功能本游戏没有用到旋转和缩放属性。
struct CB
{
Matrix p;Vector4 c;//这里虽然使用了 4x4矩阵但没有进行任何的矩阵运算,仅仅是记录变换信息而已。
};
struct SpriteBatch
{
Device device;
ID3D11VertexShader* VS;//一个空的shader
ID3D11PixelShader* PS;//绘图的Shader
ID3D11GeometryShader* GS;//变换坐标位置的shader
ID3D11Buffer* cb;//提供给显卡的BYTE变量
CB cbo;//存储变量与显卡交互的中间媒介
float* p;//变换位置坐标
float Width, Height;//绘制的窗口大小
SpriteBatch(){}
SpriteBatch(Device dev)
{
device=dev;
p=new float[16];
ResetPos();
ResetUV();
ID3DBlob* blob;
UINT size=(UINT)strlen(Code_Sprite)+1;
D3DX11CompileFromMemory(Code_Sprite,size,0, 0,0, "VS","vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, 0, 0, &blob, 0, 0);
device.dev->CreateVertexShader(blob->GetBufferPointer(),
blob->GetBufferSize(),0, &VS );
D3DX11CompileFromMemory(Code_Sprite,size,0, 0,0, "PS","ps_4_0", D3DCOMPILE_ENABLE_STRICTNESS, 0, 0, &blob, 0, 0);
device.dev->CreatePixelShader(blob->GetBufferPointer(),
blob->GetBufferSize(),0, &PS );
D3DX11CompileFromMemory(Code_Sprite,size,0, 0,0, "GS","gs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, 0, 0, &blob, 0, 0);
device.dev->CreateGeometryShader(blob->GetBufferPointer(),
blob->GetBufferSize(),0, &GS );
Kill(blob);
device.CreateConstantBuffer<CB>( cb);
void Begin()//和DX内置的sprite不同.我的sprite没有使用选项也没有End()属性,实际上也不需要他们。
{
device.context->IASetInputLayout(0);
device.context->VSSetShader(VS,0, 0 );
device.context->GSSetShader(GS,0, 0 );
device.context->PSSetShader(PS,0, 0 );
}
void SetTexture(Texture t)
{
device.context->PSSetShaderResources( 0, 1, &t.texture);
}
void Draw()
{ SetCB(); device.context->Draw(4,0);//显卡需要读入四个点来构成正方型
}
void Draw(Texture t, Vector4 c) {
ResetPos(); ResetUV(); cbo.c=c; SetTexture(t); Draw();
}//充满屏幕的绘制
void Draw(Texture t, float x, float y, float w, float h, Vector4 c)
{ ResetUV(); cbo.c=c; SetTexture(t); DrawQuad(x, y, w, h);
} //用于调整位置和大小的绘制
void Draw(Texture t, Vector2 pos, Rect r, Vector4 c, bool flip)
{
cbo.c=c; SetUV(t, r,flip); SetTexture(t);
DrawQuad(pos.X, pos.Y, (float)r.Width, (float)r.Height);
}//用于镜像和裁减和偏移的绘制
这里省略了个重要的画图环节 DrawQuad(x, y, w, h);它是绘图的核心。
在后面的游戏中将大量的使用这个类来绘制动态的2D元素。
- 我对DX11的理解和简化框架与快速游戏制作(续6)
- 我对DX11的理解和简化框架与快速游戏制作(续)
- 我对DX11的理解和简化框架与快速游戏制作(续1)
- 我对DX11的理解和简化框架与快速游戏制作(续2)
- 我对DX11的理解和简化框架与快速游戏制作(续3)
- 我对DX11的理解和简化框架与快速游戏制作(续4)
- 我对DX11的理解和简化框架与快速游戏制作(续5)
- 我对DX11的理解和简化框架与快速游戏制作(续7)
- 我对DX11的理解和简化框架与快速游戏制作
- 支持DX11游戏对硬件的要求
- 我对分布式计算框架的理解与设计
- 我对SNS游戏的初步理解
- 我对3d游戏的理解..
- 我对快速排序的理解。
- 探讨3d游戏的制作和我对quake2--java2版本的研究
- 我对O3W框架的理解
- 浅谈我对框架的理解
- 浅谈我对框架的理解
- 一个闹钟的单片机程序
- 一个activity中多个handler和消息的处理过程
- Tomcat 数据源 -- 原理、配置、使用
- Java笔记(五) 继承和访问控制
- Java'笔记(六) 方法重写和super关键字
- 我对DX11的理解和简化框架与快速游戏制作(续6)
- PHP XML Socket编程 服务端接收到多个连续xml等错误的解决办法
- 【分享】说说标准——CSS核心可视化格式模型(visual formatting model)之二:控制框(Controlling Box)的形成
- 在lua 中启用luasock的问题
- 怎样使用Eclipse来开发Android源码
- 在Eclipse中开发Android系统的内置应用(Mms, Contacts ect)
- 黑马程序员_学习笔记1泛型及动态代理类的总结
- Optimize InnoDB Table遇到的问题
- windows环境下搭建php mysql的仁你生不起啊