- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的 Android OpenGL ES 2.0 程序编写一个基本的 Wavefront OBJ 加载器。现在,我忽略了 OBJ 文件中的所有内容,除了顶点、法线和面。这是我到目前为止所写的内容:
InputStream inputStream = context.getResources().openRawResource(resourceID);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line = reader.readLine()) != null)
{
if(line.startsWith("v "))
{
Float x = Float.valueOf(line.split(" ")[1]);
Float y = Float.valueOf(line.split(" ")[2]);
Float z = Float.valueOf(line.split(" ")[3]);
verticesArrayList.add(x);
verticesArrayList.add(y);
verticesArrayList.add(z);
}
else if(line.startsWith("vn "))
{
Float x = Float.valueOf(line.split(" ")[1]);
Float y = Float.valueOf(line.split(" ")[2]);
Float z = Float.valueOf(line.split(" ")[3]);
normalsArrayList.add(x);
normalsArrayList.add(y);
normalsArrayList.add(z);
}
else if(line.startsWith("f "))
{
// Loop 3 times for the 3 vertices/textures/normals associated with each face
for(int i = 1; i <= 3; i++)
{
Short vertex = (short) (Short.valueOf(line.split(" ")[i].split("/")[0]) - 1);
indicesArrayList.add(vertex);
// Make a copy of my normals array list
if(normalsArrayList2.size() == 0)
normalsArrayList2 = new ArrayList<Float>(normalsArrayList);
// Attempt to re-arrange the normals to match the order of the vertices
int normal = Integer.valueOf(line.split(" ")[i].split("/")[2]) - 1;
normalsArrayList2.add(vertex * 3, normalsArrayList.get(normal * 3));
normalsArrayList2.add((vertex * 3) + 1, normalsArrayList.get((normal * 3) + 1));
normalsArrayList2.add((vertex * 3) + 2, normalsArrayList.get((normal * 3) + 2));
}
}
}
reader.close();
但是,我不确定我是否正确设置了法线。你看到我在代码底部做了什么吗?我正在尝试重新排列法线,以便它们与顶点的顺序相匹配。我这样做是因为我正在使用 GLES20.glDrawElements() 方法,如下所示:
// Get handle to vertex shader's aPosition member, enable the handle, and prepare the vertex data
mPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
GLES20.glEnableVertexAttribArray(mPositionHandle);
GLES20.glVertexAttribPointer(mPositionHandle, COORDINATES_PER_VERTEX, GLES20.GL_FLOAT, false, VERTEX_STRIDE, verticesBuffer);
// Get handle to vertex shader's aNormal member, enable the handle, and prepare the vertex data
mNormalHandle = GLES20.glGetAttribLocation(mProgram, "aNormal");
GLES20.glEnableVertexAttribArray(mNormalHandle);
GLES20.glVertexAttribPointer(mNormalHandle, COORDINATES_PER_VERTEX, GLES20.GL_FLOAT, false, VERTEX_STRIDE, normalsBuffer);
// Draw the cube
GLES20.glDrawElements(GLES20.GL_TRIANGLES, numberOfIndices, GLES20.GL_UNSIGNED_SHORT, indicesBuffer);
我从这个 site 得到了重新排列的想法,经过无数小时的谷歌搜索这个主题。
但是,有些事情不对劲。我的着色器中的光照适用于我使用 OpenGL 手动创建的所有形状,但不适用于我使用 OBJ 解析器读取的模型,所以我认为我的光照计算不是问题,问题在于法线的计算方式我的 OBJ 解析器。此外,我用 Maya 打开我的测试 OBJ 文件,并使用“顶点法线编辑工具”以视觉方式验证所有法线都指向正确的方向。我的代码中是否存在任何明显的问题?
最佳答案
使用 ArrayList 的 set() 方法代替 add()
关于android - 编写用于 OpenGL 索引顶点缓冲区对象的 Wavefront OBJ 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845613/
Wavefront *.OBJ 文件中纹理坐标中的第 3 个分量是什么意思? 文件看起来像 vt 0.8490 0.1109 -0.2498 vt 0.8580 0.1235 -0.2498 vt 0
如何将 3D Studio 动画模型导出为 OBJ 格式(如果可能)?结果文件会是什么样子?我该如何阅读? 最佳答案 不,.obj 文件不支持动画。 您可以查看 .obj specification了
我想为 Blender 的 .obj 文件编写一个解析器。文件格式似乎不言自明,但似乎缺少一些数据。例如,一个简单的立方体(默认的 Blender 立方体)有 8 条线的顶点,但我期望看到 36 条线
我正在尝试使用这个例子https://github.com/ldo/ObjViewer_Android为我正在开发的游戏导入 Wavefront .obj 文件。问题是这个例子不适合我。 当我在 Ec
如何转换 Wavefront's .obj文件到.off file ? 最佳答案 您可以使用开源GUI软件Meshlab . 文件 > 导入网格 (Ctrl-I) 文件 > 将网格导出为并选择“对象文
我正在为 OpenGL ES 2.0 在 objc 中编写我自己的 .obj 解析器,以便更好地了解 OpenGLES 的工作原理。加载顶点并显示带有顶点颜色的模型就像一个魅力。只是一个小提示:我正在
我正在尝试使用 lwjgl 在 Java 中加载 .obj 文件,而不使用任何库来执行此操作。我创建了一个类来加载没有 Material 和纹理的模型。这很容易。但现在我想为模型添加 Material
我们正在 ipad 上使用 3d .obj/.mtl 文件构建一个建筑测量应用程序,并希望将它们转换为 BIM .ifc。 我们想向 .obj/.mtl 添加额外的数据层(例如墙壁、地板、 windo
我正在制作一个 WebGL 图形库,但在从 OBJ Wavefront 创建正确的数组时遇到问题(这绝对是正确的)。看起来是一个很容易修复的错误,但找不到它。想知道是否有人会认识到这种类型的错误。 您
我目前正在尝试为 OpenGL 项目制作 Wavefront (.obj) 文件加载器。我目前使用的方法是逐行分离 vector (std::vectors) 中的顶点位置、纹理位置和法线位置,我将它
我想将 obj 模型导入到我的 opengl 程序中。我有一个用于将属性数据传递到着色器的类/数据格式: class CustomVertex : public IVtxFmt { public:
我已经编写了一个 C++ Obj 文件加载器,但我无法正常工作。问题是在解析一个简单的 obj 文件时,如下所示: # Blender v2.62 (sub 0) OBJ File: '' # www
我正在编写 Wavefront .OBJ 网格解析器。虽然我已经为此工作了大约 3 个星期,但我决定重写其中的大部分内容,因为我是逐个字符地解析它(我觉得这最终引入了太多的复杂性,并且是'无论如何都无
我一直在阅读 David Brackeen 的用 Java 开发游戏。到现在为止我已经明白了书中的所有内容。在 Wavefront 对象文件中,我理解 v 命令的作用,但不理解 f 命令。例如: #
我正在使用 OpenGL ES 2.0 开发 Android 应用程序。 我想加载使用 Blender 2.49b 以 Wavefront OBJ 格式导出的文件。我已经确定了顶点位置、法线和纹理。
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
众所周知,AMD-OpenCL 支持 WaveFront(2015 年 8 月):http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013
所以我正在为波前 obj 模型文件编写一个解析器,并且有一些不规则之处我不确定如何处理。 因此,根据我的阅读,可以使用“g”命令将网格体分成组,并且可以使用“usemtl”命令将 Material 分
一位艺术家给了我所有 3D 模型,让我导出为 .obj 和 .mtl,以便我可以使用 OpenGL 渲染它。 但我不明白为什么纹理顶点大于 1,有时甚至为负数。看一下这个例子: (...) vn -0
我正在尝试为我的 Android OpenGL ES 2.0 程序编写一个基本的 Wavefront OBJ 加载器。现在,我忽略了 OBJ 文件中的所有内容,除了顶点、法线和面。这是我到目前为止所写
我是一名优秀的程序员,十分优秀!