• ogre--hlsl--矩阵


    重要注释——矩阵的顺序:有一件事需要牢记,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常量的空间。
  • 相关阅读:
    【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
    Codeforces 刷水记录
    【POJ-1390】Blocks 区间DP
    【BZOJ-1656】The Grove 树木 BFS + 射线法
    【BZOJ-1127】KUP 悬线法 + 贪心
    【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
    【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流
    【BZOJ-2325】道馆之战 树链剖分 + 线段树
    Codeforces乱刷集合
    【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组
  • 原文地址:https://www.cnblogs.com/kex1n/p/3425030.html
Copyright © 2020-2023  润新知