0

我正在使用 Blender 创建 .obj 文件,然后尝试编写自定义解析器来读取文件并创建网格。我有几个问题。我的示例是使用搅拌机中的立方体,但我想将我的问题扩展到立方体之外。

当我在搅拌机中创建一个立方体并将其保存为 .obj 文件时,我得到了这个......

# Blender v2.63 (sub 0) OBJ File: ''
# www.blender.org
mtllib cube.mtl
o Cube_Cube.001
v -0.911915 -0.851241 1.196067
v -0.911915 -0.851241 -0.803933
v 1.088085 -0.851241 -0.803933
v 1.088085 -0.851241 1.196067
v -0.911915 1.148759 1.196067
v -0.911915 1.148759 -0.803933
v 1.088085 1.148759 -0.803933
v 1.088085 1.148759 1.196067
usemtl 
s off
f 2 1 5 6
f 6 7 3 2
f 7 8 4 3
f 1 4 8 5
f 1 2 3 4
f 8 7 6 5

而我的Mesh渲染方法是这样的......

@Override
    public void draw(GL10 gl)
    {
        super.draw(gl);
        gl.glColor4f(255, 0, 255, 150);
        gl.glFrontFace(GL10.GL_CCW);
        gl.glEnable(GL10.GL_CULL_FACE);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3,GL10.GL_FLOAT,0,vertexBuffer);

        gl.glDrawElements(GL10.GL_TRIANGLE_FAN,vertexBuffer.array().length,GL10.GL_UNSIGNED_SHORT,indexBuffer);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisable(GL10.GL_CULL_FACE);
        gl.glColor4f(255, 255, 255, 255);
    }

如何填充我的索引缓冲区和顶点缓冲区以便能够绘制这个立方体。我可以将所有顶点都放在一个“drawElements”函数中,还是必须逐个三角形地完成?.obj 文件是否会使一个面超过四个顶点?(比如二维五边形或六边形?)如果是这样,我将如何绘制它们?.OBJ 文件是否使用 Triang 扇形或条形?

谢谢!

4

2 回答 2

1

就实际效率提升而言,如果您将缓冲区存储在 GPU 上,则很可能没有。如果您正在计算 CPU 上的数据并将其缓冲到 GPU 每一帧(如果可以的话,您应该避免并将其存储在 GPU 本身上),那么您正在通过使用三角形风扇/条来减小缓冲区大小。但是,在光栅化过程中,除非光栅化器循环能够迭代具有大于 3 个顶点的复杂形状(我非常怀疑),否则无论如何它都必须对多边形进行三角剖分。

我不是一个沉重的 android 程序员,但如果您使用的 OpenGL 版本有“GenerateBuffer()”和“DrawArrays()”,请使用它们。由于使用三角形风扇/条仅有助于硬件组件之间的缓冲速度,因此如果您的 android 设备没有专用的图形设备,则可能无需进行优化。

就你如何做而言,你只需对三角形列表进行去三角化。使用三角形条带,您必须遍历所有三角形并找到它们的列表,它们的 2 个顶点位置与每个先前的顶点相同。对于三角形风扇,您需要遍历所有三角形,并找到它们的列表,它们与每个先前的顶点具有相同的 2 个顶点位置,并且它们都必须具有相同的旋转原点。

上面的描述只是三角剖分算法的逆:


    三角形带(给定“n”个顶点的列表):每个三角形都是“新三角形(n-2,n-1,n)”,其中(n > 2)
    三角形扇形(给定“n”个顶点的列表):每个三角形都是“new Triangle(0, n-1, n)”,其中“0”是第一个元素,(n > 2)

对于四边形(与您的示例代码一样),您可以使用上面的三角形扇形方法(三角形条不适用于搅拌机 obj 文件四边形)。

于 2013-11-12T17:39:41.510 回答
0

OpenGL 和显卡只是简单的机器,它们绘制三角形的速度非常快。因此,您应该首先关注三角形。忽略四边形。无论如何,四边形通常被一组两个三角形所取代,您无法控制它们是如何划分的。五边形和更多的问题带来了更多的问题。也忽略条带和粉丝。无论如何,通用的 3d 模型通常只是三角形。在特殊情况下,扇形和条形可用作优化。例如,如果您从高度图以网格的形式对景观进行建模,则三角形条非常有用。

于 2012-12-03T13:50:36.357 回答