¿Cómo puedo imprimir valores vectoriales de tipo glm:: vec3 que se han pasado por referencia?
Tengo un pequeño cargador obj y toma dos parámetros y los pasa de nuevo 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 anteriormente es lo que está generando información inútil. Si lo dejo así y corro el programa me arrojan un montón de errores ( también sin formato y largo para pegar aquí) y si añado el operador de referencia obtengo una salida como esta:
0x711ea0
0x711eac
0x711eb8
0x711ec4 // etc
¿Alguna idea de lo que estoy haciendo mal?
3 answers
Glm tiene una extensión para esto. Añadir #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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-04 13:51:36
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 de vectores/matrices (esto restringe la definición de la función a los archivos de encabezado, sin embargo).
#include <glm/gtx/string_cast.hpp>
template<typename genType>
std::ostream& operator<<(std::ostream& out, const genType& g)
{
return out << glm::to_string(g);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-27 14:58:52
glm::vec3
no sobrecarga 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 usas mucho, puedes sobrecargarte operator<<
a ti 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];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-10 00:53:45