• 修改obj三维模型文件中坐标z为其相反数


    具体做法是:打开一个obj文件,查找含有“v x y z"的字串,然后对z的字串进行符号处理:

    若为"-",直接将该符号删除;不为"-"且z值不为0,则在z的字串前加上"-"。

    示例(原始文件box.obj)

    #
    # object Box01
    #

    v -39.306316 -32.828358 -29.183971
    v -39.306316 33.259296 -29.183971
    v 39.726025 33.259296 -29.183971
    v 39.726025 -32.828358 -29.183971
    v -39.306316 -32.828358 26.914204
    v 39.726025 -32.828358 26.914204
    v 39.726025 33.259296 26.914204
    v -39.306316 33.259296 26.914204

    -----------------------------------

    转换后的文件(box.obj.flip):

    #
    # object Box01
    #

    v -39.306316 -32.828358 29.183971
    v -39.306316 33.259296 29.183971
    v 39.726025 33.259296 29.183971
    v 39.726025 -32.828358 29.183971
    v -39.306316 -32.828358 -26.914204
    v 39.726025 -32.828358 -26.914204
    v 39.726025 33.259296 -26.914204
    v -39.306316 33.259296 -26.914204

     具体代码实现:

     1 #include <fstream.h>
     2 #include <math.h>
     3 
     4 bool work(const char* path)
     5 {
     6     char chs[1000];
     7     double x,y,z;
     8     CString newPath(path);
     9     newPath += ".flip";
    10     const char* chNewPath = newPath;
    11     ofstream opf(chNewPath);
    12     if (!opf.is_open()) return false;
    13     ifstream pf(path);
    14     if (!pf.is_open()) {opf.close();return false;}
    15 
    16     while (!pf.eof())
    17     {
    18         pf.getline(chs, 1000, '\n');
    19         if (sscanf(chs, "v %lf %lf %lf", &x, &y, &z)==3)
    20         {
    21             CString strChs(chs);
    22             int spacePos=strChs.ReverseFind(' ');
    23             char c=strChs.GetAt(spacePos+1);
    24 
    25             opf<<(LPCTSTR)(strChs.Left(spacePos+1));
    26             if (c=='-')
    27             {
    28                 opf<<(LPCTSTR)(strChs.Right(strChs.GetLength()-spacePos-2))<<endl;
    29             }
    30             else
    31             {
    32                 if (fabs(z)>1e-6) opf<<"-";
    33                 opf<<(LPCTSTR)(strChs.Right(strChs.GetLength()-spacePos-1))<<endl;
    34             }
    35         }
    36         else
    37         {
    38             opf << chs << endl;
    39         }
    40     }
    41 
    42     opf.close();
    43     pf.close();
    44     return true;
    45 }

     

  • 相关阅读:
    xshell入门及Linux常用命令
    C++之vector
    c++ 之 string
    引用 与 指针
    关于时间复杂度的计算以及相关概念
    位运算
    thymeleafDemo
    面试总结
    关于mvvm原理实现,模拟vue(3)-----发布订阅
    关于mvvm原理实现,模拟vue(2)-----模板编译
  • 原文地址:https://www.cnblogs.com/kekec/p/2451003.html
Copyright © 2020-2023  润新知