zoukankan      html  css  js  c++  java
  • (转)Ogre中计算Tangent, 感觉很不错!

    代码
    Vector3 Math::calculateTangentSpaceVector(
     
    const Vector3& position1, const Vector3& position2, const Vector3& position3,
     Real u1, Real v1, Real u2, Real v2, Real u3, Real v3)
     {
       
    //side0 is the vector along one side of the triangle of vertices passed in, 
       
    //and side1 is the vector along another side. Taking the cross product of these returns the normal.
       Vector3 side0 = position1 - position2;
       Vector3 side1 
    = position3 - position1;
       
    //Calculate face normal
       Vector3 normal = side1.crossProduct(side0);
       normal.normalise();
       
    //Now we use a formula to calculate the tangent. 
       Real deltaV0 = v1 - v2;
       Real deltaV1 
    = v3 - v1;
       Vector3 tangent 
    = deltaV1 * side0 - deltaV0 * side1;
       tangent.normalise();
       
    //Calculate binormal
       Real deltaU0 = u1 - u2;
       Real deltaU1 
    = u3 - u1;
       Vector3 binormal 
    = deltaU1 * side0 - deltaU0 * side1;
       binormal.normalise();
       
    //Now, we take the cross product of the tangents to get a vector which 
       
    //should point in the same direction as our normal calculated above. 
       
    //If it points in the opposite direction (the dot product between the normals is less than zero), 
       
    //then we need to reverse the s and t tangents. 
       
    //This is because the triangle has been mirrored when going from tangent space to object space.
       
    //reverse tangents if necessary
       Vector3 tangentCross = tangent.crossProduct(binormal);
       
    if (tangentCross.dotProduct(normal) < 0.0f)
       {
         tangent 
    = -tangent;
         binormal 
    = -binormal;
       }

     
    return tangent;

     }
  • 相关阅读:
    URAL 1736 Chinese Hockey 网络流+建图
    python基础教程_学习笔记14:标准库:一些最爱——re
    吐槽下CSDN编辑器
    让你提前认识软件开发(23):怎样在C语言中运行shell命令?
    GDB十分钟教程
    任务调度开源框架Quartz动态加入、改动和删除定时任务
    AfxMessageBox和MessageBox差别
    Linux Shell脚本入门--awk命令详解
    鲁棒性的获得 —— 测试的架构
    C Tricks(十八)—— 整数绝对值的实现
  • 原文地址:https://www.cnblogs.com/lancidie/p/1846442.html
Copyright © 2011-2022 走看看