gpt4 book ai didi

c++ - 需要帮助使用 C++ 加载简单的文本数据

转载 作者:行者123 更新时间:2023-11-28 01:01:53 25 4
gpt4 key购买 nike

我需要帮助将自定义文件格式加载到我用 C++ 编写的程序中...我知道有一种简单的方法可以做到这一点,但我想我正在使用在线搜索错误的术语...

我自定义的 3d 对象格式如下:

NumVerts 6
//verts (float)
-1
-1
0
1
-1
0
-1
1
0
1
-1
0
1
1
0
-1
1
0
//texture (float)
0
0
1
0
0
1
1
0
1
1
0
1
//index (int)
0
1
2
1
3
2

那是一个四边形...(是的;我知道...可怕的格式...但这是我在 Android 游戏中使用的格式)。

我想用 C++ 为我的编辑器(Windows 的 SDL + OpenGL)创建一个函数,将这些文件加载​​到数据中......不幸的是,虽然我知道如何用 C++ 导出这种格式,但我不知道如何导入它们...我希望使用 fstream 命令...

如果有人能快速写出一个简单的版本,我将不胜感激。

我只是为了做到以下几点:

  • 从输入字符串中查找文本文件
  • 读取“NumVerts”并获取写在它后面的整数
  • 遍历下 (NumVerts*3) 行并将每个数字作为 float 获取
  • 遍历下 (NumVerts*2) 行并将每个数字作为 float 获取
  • 遍历下 (NumVerts*1) 行并将每个数字作为 Int 获取
  • (跳过任何以“//”开头的行)
  • 关闭文件。

感谢您的阅读,现在任何帮助都会非常有用……或者一个非常简单的 relivent 链接,它可以从文件中读取字符串并从中获取数字以放入内存中……

我真的只想完成这个游戏,而且试图找到有用的教程真的让我感到压力很大。

更新:更新了脚本...我不小心忘了分开 1 和 0...

最佳答案

希望这对您有所帮助。顺便说一下,您的顶点组件数量错误 - 您需要 18 个。

#include <algorithm>
#include <exception>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>

#include <boost/algorithm/string/trim.hpp>
#include <boost/lexical_cast.hpp>
using boost::lexical_cast;

int load_3d_object(const std::string& filename,
std::vector<float>& vertComponents,
std::vector<float>& texComponents,
std::vector<int>& indices)
{
std::ifstream fs(filename.c_str());
std::string line;
if(!std::getline(fs, line))
{
throw std::runtime_error("The input file is empty");
}

if(line.substr(0,8) != "NumVerts")
{
throw std::runtime_error("The first line must start with NumVerts");
}

// Extract the number of vertices.
int numVerts = lexical_cast<int>(line.substr(line.find(' ') + 1));

// Read in the vertex components, texture components and indices.
while(std::getline(fs, line))
{
boost::trim(line);
if(line.substr(0,2) == "//") continue;

if((int)vertComponents.size() < numVerts * 3) vertComponents.push_back(lexical_cast<float>(line));
else if((int)texComponents.size() < numVerts * 2) texComponents.push_back(lexical_cast<float>(line));
else indices.push_back(lexical_cast<int>(line));
}

return numVerts;
}

int main()
{
std::vector<float> vertComponents;
std::vector<float> texComponents;
std::vector<int> indices;
try
{
int numVerts = load_3d_object("input.txt", vertComponents, texComponents, indices);
}
catch(std::exception& e)
{
std::cout << e.what() << '\n';
}
return 0;
}

关于c++ - 需要帮助使用 C++ 加载简单的文本数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com