这是<<shaders for game programmers and artists>> 第五章中第一个shader例子--RTT。。一直没弄出结果,今天记下来,主要是操作步骤,详细情况可以看该书

RTT主要是将场景绘制到一个临时纹理对象上,这个临时纹理对象被成为render target

使用的例子是ch05中的shader_1.rfx

1.打开workspace,右击Effect node 添加一个新的render target  :右击---Add Texture---Add renderable texture

这里添加一个 renderTexture,类似于添加一个新的纹理,但又不同:它不是从文件读取,而且是由rendermonkey自动管理的

2.双击这个添加的render Texture ,勾上 use view port dimensions

3.现在有了一个render texture ,你需要告诉rendermonkey 去使用它:

给每个Pass 添加一个render target:右击Pass---Add render target----选择你刚才新建的哪个render texture的名称

4.双击第一个pass添加的render target,   跳出的对话框中勾上 enable color clear 和enable depth clear

双击第二个pass添加的render target,   跳出的对话框中取消 enable color clear 和enable depth clear

因为第一个绘制时候需要清空颜色和深度缓存,而第二个pass中需要接收第一个pass产生的像素,第二个不要清空

5.现在屏幕是黑屏,因为你把object都绘制到了rendertarget上,(你可以右击一个renderTarget ,选择render to screen就能看到刚才绘制的object  )

现在需要绘制一个四边形,来接收render target上绘制的object   , 这里有一个纹理坐标误差,原因请看书上,该误差为纹理坐标系中(1/width, 1/height)

6.给Effect添加一个model: screenAlighedQuad.3ds

7.添加一个pass来绘制这个quad , 将pass 中model 节点指向screenAlighedQuad.3ds

8.set up the stream mapping reference to use the coommon stream mapping node

9.创建一个 texture object ,它用来将接收render target纹理,然后将该texture object贴图到screenAlighedQuad.3ds上

10.添加两个内置变量 viewport_inv_width和 viewport_inv_heith ,分别关联到语义:ViewportWidthInverse和 ViewportHeightInverse

这两个变量用来进行纹理坐标偏移。

11修改shader code,注意vertex  shader中的纹理坐标设置 对绘制结果有很大的影响。

到这里发现前面没有出现绘制结果的原因了:

1.screenAlighedQuad.3ds模型绘制时候的视角问题,默认情况下,看到的不是 quad的正面,而是它的侧面,(假如面有厚度的话,看到的是一条线,但是没有厚度,所以什么也看不到),这里需要注意面模型绘制到屏幕上时候的坐标。书中out position =float4(in.xy, 0, 1),1.82版本应该为out position =float4(in.yx,
0, 1),难以理解到底是什么原因..版本问题?模型问题?。。

我擦,不是上面说的原因,找到真正原因了,是CULL MODE的问题,把screenAlighedQuad.3ds这个pass的CULL MODE改为none,两面都绘制,就不用position =float4(in.yx, 0, 1)。。应该是1.5到1.82版本时,CULL的默认值被改了。。。

2.vertex shader中将该quad绘制到屏幕时候,不需要进行试图矩阵变换,因为是将该quad完整的平铺到屏幕上,这里没注意

3.注意render Target的属性,双击它保证第一个pass的depth buffer和color buffer被clear , 而第二个pass需要接收第一个pass的depth和color所以不需要被clear.!切记!!!


> ch05-01的更多相关文章

  1. net 数据库连接详解 相当经典啊

    ADO.NET与抽水的故事 ADO.NET是微软新一代.NET数据库的访问架构,ADO是ActiveX Data Objects的缩写.ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一 ...

  2. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  3. 用Kotlin创建第一个Android项目(KAD 01)

    原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...

  4. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  5. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  6. 0042 MySQL学习笔记-入门--01

    基本概念: 数据库DB(database): 数据的仓库,数据的集合,是数据的一种结构化的存储 数据库管理系统DBMS(database management system): 管理数据库的一套软件 ...

  7. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  8. ArtifactTransferException: Failure to transfer org.apache.openejb:javaee-api:jar:5.0-1

    最近在myeclipse上创建maven类型的web项目的时候,出现了一个错误. ArtifactTransferException: Failure to transfer org.apache.o ...

  9. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  10. 异步编程系列第01章 Async异步编程简介

    p { display: block; margin: 3px 0 0 0; } --> 2016.10.11补充 三个月过去了,回头来看,我不得不承认这是一系列失败的翻译.过段时间,我将重新翻 ...

随机推荐

  1. TeeChart的坐标轴

    TeeChart一共有六个坐标轴,一下是默认值 tChart1.Axes.Bottom.Visible = true;//横轴 tChart1.Axes.Left.Visible = true;//纵 ...

  2. Nginx 负载均衡的几种方式

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  3. 处理文字基线 文字对不齐 font-size

    这是我无意中发现的,先记录下 比如你在一个h1标签里面添加文字,或者在其他块级标签添加文字,想让他们间隙少一点,(基线影响)可把行高设置为line-height: 1;就达到消除基线的作用. 建议使用 ...

  4. 复习_for循环嵌套 及 流程图梳理

    原题: 使用for循环输出如下图形: * ** *** **** 分析及做法. 图链接: https://www.processon.com/view/link/5afba745e4b05352c2b ...

  5. 瞎折腾之Webhooks

    之前听学长介绍过webhooks,也知道有这个东西,但没有真正的用于项目部署,长久以来一直过着“刀耕火种”的生活......长久以来,都是这么更新代码的: 由于之前做的项目刚刚上线,需要对其进行持续的 ...

  6. P4 Tutorials Flowlet Switching

    Github链接: Exercise 2: Implementing TCP flowlet switching P4 Tutorials Flowlet Switching 最近P4社区更新了Tut ...

  7. codeforces 350 div2 C. Cinema map标记

    C. Cinema time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  8. python 函数返回函数

    def hi(name="yasoob"): def greet(): return "now you are in the greet() function" ...

  9. windows 网页打不开github网站

    gitbub是外网,经常会遇到访问不了的问题,并且有时能访问也网速好慢. 解决这个问题的方法是 更改hosts文件,地址:C:\Windows\System32\Drivers\etc 我在hosts ...

  10. TortoiseXX 与TotalCommander (TC)的图标问题

    TortoiseXX通过overlay图标标志文件或文件夹是否被修改等状态,非常有用. 可惜TotoalCommander上,这些图标都没有显示. 其实,只需要在TC的菜单 配置->显示-> ...