android - 如何在 Android OpenGL 中加载网格

标签 android opengl-es id3dxmesh

如何将 Android OpenGL 中的 Mesh (3dmax) 加载到 ByteBuffer 中?

例子:

float triangleCoords[] = {
    -0.5f, -0.25f      , 0, // 0,
 0.5f, -0.25f      , 0, // 1,
 0.0f, 0.559016994f, 0  // 2,
};

ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length * _4_FLOAT_LENGTH);
vbb.order(ByteOrder.nativeOrder());
triangleVB = vbb.asFloatBuffer();
triangleVB.put(triangleCoords);
triangleVB.position(0);

如何加载像数组或 Coords 这样的网格,或者为此工作需要一个库

最佳答案

它基本上归结为将文件中的数据加载到您的数据结构中(例如代码 fragment 中的顶点数组)并将这些数据提供给 OpenGL 进行渲染(例如,在您的情况下为 glDrawArrays ).这通常是相同的过程,无论是使用 Android、Windows、Plan9、OpenGL 还是 Direct3D。只有实现细节很重要,因此这个问题有点宽泛。

可以看看this description of the 3DS file format (在你的问题中暗示),它也有指向加载这些文件的教程的链接。虽然 3DS 格式是一种非常容易阅读的二进制格式,但您也可以先查看 Wavefront OBJ format。 ,一种简单的 ASCII 文件格式,几乎所有建模软件都可以将其导出(但这也适用于 3DS)。将这些格式加载到一堆简单的顶点数组中应该归结为几行代码。

这些应该可以帮助您入门。如果您在特定平台上实现这些网格加载功能时遇到任何具体问题,请随时提出更具体的问题。

关于android - 如何在 Android OpenGL 中加载网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7322430/

相关文章:

android - 如何在顶点着色器中打印浮点值

OpenGL - 切换着色器

ios - Metal Compute 内核尺度图像

c++ - 默认对象(如茶壶)上的 Directx 9 顶点颜色

Android以编程方式创建选择器

Android 通知操作按钮点击监听器

android - 你能告诉我为什么作者需要为Fragment包装FrameLayout吗?

java - Java (Android) : convert byte[] to String, 数字形式