重要注释——矩阵的顺序:有一件事需要牢记,HLSL允许你使用2种不同方式处理矩阵和向量相乘——mul(v,m)或者mul(m,v)。二者之间唯一的区别就是矩阵被有效地变换。在OGRE中传递矩阵你应该使用mul(m,v)——因为这与渲染器从像RenderMonkey一样的工具中生成的结果保持一致,并且也和Cg一致,但是与使用mul(v,m)的Dx9 SDK和FX合成器不一致——在使用那些渲染器时,你不得不转换mul()的参数。

注意,如果你在渲染器中使用了float3x4 / matrix3x4类型,且绑定了OGRE自动定义(例如骨骼矩阵),那么你在程序定义时或许需要使用column_major_matrices = false选项(下面讨论)。这是因为OGRE会将float3x4视为行主的,节省一定的空间(3个float4的空间而不是4个float4的空间只占用了前3个),并且也告诉OGRE像这样传递所有矩阵,这样可以使你对于所有计算一致地使用mul(m,v)。OGRE也将告诉渲染器按行主形式编译(你不必设置/Zpr编译选项或者#pragma pack(行主)选项,因为OGRE为你做了这些)。注意OGRE不支持以float4x3形式传递骨骼,但是没关系,你根本也不需要这样传递。

高级选项

preprocessor_defines <defines>
这个选项允许你定义可以在HLSL渲染代码内部使用的符号用以改变行为(通过使用#ifdef或者#if语句)。定义用';'或者','隔开,并且可选择'='操作符指定定义值,没有'='的那些隐含地被定义为1。
column_major_matrices <true|false>
这个选项的默认值为'true',因此OGRE传递的矩阵自动绑定为适合mul(m,v)使用的形式。设置这个选项为false,起到2个作用:它自动转换成4x4矩阵并且在渲染编译中设置好/Zpr(行主)选项。这意味着你仍然可以使用mul(m,v),但是矩阵的排布已经替换成了行主的。这只在你需要使用骨骼矩阵(float3x4)时有用,因为它为包含的每一个骨骼都节省了一个float4常量的空间。

ogre--hlsl--矩阵的更多相关文章

  1. ogre, dx, opengl坐标矩阵

    opengl 右手坐标系 列向量 左乘 列主序存储矩阵osg   右手坐标系 行向量 右乘 行主序存储矩阵d3d       左手坐标系 行向量 右乘 行主序存储矩阵ogre    右手坐标系 列向量 ...

  2. 纠结和郁闷的存在感-关于DirectX与HLSL的矩阵存储方式---转载好文章

    我常常这么大胆的认为,搞科学的人总是喜欢用各种让常人难以理解的复杂方式去处理某些其实可能很简单的事情,这种情况在他自身擅长的.有着诸多对手竞争的领域上极为常见.比如吧,搞DirectX的人用了左手坐标 ...

  3. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...

  4. 转:关于 OGRE 与 OSG 的简单比较

    1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(manual).王锐老师等翻译的<Ope ...

  5. Ogre RTSS组件解析

    我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些AP ...

  6. Ogre GpuProgram分析

    和前面讲解的Compositor一样,GpuProgram也对应一种资源文件,意思我们可以直接写一个文件来完成,不需要了解相关的类. 但是就和winform一样,直接拖控件能完成大部分工作,假如如果需 ...

  7. 关于OGRE与OSG的简单比较【转】

    关于OGRE与OSG的简单比较 林乃养 lnychina{at}gmail.com 浙江大学CAD&CG实验室 2010年3月27日 1 前言 我曾经细致阅读过OGRE和OSG官方提供的文档, ...

  8. 关于 OGRE 与 OSG 的简单比较 (转)

    关于 OGRE 与 OSG 的简单比较 1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(man ...

  9. Ogre 学习记录

    http://www.cppblog.com/richardhe/articles/55722.html 1: 设计初衷 它设计初衷是完全跨平台的.抽象的接口隐藏了平台相关的细节. 它设计初衷是大幅度 ...

  10. [Unity] Shader - CG语言 和 HLSL语言

    CG 跟 HLSL几乎是一摸一样的. (HLSL官方参考,包含语法格式,函数库,关键字,在这个地方: http://msdn.microsoft.com/en-us/library/bb509638( ...

随机推荐

  1. Science:给青年科研工作者的忠告

  2. uiview 单边圆角或者单边框

    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)]; view2.backgroundColor = ...

  3. ASP.NET Web.Config配置数据库连接的一种方法

    所谓的webConfig配置数据库连接就是在里面某个特定名称的节点中写下ADP.NET中的ConnectString,就这么简单 1.首先在Web.Config文件里写下数据库连接字符串. <c ...

  4. HDU 1316 How Many Fibs?(java,简单题,大数)

    题目 /** * compareTo:根据该数值是小于.等于.或大于 val 返回 -1.0 或 1: public int compareTo(BigInteger val) 将此 BigInteg ...

  5. 替代jquery

    如果不需要过多操作,不引用jquery 1.document.ready :$(function(){}) http://www.cnblogs.com/a546558309/p/3478344.ht ...

  6. foreach的参数不是数组:Warning: Invalid argument supplied for foreach

    Warning: Invalid argument supplied for foreach() 问题Warning: Invalid argument supplied for foreach() ...

  7. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  8. 基础DOM和CSS操作(二)

    元素样式操作 元素样式操作包括了直接设置CSS样式.增加CSS类别.类别切换.删除类别这几种操作方法.而在整个jQuery使用频率上来看,CSS样式的操作也是极高的,所以需要重点掌握. CSS操作方法 ...

  9. python unittest基本介绍

    python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...

  10. ArcGIS Engine -- 常用方法

    空间关系 计算两点间距离 feature平移 计算范围 得到点集合的n倍Envelope范围 查询 查询要素,返回多个要素union后的Geometry 查找图层 得到地图上图层列表 根据名称在地图上 ...