我正在尝试让非官方OpenGL SDK库工作,并开始使用glutil库来实现matrixStack功能。我使用Visual studio 2010编译了源代码,并将库移到位于Code::Blocks文件夹中的minGW文件夹中。我也将头文件移到了那里的include文件夹中。
现在一切都应该就绪,并且应该为我的操作系统编译,所以下面的代码应该可以正常工作。
// Get rotation matrix
//float rotValue = (glutGet(GLUT_ELAPSED_TIME)) / 10;
glm::mat3 rotMatrix = RotateAxis(0.0f, 0.0f, 1.0f, 0.0f);
// Build final matrix from rotMatrix
glm::mat4 finalMatrix(rotMatrix);
finalMatrix[3].x = camX;
finalMatrix[3].y = camY;
finalMatrix[3].z = camZ - 1.0f;
finalMatrix[3].w = 1.0f;
glutil::MatrixStack stack(finalMatrix);
glutil::PushStack push(stack);
// Object 1
glBindVertexArray(vaoObject); // Advantage of using vao's is that you only have to do all the vertex attribute enabling and buffer stuff once.
glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0);
// Object 2
stack.Translate(glm::vec3(0.0f, 0.5f, 0.0f)); // THIS IS WHERE THINGS GO WRONG
finalMatrix[3].z = camZ - 2.00f;
glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
glDrawElementsBaseVertex(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0, 36/2);
对堆栈的调用。Translate生成以下错误:对"glutil::MatrixStack::Translate(glm::detail::tvec3 const&)"的未定义引用这很奇怪,因为如果没有Translate调用,MatrixStack和PushStack的构造函数工作得很好,这很奇怪。
我尝试在链接器中添加-glutil,但没有解决我的问题。
标题包括(与openGL相关):
// Open GL and GLUT
#include <gl/glew.h>
#include <gl/glut.h>
// Open GL Libraries
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <glutil/glutil.h>
我仍然不确定如何找到正确的名称来链接库,因为OpenGL SDK没有在他们的网站上显示这些信息,所以我不确定-glutil是否正确。我猜这个问题和连接阶段有关。
您使用的是在MinGW下由VC++编译的C++代码吗?你知道那些编译器的ABI是不同的吗?即使是名称篡改方案也有所不同,因此可以解释为什么它不能联系起来。如果来自mingw链接器的函数名的未处理版本(应该在错误报告中的某个位置)与从glutil导出的版本(例如DLL导出查看器)相匹配,或者glutil是静态链接的?如果不匹配,您可能需要对库和代码使用相同的编译器。