vectores resueltos programacion matrices llenar imprimir funciones ejercicios ejemplos con como c++ glm-math

c++ - resueltos - ¿Cómo imprimo valores vectoriales del tipo glm:: vec3 que se han pasado por referencia?



vectores en c++ pdf (3)

Creo que la solución más elegante podría ser una combinación de las dos respuestas ya publicadas, con la adición de plantillas para que no tenga que volver a implementar el operador para todos los tipos vector / matriz (esto restringe la definición de la función a archivos de encabezado) .

#include <glm/gtx/string_cast.hpp> template<typename genType> std::ostream& operator<<(std::ostream& out, const genType& g) { return out << glm::to_string(g); }

Tengo un cargador obj pequeño y toma dos parámetros y los devuelve a las variables de entrada ... sin embargo, esta es la primera vez que hago esto y no estoy seguro de cómo imprimir dichos valores ahora. Aquí está mi función principal para probar si el cargador está funcionando. Tengo dos vectores de tipo glm::vec3 para contener el vértice y los datos normales.

std::vector<glm::vec3> vertices; std::vector<glm::vec3> normals; int main() { bool test = loadOBJ("cube.obj", vertices, normals); for (int i = 0; i < vertices.size(); i++) { std::cout << vertices[i] << std::endl; // problem line } return 0; }

La línea comentada arriba es lo que genera información inútil. Si lo dejo así y ejecuto el programa, me arrojan un montón de errores ( demasiado sin formato y largos para pegar aquí ) y si agrego el operador de referencia obtengo un resultado como este:

0x711ea0 0x711eac 0x711eb8 0x711ec4 // etc

¿Alguna idea de lo que estoy haciendo mal?


glm tiene una extensión para esto. Agregar #include "glm/ext.hpp" o "glm/gtx/string_cast.hpp"

Luego, para imprimir un vector, por ejemplo:

glm::vec4 test; std::cout<<glm::to_string(test)<<std::endl;


glm::vec3 no sobrecarga el operator<< por lo que no puede imprimir el vector en sí. Lo que puedes hacer, sin embargo, es imprimir los miembros del vector:

std::cout << "{" << vertices[i].x << " " << vertices[i].y << " " << vertices[i].z << "}";

Aún mejor, si lo usa mucho, puede sobrecargar al operator<< usted mismo:

std::ostream &operator<< (std::ostream &out, const glm::vec3 &vec) { out << "{" << vec.x << " " << vec.y << " "<< vec.z << "}"; return out; }

Luego, para imprimir, solo use:

std::cout << vertices[i];