OpenGL DrawMesh и статическая сетка - PullRequest
0 голосов
/ 10 декабря 2018

Итак, я пытаюсь визуализировать сферу из файла 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;
}
...