gpt4 book ai didi

opengl - 在opengl中绘制模型时出错

转载 作者:IT王子 更新时间:2023-10-29 02:29:47 26 4
gpt4 key购买 nike

所以我正在尝试一个基本的 opengl 程序,该程序读取 .obj 文件然后呈现它(obj 文件包含格式中的三角形顶点v 1.000000 2.000000, 3.00000.

所以这是我的代码(我使用 GLFW 和 Golang 绑定(bind)库)(我目前也忽略法线)。

gl.Begin(gl.TRIANGLES)
for scanner.Scan() {
var v0, v1, v2 float32
t := strings.Split(scanner.Text(), " ")
line := scanner.Text()
fmt.Sscanf(line, "v %f %f %f", &v0, &v1, &v2)
if t[0] == "v" {
gl.Vertex3f(v0, v1, v2)
}
}
gl.End()

但是当我去运行它时,结果不太正确

enter image description here

我在互联网上找到的其他几个文件上进行了尝试,得到了类似的结果。看起来三角形的顶点似乎发生了偏移之类的。

最佳答案

您应该将所有顶点数据读入数组。 Obj 文件包含有关三角形的信息,以及应如何索引顶点。以 f 开头的行包含 3 个描述三角形的数字。所以你的代码应该是这样的(我不知道怎么走):

var vertices [1000*3] float32
for scanner.Scan() {
var i=0
var v0, v1, v2 float32
var vv byte
t := strings.Split(scanner.Text(), " ")
line := scanner.Text()
fmt.Sscanf(line, "%c %f %f %f", &vv, &v0, &v1, &v2)
if vv == "v" {
vertices[i] = v0
vertices[i+1] = v1
vertices[i+2] = v2
}
i = i+3
}
gl.Begin(gl.TRIANGLES)
for scanner.Scan() {
var v0, v1, v2 int
var vv byte
t := strings.Split(scanner.Text(), " ")
line := scanner.Text()
fmt.Sscanf(line, "%c %d %d %d", &vv, &v0, &v1, &v2)
if vv == "f" {
gl.Vertex3f(vertices[v0], vertices[v1], vertices[v2])
}
}
gl.End()

关于opengl - 在opengl中绘制模型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774594/

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