> ch05-01
这是<<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的更多相关文章
- net 数据库连接详解 相当经典啊
ADO.NET与抽水的故事 ADO.NET是微软新一代.NET数据库的访问架构,ADO是ActiveX Data Objects的缩写.ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- 0042 MySQL学习笔记-入门--01
基本概念: 数据库DB(database): 数据的仓库,数据的集合,是数据的一种结构化的存储 数据库管理系统DBMS(database management system): 管理数据库的一套软件 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- ArtifactTransferException: Failure to transfer org.apache.openejb:javaee-api:jar:5.0-1
最近在myeclipse上创建maven类型的web项目的时候,出现了一个错误. ArtifactTransferException: Failure to transfer org.apache.o ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- 异步编程系列第01章 Async异步编程简介
p { display: block; margin: 3px 0 0 0; } --> 2016.10.11补充 三个月过去了,回头来看,我不得不承认这是一系列失败的翻译.过段时间,我将重新翻 ...
随机推荐
- 移动距离|2015年蓝桥杯B组题解析第八题-fishers
移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 ...
- HDU 1874 畅通工程续(最短路训练
因为数据比较小 所以flyod spfa dijkstra 多可以过 Floyd #include <bits/stdc++.h> using namespace std; const i ...
- Luogu USACO Training 刷水记录
开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...
- Elasticsearch工作原理
一.关于搜索引擎 各位知道,搜索程序一般由索引链及搜索组件组成. 索引链功能的实现需要按照几个独立的步骤依次完成:检索原始内容.根据原始内容来创建对应的文档.对创建的文档进行索引. 搜索组件用于接收用 ...
- 【旧版本】Ubuntu 14.04 下 P416编译器 p4c的安装
注:此为2017年5月份的安装方法,最新的p4c安装方法见: Ubuntu14.04下 安装p4c 参考: p4c README Ubuntu 14.04 下 P4v16编译器 p4c的安装 系统要求 ...
- MVC ---- Linq查询
Linq查询:编译后,会生成对应的标准查询运算符!所以说,Linq只是类似与Sql的一种更加友好的语法而已: public class LinqDemo{ public static void Tes ...
- python 获取指定文件夹的大小
def getdirsize(dirpath): size = for root, dirs, files in os.walk(dirpath): size += sum([getsize(join ...
- Spring Boot 2.1.1.RELEASE 多数据源配置与使用
有时候,一个系统的功能,需要两个或两个以上的数据库, 在Spring Boot 中要如何配置? How to? #primary primary.spring.datasource.jdbc-url= ...
- Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断
Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断 目前常用的做法:
- Window系统下用Ant实现Java项目的自动构建和部署
https://blog.csdn.net/xinxin19881112/article/details/7297021 Step 1: 从官网下载Ant包,官网地址http://ant.apache ...