1.题解

小孩学英语比较有意思,Monkey three => 猴三,风一样的女子 => 风 Girl。诸如此类不是重点,重点是一花一世界,一草一天堂。花花草草,纷纷扰扰。大千世界,当别具法眼。

2.HLSL

着色器语言,其实就是 C。形如 :POSITION 的语义指示,所指示者,寄存器而已。写过操作系统的,就会明白,所谓的操作硬件,不过是操作硬件的寄存器罢了。HLSL,面向的是 GPU,操作的,当然是 GPU 的寄存器了。涉及到的特效文件 Cube.fx 内容如下:

//===========================
// Cube.fx (2013.12 by x01)
//=========================== Texture2D texDiffuse : register(t0);
SamplerState sampLinear : register(s0); cbuffer ConstantBuffer : register( b0 )
{
matrix mWorld;
matrix mView;
matrix mProjection;
float4 lightDirections[];
float4 lightColors[];
float4 outputColor;
float4 meshColor;
} struct VS_Input
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
}; struct PS_Input
{
float4 pos : SV_POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
}; PS_Input VS_Main( VS_Input input )
{
PS_Input output = (PS_Input);
output.pos = mul( input.pos, mWorld );
output.pos = mul( output.pos, mView );
output.pos = mul( output.pos, mProjection );
output.normal = mul( input.normal, mWorld );
output.tex = input.tex; return output;
} float4 PS_Main(PS_Input input) : SV_Target
{
float4 finalColor = ;
for (int i = ; i < ; i++)
{
finalColor += saturate( dot((float3)lightDirections[i], input.normal) * lightColors[i] );
}
finalColor.a = ; finalColor += texDiffuse.Sample(sampLinear, input.tex) * meshColor; return finalColor;
} float4 PS_Solid(PS_Input input) : SV_Target
{
return outputColor;
}

Cube.fx

其中,ConstantBuffer 为与程序代码通信之用。相关代码(Cube.cpp 中)如下:

struct ConstantBuffer
{
XMMATRIX World;
XMMATRIX View;
XMMATRIX Projection;
XMFLOAT4 LightDiretions[];
XMFLOAT4 LightColors[];
XMFLOAT4 OutputColor;
XMFLOAT4 MeshColor;
};
   // Update Constant Buffer Variables
ConstantBuffer cb1;
cb1.World = XMMatrixTranspose(m_mWorld);
cb1.View = XMMatrixTranspose(m_mView);
cb1.Projection = XMMatrixTranspose(m_mProjection);
cb1.LightDiretions[] = lightDirections[];
cb1.LightDiretions[] = lightDirections[];
cb1.LightColors[] = lightColors[];
cb1.LightColors[] = lightColors[];
cb1.OutputColor = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f);
cb1.MeshColor = m_MeshColor;
m_pContext->UpdateSubresource(m_pConstantBuffer, , nullptr, &cb1, , );

不难看出,基本是一一对应的关系,调用 UpdateSubresource() 函数完成数据更新。

3.基本设置

运行 VS2012,新建 Win32 空项目 x01.Game.CubeRun,选择菜单 VIEW =〉Other Windows =〉Property Manager,在 Manager 中,选择 Microsoft.Cpp.Win32.user 进行设置。相关设置,可参看 Main.cpp 文件中的注释。这样,新建项目时,就不需要重新设置了。

4.知识技巧

3D 游戏编程,无外乎光照、纹理、坐标变换。这些,DirectX SDK 文档语之甚详。除此之外,学习C++,推荐《C++ Primer》:细微之处,都讲得非常清楚。向量和矩阵,也是题中应有之义,好在不难。

说到技巧,最大的技巧就是复制与粘贴。毕竟有现成的代码可供参考,犯不上同自己较劲。而代码,几乎是公式化的东西,如注册窗口类,创建窗口,创建设备和交换链,创建设备上下文,创建渲染目标视图等等,都是可以直接拿来用的。理解之后,可将 DX11Base.h, DX11Base.cpp, Main.cpp, Helper.h 复制到一个模板文件夹中以重用。这也大多数人的选择。

在特效文件 Cube.fx 上右击,选择 Property 菜单,将 General =〉Item Type 内容设为 Does not participate in build,否则,HLSL 编译器会找不到 main 函数而报错。

源代码可到我的置顶博客 x01.Lab.Download 中下载。

x01.Game.CubeRun: 风一样的女子的更多相关文章

  1. x01.Game.CubeRun: XACT3 播放声音

    1.使用 Xact3 工具 在 DXSDK 安装目录 => Uilities => bin => x86 里,运行 Xact3.exe 程序,新建波形库(Wave Bank).声音库 ...

  2. [转载]Web 研发模式演变

    原文链接:https://github.com/lifesinger/blog/issues/184 前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的 ...

  3. 前端文摘:Web 开发模式演变历史和趋势

    今天的<前端文摘>给大家分享一篇玉伯的文章.文章详细介绍了 Web 开发的四种常用模式以及未来可能成为流行趋势的 Node 全栈开发模式,相信你看了以后一定会有收获. 您可能感兴趣的相关文 ...

  4. Web 研发模式演变

    前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的优劣. 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 ...

  5. js实现键盘操作对div的移动或改变-------Day43

    <爸爸去哪儿>的第二季据说要开播了额,有点小期待,不知道这一季的小宝贝们会有多萌,还会甜到心底吧, 哈哈,还记得那个风一样的女子呢,不知道她如今怎样了. 言归正传,继续今天的记录,实际上在 ...

  6. Web 开发模式演变历史和趋势

    前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的优劣. 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 ...

  7. [转] Web 开发模式演变历史和趋势

    文章转自梦想天空--前端文摘:Web 开发模式演变历史和趋势 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 3-5 人搞定所有开发.页面由 JSP.P ...

  8. Web 研发模式的演变

    前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的优劣. 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 ...

  9. [Node.js] 00 - Where do we put Node.js

    Ref: 前后端分离的思考与实践(五篇软文) 其实就是在吹淘宝自己的Midway-ModelProxy架构. 第一篇 起因 为了提升开发效率,前后端分离的需求越来越被重视, 同一份数据接口,我们可以定 ...

随机推荐

  1. CentOS 6.6 新安装系统的网络IP配置

    实例环境 虚拟机:VMware 11.1.0 系统:CentOS 6.6 # ifconfig -a       << 查看所有网卡的状态 2. # vi /etc/sysconfig/n ...

  2. Hibernate(八)__级联操作、struts+hibernate+接口编程架构

    级联操作 所谓级联操作就是说,当你进行主对象某个操作时,从对象hibernate自动完成相应操作. 比如: Department <---->Student 对象关系,我希望当我删除一个d ...

  3. 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

    通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlServer2008就不支持枚举类型的列,用的时候也 ...

  4. SQL Server 行转列重温

    转载自http://www.cnblogs.com/kerrycode/ 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER ...

  5. Validating HTTP data with Play

    Validations ensure that the data has certain values or meets specific requirements. You can use vali ...

  6. 开发 web 桌面类程序几个必须关注的细节

    HoorayOS 写了差不多快2年了,在我的坚持下也有一部分人打算着手自己也写套类似的程序,我想我可以提供一点经验. 俗话说细节决定成败,开发2年多来,我看过大大小小类似的程序不下20个,各有优点也各 ...

  7. WindowsForm如何实现类似微软project软件的甘特图?

    在管理软件研发过程中,特别是涉及项目管理或者生产计划方面,都需要一款类似微软project的控件对项目下的分解任务进行图形展示(甘特图).下面介绍一下在WindowsForm下如何实现类似微软proj ...

  8. javascript中的arguments对象

    在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量. 1.什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的 ...

  9. input输入样式,动画

    模板描述:input输入样式 动画,有输入框也有搜索框的样式,多种多样,大家根据自己的喜欢来. 找网站SEO教程,网站模板,以及想要建立个人博客的朋友来涂志海个人博客网,这里有你想要的一切(万一没有的 ...

  10. SharePoint 2010: Export User Profile Properties to a Text File or Excel using PowerShell

    导出到txt [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") ...