gpt4 book ai didi

c++ - .MTL 在 OpenGL 中的基本用法

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:12 25 4
gpt4 key购买 nike

我目前正在解析与我拥有的 .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 网格的 Material 。对于每种 Material ,它指定纹理路径和几个颜色属性,如漫反射和镜面反射颜色。

OpenGL 不关心 .obj,所以它也不关心 .MTL,您使用数据的方式取决于您。有几种方法可以将 .MTL 文件中的数据应用到 opengl 网格。最简单的方法如下:

看OBJ文件的USEMTL指令,根据 Material 分离面,基本上,只要看到USEMTL X,后面的面都要用 Material X画,直到遇到新的USEMTL Y。

然后当您绘制时,对于每个称为 MAT 的 Material :从 MAT 的 .MTL 文件绑定(bind)纹理,为 MAT 设置漫反射和镜面反射参数,并仅绘制 .OBJ 表示 USEMTL MAT 的那些面。

还有一些其他方法可以提高效率,请在评论中告诉我您当前如何绘制网格,因为这对最佳选择有一定影响。

MTL 文件可以包含一些更高级的内容,但这应该可以帮助您入门。

有关 MTL 文件的更多信息以及值的含义,请参阅 Wavefront .obj file .

关于c++ - .MTL 在 OpenGL 中的基本用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com