. mtl在OpenGL中的基本用法
Basic Usage of .MTL in OpenGL
我目前正在解析与。obj文件相关联的。mtl文件。我可以正确地渲染模型,但是我如何使用.mtl文件呢?我应该把它的值发送到哪里?我如何使用它?目前,在OpenGL中找不到任何使用。mtl文件的东西。它们只是展示了如何解析它。
编辑:这就是在OpenGL中如何做到的。我还创建了自己的OBJ解析器。请注意,代码是缩短的,只是为了让您了解我是如何做的。
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, cc * sizeof(GLfloat), v, GL_STATIC_DRAW);
GLuint tcbuffer;
glGenBuffers(1, &tcbuffer);
glBindBuffer(GL_ARRAY_BUFFER, tcbuffer);
glBufferData(GL_ARRAY_BUFFER, tcc * sizeof(GLfloat), vt, GL_STATIC_DRAW);
GLuint ncbuffer;
glGenBuffers(1, &ncbuffer);
glBindBuffer(GL_ARRAY_BUFFER, ncbuffer);
glBufferData(GL_ARRAY_BUFFER, ncc * sizeof(GLfloat), vn, GL_STATIC_DRAW);
glEnableVertexAttribArray(m_vert);
glBindBuffer(GL_ARRAY_BUFFER, vbufferid);
glVertexAttribPointer(m_vert, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_texcoord);
glBindBuffer(GL_ARRAY_BUFFER, tcbufferid);
glVertexAttribPointer(m_texcoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_color);
glBindBuffer(GL_ARRAY_BUFFER, cbufferid);
glVertexAttribPointer(m_color, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_vertexnormal);
glBindBuffer(GL_ARRAY_BUFFER, ncbufferid);
glVertexAttribPointer(m_vertexnormal, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, vc);
伴随. obj文件的MTL文件是应用于. obj网格的材料的描述。对于每个材质,它指定纹理路径和一些颜色属性,如漫反射和高光颜色。
OpenGL不关心。obj,所以它也不关心。mtl,你使用数据的方式取决于你。有几种方法可以将. mtl文件中的数据应用到opengl网格中。最简单的方法如下:
查看OBJ文件的USEMTL指令并根据材料分离面,基本上,每当您看到USEMTL X时,所有以下面的都将使用材料X绘制,直到您遇到新的USEMTL y。
然后,当你绘制时,为每个材质称为MAT:从。mtl文件中为MAT绑定纹理,为MAT设置漫反射和镜面参数,并只绘制那些面。obj说USEMTL MAT。
还有其他一些方法可以提高效率,请在评论中告诉我您目前如何绘制网格,因为这对最佳选择有一定影响。
MTL文件可以包含一些更高级的东西,但这应该是你开始。
有关MTL文件的更多信息以及这些值的含义,请参阅Wavefront .obj文件。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 这个指针在c++中的用法
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 当C++中需要自动删除时,这是静态的正确用法吗?
- OpenGL 中的 FreeType 2 用法
- OpenGL 四元数类用法
- . mtl在OpenGL中的基本用法