opengl中的错误绘制模型
因此,我正在尝试一个基本的opengl程序,它读取opengl中的错误绘制模型,opengl,go,glfw,Opengl,Go,Glfw,因此,我正在尝试一个基本的opengl程序,它读取.obj文件,然后渲染它(obj文件包含以下格式的三角形顶点 v1.0000002.0000003.00000 下面是我的代码(我使用GLFW和一个Golang绑定库)(我目前也忽略法线) 然而,当我运行这个程序时,结果并不完全正确 我在互联网上找到的其他几个文件上试用了它,得到了类似的结果。看起来三角形的顶点几乎是偏移的或什么的。您应该将所有顶点数据读取到数组中。Obj文件包含有关三角形的信息,以及顶点应该如何索引。以f开头的行包含3个数字w
.obj
文件,然后渲染它(obj文件包含以下格式的三角形顶点
v1.0000002.0000003.00000
下面是我的代码(我使用GLFW和一个Golang绑定库)(我目前也忽略法线)
然而,当我运行这个程序时,结果并不完全正确
我在互联网上找到的其他几个文件上试用了它,得到了类似的结果。看起来三角形的顶点几乎是偏移的或什么的。您应该将所有顶点数据读取到数组中。Obj文件包含有关三角形的信息,以及顶点应该如何索引。以
f
开头的行包含3个数字w它描述三角形。所以你的代码应该是这样的(我不知道怎么走):
您应该将所有顶点数据读取到数组中。Obj文件包含有关三角形的信息,以及顶点应如何索引。以
f
开头的行包含3个描述三角形的数字。因此,您的代码应该如下所示(我不知道如何):
Obj文件除了存储顶点(v线)外,还存储如何将它们组合成面(f线)。顶点本身的存储没有特定的顺序,这意味着第一个三角形不一定由顶点0-2组成 您必须将所有顶点读取到向量/列表/数组中,然后解析面条目,根据额外存储的附加信息(法线、纹理坐标),这些条目可以通过四种不同的方式组合(根据此处):
f v1 v2 v3 ...
f v1/vt1 v2/vt2 v3/vt3 ...
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ....
f v1//vn1 v2//vn2 v3//vn3 ...
在哪里
对于您的示例,您必须执行类似于此伪代码的操作(假设所有面都已三角化)
Obj文件除了存储顶点(v线)外,还存储如何将它们组合成面(f线)。顶点本身的存储没有特定的顺序,这意味着第一个三角形不一定由顶点0-2组成 您必须将所有顶点读取到向量/列表/数组中,然后解析面条目,根据额外存储的附加信息(法线、纹理坐标),这些条目可以通过四种不同的方式组合(根据此处):
f v1 v2 v3 ...
f v1/vt1 v2/vt2 v3/vt3 ...
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ....
f v1//vn1 v2//vn2 v3//vn3 ...
在哪里
对于您的示例,您必须执行类似于此伪代码的操作(假设所有面都已三角化)
是否通过调试器运行?顶点的值是否与文件中的值相同?是否通过调试器运行?顶点的值是否与文件中的值相同?
f v1 v2 v3 ...
f v1/vt1 v2/vt2 v3/vt3 ...
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ....
f v1//vn1 v2//vn2 v3//vn3 ...
v ... index into the list of v-entries
vt ... index into the list of vt-entries (texture coordinates)
vn ... index into the list of vn-entries (normals)
v-list vertices[];
parse each v-line into v-list
foreach (f-line)
{
parse v-indices -> {v0, v1, v2}
draw triangle {vertices[v0], vertices[v1], vertices[v2]}
}