java - 在典型的 opengl 渲染引擎中,我应该如何加载和显示 Wavefront OBJ 文件

标签 java android opengl-es indices

我已经在 java 中成功创建了一个对象加载器,它可以加载顶点、索引、纹理坐标和法线。对象加载器,从 Wavefont OBJ 文件中读取。

它相对简单,但是当我尝试加载一个包含纹理坐标索引和普通索引的更复杂的文件时,我不知道如何处理这些额外的索引集?我也找不到任何 opengl(或在本例中为 opengl es 1.1)方法来解析纹理和法线索引。这不仅在 opengl for android 中困扰着我,而且以前在 webgl 中也困扰过我,所以任何帮助将不胜感激。 令人恼火的是,有这么多教程讨论如何加载顶点、索引、纹理坐标和法线,但我还没有看到它们加载纹理和法线索引的教程(对于 opengl es)。

我是否必须根据索引重新排序或重建纹理坐标/法线数组?还是缺少某些功能?

最佳答案

but I am yet to see one (for opengl es) where they load in texture and normal indices.

这是有原因的:你不能。这通常是 Wavefront OBJ 格式不适合加载到 OpenGL/D3D 应用程序的原因。

每个顶点,位置/法线/texCoord/等数据的每个组合,都必须唯一。如果你在做索引渲染,每个索引指的是position/normal/texCoord/等的特定组合。

简而言之,您只能使用一个索引 进行渲染。该索引同时索引到所有属性数组。因此,如果您的数据使用不同的索引列表索引不同的属性,则必须转换数据才能正确执行操作。最好的方法是通过某种离线工具。

关于java - 在典型的 opengl 渲染引擎中,我应该如何加载和显示 Wavefront OBJ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130310/

相关文章:

java - Ruby setter 方法语法 method=(value) - 与 Java 的比较

javap 以可编程的方式

java - Java 中的 equals() 方法是如何工作的

没有打开屏幕的Android AlarmManager

android - 如何获取通知扩展 View 的自定义日期格式

android - 有没有办法在顶点着色器的一个点的位置用 fragment 着色器绘制一个圆?

java - 可能损坏的 java.util.Locale 导致 NullPointerException

java - 尝试从其他布局调用时不会调用 setContentView

javascript - 在 webGL 中绘制参数形状(不使用 Three.js)

ipad - 顶点着色器中的纹理查找在 iPad 设备和 iPad 模拟器上的行为不同 - OpenGL ES 2.0