将 "tinyobjloader" 合并到我的 OpenGL 项目中
incorporating "tinyobjloader" in my OpenGL project
这样我就可以加载 OBJ 文件并在我的 openGL 中渲染它们 window。到目前为止,我已经做到了:
- 创建 OpenGL 上下文并window 使用 glfw3
- 创建了一个可执行文件(of test.cc, and its associated libraries and headers),它只在终端中将 OBJ 顶点作为文本输出
我想在我的 openGL 中直观地渲染这些顶点 window,所以我想这涉及到将两者结合起来,但问题是什么?我假设我的 openGL 上下文吸收了 obj 导入器,而不是相反,但它会在代码中的什么位置:
#include <GLFW/glfw3.h>
#include <GLUT/glut.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
/* clearing */
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
还是我必须 link 从外部访问它?
在 glfwMakeContextCurrent 和 while 循环之间,您应该读取 obj 并将值放入 VBO。
它的形式是
std::string err = tinyobj::LoadObj(shapes, materials, objStream, matSSReader);
if (!err.empty()) {
glfwTerminate();
return 1;
}
然后为每个形状的每个网格创建一个 VAO 和 VBO 放入数据中,设置 vertexAttributePointers 并保持网格中的顶点数。
然后在渲染期间绑定 VAO 并绑定正确的 material 并绘制。
这样我就可以加载 OBJ 文件并在我的 openGL 中渲染它们 window。到目前为止,我已经做到了:
- 创建 OpenGL 上下文并window 使用 glfw3
- 创建了一个可执行文件(of test.cc, and its associated libraries and headers),它只在终端中将 OBJ 顶点作为文本输出
我想在我的 openGL 中直观地渲染这些顶点 window,所以我想这涉及到将两者结合起来,但问题是什么?我假设我的 openGL 上下文吸收了 obj 导入器,而不是相反,但它会在代码中的什么位置:
#include <GLFW/glfw3.h>
#include <GLUT/glut.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
/* clearing */
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
还是我必须 link 从外部访问它?
在 glfwMakeContextCurrent 和 while 循环之间,您应该读取 obj 并将值放入 VBO。
它的形式是
std::string err = tinyobj::LoadObj(shapes, materials, objStream, matSSReader);
if (!err.empty()) {
glfwTerminate();
return 1;
}
然后为每个形状的每个网格创建一个 VAO 和 VBO 放入数据中,设置 vertexAttributePointers 并保持网格中的顶点数。
然后在渲染期间绑定 VAO 并绑定正确的 material 并绘制。