gpt4 book ai didi

ios - iOS上的OpenGL ES 2.0:在没有法线的情况下从zBrush导出导入.OBJ文件

转载 作者:行者123 更新时间:2023-12-01 17:56:04 25 4
gpt4 key购买 nike

首先,我要说我是OpenGL ES和OpenGL的新手。

我有一个3D家伙从zBrush导出的模型对象。 .obj文件中没有任何法线,我认为这就是导致此问题的原因。我正在使用obj2opengl创建一个包含顶点和纹理坐标的.h文件,然后导入它们并进行渲染。导入内容如下所示:

glGenBuffers(1, &mushroomVertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowVerts), mushroom01b_LowVerts, GL_STATIC_DRAW);

glGenBuffers(1, &mushroomTextureBufferID);
glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowTexCoords), mushroom01b_LowTexCoords, GL_STATIC_DRAW);

是时候绘制对象了,这是我正在使用的代码:
glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, NULL);

glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, NULL);

self.effect.texture2d0.name = _mushroomTextureInfo.name;
self.effect.texture2d0.target = _mushroomTextureInfo.target;

[self.effect prepareToDraw];

glDrawArrays(GL_TRIANGLES, 0, mushroom01b_LowNumVerts);

这是可行的,对于在Blender中打开它们,修复了法线并重新导出为具有法线的OBJ的模型(在上面为第三个数组缓冲区添加了代码),它看起来还不错。但是,如果我根本不修改从zBrush导出的OBJ,我将得到以下信息:

现在,这是通过 glEnable(GL_CULL_FACE);启用人脸剔除。如果我不启用它,则该模型似乎是由内而外渲染的。

显然,zBrush导出以某种方式被弄乱了。我的问题是如何解决它。

最佳答案

该模型未三角剖分。让您的艺术家在输出中选中该复选框。

我去找了你的脚本文件。

假设四边形是

a -- c
| |
| |
b -- d

在.pl中,您会找到

矩形=>第二个三角形
    if($5 != "")
{
@d = split('/', $5);
$va_idx[$numFaces] = $a[0]-1;
$ta_idx[$numFaces] = $a[1]-1;
$na_idx[$numFaces] = $a[2]-1;

$vb_idx[$numFaces] = $d[0]-1;
$tb_idx[$numFaces] = $d[1]-1;
$nb_idx[$numFaces] = $d[2]-1;

$vc_idx[$numFaces] = $c[0]-1;
$tc_idx[$numFaces] = $c[1]-1;
$nc_idx[$numFaces] = $c[2]-1;

$face_line[$numFaces] = $line;

$numFaces++;
}

尝试对此重新排序以查看是否需要反转第二个三角形的缠绕顺序

矩形=>第二个三角形
    if($5 != "")
{
@d = split('/', $5);
$va_idx[$numFaces] = $a[0]-1;
$ta_idx[$numFaces] = $a[1]-1;
$na_idx[$numFaces] = $a[2]-1;

$vb_idx[$numFaces] = $c[0]-1;
$tb_idx[$numFaces] = $c[1]-1;
$nb_idx[$numFaces] = $c[2]-1;

$vc_idx[$numFaces] = $d[0]-1;
$tc_idx[$numFaces] = $d[1]-1;
$nc_idx[$numFaces] = $d[2]-1;



$face_line[$numFaces] = $line;

$numFaces++;
}

关于ios - iOS上的OpenGL ES 2.0:在没有法线的情况下从zBrush导出导入.OBJ文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457869/

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