zoukankan      html  css  js  c++  java
  • 波动方程水面模拟(简版)

      具体推导详见

      Mathematics.for.3D.Game.Programming.and.Computer.Graphics.3Ed 的第十五章 布料和流体模拟

     

     初始化水面顶点参数

     1 void waveNode::InitWaterData()
     2 {
     3     //float count = 10.0;
     4     //极限0.7071
     5     m_fC = 0.3;
     6     m_fD = 1.0;
     7     m_fT = 1.0;
     8     m_fMU = 0.20;
     9     m_fK1 = (4.0 - 8.0 * m_fC * m_fC * m_fT * m_fT / (m_fD * m_fD)) / (m_fMU * m_fT + 2.0);
    10     m_fK2 = (m_fMU - 2.0) / (m_fMU + 2.0);
    11     m_fK3 = (2.0 * m_fC * m_fC * m_fT * m_fT / (m_fD * m_fD)) / (m_fMU * m_fT + 2.0);
    12 }
    View Code

     更新水面顶点高度

     1 void waveNode::CalculateWave()
     2 {
     3     //边界不动
     4     for (int y = 1; y < m_iNumTileY - 1; y++)
     5     {
     6         for (int x = 1; x < m_iNumTileX - 1; x++)
     7         {
     8             //当前和之前的顶点位置
     9             pVERTEX pCntVertex = m_vecAllVertex.at(y * m_iNumTileX + x);
    10             pVERTEX pPreVertex = m_vecAllVertexPre.at(y * m_iNumTileX + x);
    11             osg::Vec3 cntPos = pCntVertex->pos;
    12             osg::Vec3 prePos = pPreVertex->pos;
    13             //前后左右当前顶点位置
    14             osg::Vec3 leftPos = m_vecAllVertex.at(y * m_iNumTileX + x - 1)->pos;
    15             osg::Vec3 rightPos = m_vecAllVertex.at(y * m_iNumTileX + x + 1)->pos;
    16             osg::Vec3 upPos = m_vecAllVertex.at((y + 1) * m_iNumTileX + x)->pos;
    17             osg::Vec3 downPos = m_vecAllVertex.at((y - 1) * m_iNumTileX + x)->pos;
    18 
    19             float nextZ = m_fK1 * (cntPos.z()) + m_fK2 * (prePos.z()) +
    20                 m_fK3 * (leftPos.z() + rightPos.z() + upPos.z() + downPos.z());
    21             //更新上一次与这一次以及下一次的顶点位置信息
    22             pPreVertex->pos = pCntVertex->pos;
    23             pCntVertex->pos = osg::Vec3(cntPos.x(), cntPos.y(), nextZ);
    24         }
    25     }
    26 }
    View Code

      

  • 相关阅读:
    微信小程序登入实现
    CacheLab实验--深入了解计算机系统实验
    power designer的物理数据模型生成数据字典。
    PowerDesigner15在生成SQL时报错Generation aborted due to errors detected during the verification of the mo
    Mac系统下,如何申请并安装教育版Navicat
    Mac下修改Mysql密码
    数组
    AbstractList源码阅读
    List源码阅读笔记
    AbstractCollection源码阅读笔记
  • 原文地址:https://www.cnblogs.com/TooManyWayToBe/p/8467186.html
Copyright © 2011-2022 走看看