Итак, я пытаюсь визуализировать сферу из файла obj и выполнить преобразования, которые принимает функция, и я также пытаюсь создать 3 функции для статической сетки, но у меня возникают проблемы с этим, потому чтоЯ только закончил это, когда все это попало под 1 функцию, а не разделено на 3.
// SPHERE.H
#pragma once
#include "SceneNode.h"
#include "StaticMesh.h"
#include "glm\glm.hpp"
class Sphere : public SceneNode
{
public:
//Constructor
Sphere(glm::mat4 transformation, ShaderInfo some_shaders[10]);
void SceneNode::drawMesh(glm::mat4 transformation) override;
};
// SPHERE.CPP
#include "Sphere.h"
Sphere::Sphere(glm::mat4 transformation, ShaderInfo some_shaders[10]) :
SceneNode(transformation, some_shaders)
{
mesh = StaticMesh("Sphere.obj");
}
void drawMesh(glm::mat4 transformation)
{
//implement transformation
}
// STATICMESH.H
#ifndef STATICMESH_HEADER
#define STSTAICMESH_HEADER
#include <../glm/glm/glm.hpp>
class StaticMesh
{
public:
int number_of_vertices;
int number_of_faces;
float ** vertices;
float ** faces;
//Constructors
StaticMesh();
StaticMesh(char* fileName);
StaticMesh(float vertices[][3], float faces[][3]);
};
#endif
// STATICMESH.CPP
#include "StaticMesh.h"
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#pragma once
using namespace std;
StaticMesh::StaticMesh()
{}
StaticMesh::StaticMesh(char* fileName)
{}
StaticMesh::StaticMesh(float vertices[][3], float faces[][3])
{}
Это одна из моих проблем.Я не знаю, как реализовать статическую сетку, когда она разделена на 3 функции, когда она меньше 1, например, как я знаю, я использую следующий код, который отлично работал
int load(std::string filename, GLfloat vertexArray[][3], GLuint faces[][3]) {
//open file
std::cout << " -- Read file started -- " << std::endl;
std::ifstream file(filename);
if (file.is_open())
{
std::cout << " --File Opened --" << std::endl;
std::string line;
int ln = 0;
int vertNum = 1; //starts at one as faces starts looking at index 1
int faceNum = 0;
while (getline(file, line))
{
//std::cout << "Reading Line: " << ln << " : " << line << std::endl;
ln++;
if (!line.empty())
{
if (line.at(0) == 'v')
{
float temp;
float temparr[3];
std::stringstream ss;
ss << line;
int i = 0;
std::string t;
while (!ss.eof()) {
ss >> t;
//std::cout << "Token: " << std::endl;
if (std::stringstream(t) >> temp && i <= 3) {
//std::cout << "Store: " << temp << std::endl;
temparr[i] = temp;
i++;
}
t = "";
}
if (true) //put out of bounds checking
{
for (int i = 0; i < 3; i++)
{
vertexArray[vertNum][i] = temparr[i];
}
}
else
{
std::cout << "ERROR: Could not add vertex to vertexArray" << std::endl;
return 0;
}
vertNum++;
}
if (line.at(0) == 'f')
{
int temp;
int temparr[3];
std::stringstream ss;
ss << line;
int i = 0;
std::string t;
while (!ss.eof()) {
ss >> t;
//std::cout << "Token: " << t << std::endl;
if (std::stringstream(t) >> temp && i <= 3) {
temparr[i] = temp;
i++;
}
t = "";
}
if (true) //put out of bounds checking here
{
for (int i = 0; i < 3; i++)
{
faces[faceNum][i] = temparr[i];
}
}
else
{
std::cout << "ERROR: Could not add face to faces" << std::endl;
return 0;
}
faceNum++;
}
}
}
file.close();
std::cout << "Done!" << std::endl;
return 1;
}
else
{
std::cout << " ERROR: Cannot open file " << filename << std::endl;
return -1;
}