1.题解

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

2.HLSL

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

  1. //===========================
  2. // Cube.fx (2013.12 by x01)
  3. //===========================
  4.  
  5. Texture2D texDiffuse : register(t0);
  6. SamplerState sampLinear : register(s0);
  7.  
  8. cbuffer ConstantBuffer : register( b0 )
  9. {
  10. matrix mWorld;
  11. matrix mView;
  12. matrix mProjection;
  13. float4 lightDirections[];
  14. float4 lightColors[];
  15. float4 outputColor;
  16. float4 meshColor;
  17. }
  18.  
  19. struct VS_Input
  20. {
  21. float4 pos : POSITION;
  22. float3 normal : NORMAL;
  23. float2 tex : TEXCOORD0;
  24. };
  25.  
  26. struct PS_Input
  27. {
  28. float4 pos : SV_POSITION;
  29. float3 normal : NORMAL;
  30. float2 tex : TEXCOORD0;
  31. };
  32.  
  33. PS_Input VS_Main( VS_Input input )
  34. {
  35. PS_Input output = (PS_Input);
  36. output.pos = mul( input.pos, mWorld );
  37. output.pos = mul( output.pos, mView );
  38. output.pos = mul( output.pos, mProjection );
  39. output.normal = mul( input.normal, mWorld );
  40. output.tex = input.tex;
  41.  
  42. return output;
  43. }
  44.  
  45. float4 PS_Main(PS_Input input) : SV_Target
  46. {
  47. float4 finalColor = ;
  48. for (int i = ; i < ; i++)
  49. {
  50. finalColor += saturate( dot((float3)lightDirections[i], input.normal) * lightColors[i] );
  51. }
  52. finalColor.a = ;
  53.  
  54. finalColor += texDiffuse.Sample(sampLinear, input.tex) * meshColor;
  55.  
  56. return finalColor;
  57. }
  58.  
  59. float4 PS_Solid(PS_Input input) : SV_Target
  60. {
  61. return outputColor;
  62. }

Cube.fx

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

  1. struct ConstantBuffer
  2. {
  3. XMMATRIX World;
  4. XMMATRIX View;
  5. XMMATRIX Projection;
  6. XMFLOAT4 LightDiretions[];
  7. XMFLOAT4 LightColors[];
  8. XMFLOAT4 OutputColor;
  9. XMFLOAT4 MeshColor;
  10. };
  1. // Update Constant Buffer Variables
  2. ConstantBuffer cb1;
  3. cb1.World = XMMatrixTranspose(m_mWorld);
  4. cb1.View = XMMatrixTranspose(m_mView);
  5. cb1.Projection = XMMatrixTranspose(m_mProjection);
  6. cb1.LightDiretions[] = lightDirections[];
  7. cb1.LightDiretions[] = lightDirections[];
  8. cb1.LightColors[] = lightColors[];
  9. cb1.LightColors[] = lightColors[];
  10. cb1.OutputColor = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f);
  11. cb1.MeshColor = m_MeshColor;
  12. 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. Scalaz(48)- scalaz-stream: 深入了解-Transducer: Process1-tee-wye

    在上一篇讨论里我们介绍了Source,它的类型款式是这样的:Process[F[_],O].Source是通过await函数来产生数据流.await函数款式如下: def await[F[_], A, ...

  2. web性能优化——代理(nginx)

    简介 一个很好的原则是调优时每次只个性一个配置.如果对配置的个性不能提高性能的话,改回默认值 优化必须要通过性能测试.不能意淫,需要前后对比,真实说明问题. 场景 优化nginx. 确保每次请求控制一 ...

  3. windows.open()、close()方法详解

    windows.open()方法详解:         window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...

  4. Web UI - Javascript之DOM Ready

    最近终于稍微适应了工作环境,终于可以让自己缓口气.于是决定要写点东西,算是督促.记录和提升自己的学习.代码的世界,你不轮它,以后就会被它轮.这个系列尽量保持在一周或两周更一篇,目标是在创造内容的时候更 ...

  5. 虚拟机克隆以后出现“需要整合虚拟机磁盘”的解决方法

    问题描述 在虚拟机克隆完毕以后,原始虚拟机提示"需要整合虚拟机磁盘" 在"任务与事件"栏中看到以下信息 解决方法 从上面可以看到是因为整合失败导致的,那么我们只 ...

  6. Java中“==”与equals方法的区别

    1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...

  7. 转载:设置html页面不让浏览器缓存的方法

    本文是转载文章,只是方便自己记录. 在html页面head标签之间添加以下标识可以避免大多数浏览器缓存: <meta http-equiv="Pragma" content= ...

  8. 分享2个网址二维码API接口

    分享2个网址二维码生成API接口,用它们只需要填写好网址就能自动生成二维码,分别来自与bshare和jiathis分享工具中,如您需要就把下面的二维码生成API接口复制到你需要地方. 说明:把url= ...

  9. (视频)《快速创建网站》 3.3 国际化高大上 - WordPress多语言支持

    本文是<快速创建网站>系列的第7篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  10. node模块的分类

    模块的分类 1.核心模块 2.文件模块 3.第三方模块(npm安装的) 模块的引用: 1.路径 2.模块名 模块的流程: 1.创建模块:teacher.js 2.导出模块:exports.add=fu ...