标签: wavefront

在Android OpenGL ES中使用Wavefront .obj的纹理坐标的问题

我正在使用openGL ES编写一个Android应用程序.我遵循了一些在线教程并设法使用硬编码顶点/索引/纹理坐标加载纹理立方体

作为下一步,我为wavefront .obj文件编写了一个解析器.我使用教程中的顶点等制作了一个模拟文件,加载很好.

但是,当我使用使用3d建模包制作的文件时,所有纹理都会混乱

下面是我目前获取纹理坐标的方式:

首先,我将所有纹理坐标加载vt到一个大向量中

接下来我找到每个f三角形的前两个纹理坐标(所以f 1/2/3 2/5/2 3/4/1意味着我采用第2和第5纹理坐标.因为.obj从1开始计数而不是0,我从位置开始必须为-1,然后将位置乘以2作为x坐标位置,并对我的vt数组中的y坐标位置执行相同但+1

我采用刚刚找到的那些纹理坐标并将它们添加到另一个矢量中.

一旦我完成了所有顶点.我将矢量转换为FloatBuffer,将其传递给glTexCoordPointer我的draw方法

这是解析文件的代码:

private void openObjFile(String filename, Context context, GL10 gl){

    Vector<String> lines = openFile(filename, context); // opens the file

    Vector<String[]> tokens = new Vector<String[]>();

    Vector<Float> vertices = new Vector<Float>();
    Vector<Float> textureCoordinates = new Vector<Float>();
    Vector<Float> vertexNormals = new Vector<Float>();

    // tokenise
    for(int i = 0;i<lines.size();i++){
        String line = lines.get(i);
        tokens.add(line.split(" "));
    }

    for(int j = 0;j<tokens.size();j++){
        String[] linetokens = tokens.get(j); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es texture-mapping wavefront .obj

2
推荐指数
1
解决办法
5040
查看次数

在OpenGL中渲染网格作为一系列子组?

我正在完成一个波前对象解析器,我想用它来构造泛型网格对象.我的引擎使用OpenGL 4和着色器绘制引擎中的所有内容.

我的问题是如何确保渲染网格的最佳渲染效率.

波前obj文件通常具有指定的许多对象的子组.

可以为子组分配特定材料(例如闪亮的红色).

因此,网格可能是一个相当复杂的子组集合,每个子组都分配了自己的材料.

我的问题是 -

问:我是否需要单独绘制每个子组,例如每个子组调用glDrawElements?(所以,如果我有4个独立的子组,我必须进行四次glDrawElements调用,从而通过4次统一更改(对于材质/纹理)调用着色器4次)

glDrawElements( GL_TRIANGLES, nNumIndicesInGroup, GL_UNSIGNED_INT, ((char*)NULL)+ first-vertex-offset );
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,那么我将不得不计算:

每个子组中的索引(表示每个子组的单独索引数组和VAO)子组开始的顶点偏移量

这看起来非常低效,我咆哮错了树吗?

另外,从Wavefront obj wiki页面:

Smooth shading across polygons is enabled by smoothing groups.
 s 1
 ...
  # Smooth shading can be disabled as well.
  s off
  ...
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议平滑阴影值表示什么?例如s1,s2,s4等

opengl shader wavefront .obj

2
推荐指数
1
解决办法
1946
查看次数

使用libgdx将.OBJ转换为JSON格式

我正在一个项目中,我们需要即时将.OBJ模型转换为.G3DJ(JSON)格式。我已经尝试过在Google代码中建立的这段代码。

https://code.google.com/p/libgdx-users/wiki/ImportingModelsFromBlender

  ObjLoader loader = new ObjLoader();
  StillModel model = loader.loadObj(Gdx.files.internal("data/model.obj"), true);
  G3dExporter.export(models, Gdx.files.absolute("data/model.g3d"));
Run Code Online (Sandbox Code Playgroud)

但是,StillModelG3DExporter不能在libgdx找到。

有任何想法吗?

json wavefront .obj libgdx

1
推荐指数
1
解决办法
1795
查看次数

Wavefront obj文件,Faces有3个纹理坐标

我从blender导出一个.obj加载到一个C++程序我正在编写一切都很好但是我想知道在解析面部时我注意到面部数据中第三个点上有一个未使用的纹理坐标.

  f 1/1 2/2 3/3
//f 1/s 2/t 3/? Its vt3 that is the coordinate in question
Run Code Online (Sandbox Code Playgroud)

这是用来做什么的?我应该保留它吗?

opengl 3d wavefront

1
推荐指数
1
解决办法
3107
查看次数

为什么我的OBJ解析器渲染这样的网格?

我已经把自己的OBJ解析器/导入器支持添加到我一直在研究的3D渲染引擎上.我遵循了这里发现的几乎'发球' 的规格,目前的例外是限制对组,面,顶点,法线和纹理坐标的所有支持(因此没有材料库或自由形式的多边形支持) .我的目标是简单地逐行解析 - 在我进行时生成面向对象的,分层的树状场景图 - 并允许开发人员自动将数据绑定到着色器程序,只需很少的手动调用,以便开始操纵和查看网格.最终结果是我的引擎成功解析了大多数(如果不是全部)有效的OBJ格式文件,提取了适当的数据并将其发送到基本着色器进行渲染.但是,即使数据似乎在场景图中正确表示,由于某种原因它很少正确渲染...

请注意,一个简单的平面(从3DS Max导出,只包含4个顶点和2个面)渲染完美,但是立方体或任何更高级的平面通常最终看起来像这样:

http://youtu.be/1x6bnuhAXWY

我不知道出了什么问题,AFAIK我的代码实际上应该解析并渲染基本的几何图形......那么为什么不呢?为方便起见,我在这里上传了我的项目.它包含一个NetBeans项目,其中包含我的引擎的最小版本和一个Test应用程序.我还包括3个不同版本的OBJ立方体网格和一个平面网格.可以通过编辑Test.java顶部的值来配置应用程序,并且唯一的输入控件是用于网格平移的A,S,W和D,以及用于网格旋转的鼠标移动.虽然我已经设法大幅度减少了项目,但最值得注意的类包括文件顶部的额外注释/信息.

考虑到所有事情,我会采取任何我能得到的想法......而且肯定不会不受重视!

java opengl import lwjgl wavefront

1
推荐指数
1
解决办法
1699
查看次数

为什么还有很多波前 obj 文件在一张面上包含 4 个顶点?

今天,我开始实现波前 obj 加载器,问题是我不知道为什么互联网上有这么多包含 4 个顶点的 obj 文件,尽管事实上 OpenGL 不再支持 GL_QUADS 并弃用它。

有什么解决方法吗?我的意思是,每次我尝试使用 GL_TRIANGLE_FAN 或 GL_TRIANGLE_STRIP 绘制包含 4 个顶点的面时,它都会显示悲惨的结果。所以最后我别无选择,只能在每个面上发出绘制命令,正如你所知,它表现出糟糕的表现。我想绘制它只在每个组或平滑组上发出一个命令。

有任何想法吗?

opengl wavefront

1
推荐指数
1
解决办法
3695
查看次数

tu 电视纹理坐标大于 1.0 ?__(OBJ 格式)

我想了解 OBJ 格式如何处理纹理坐标。

例子:

vt 1.000000 1.005200
vt 0.467300 1.709900
vt 0.923800 1.994400
vt 0.500000 1.002600
vt 0.371400 1.000000
vt 0.438100 2.000000
vt 0.000000 1.000000
vt 0.467300 1.709900
vt 0.105000 1.159500
vt 0.434600 1.002300
Run Code Online (Sandbox Code Playgroud)

我理解值的范围应从 (0) 到 (1.000000) 以覆盖每个 X 和 Y 的 0% 到 100% 的纹理图像文件。(tu tv)

但我发现数组中的某些值高于 1.000000,有时低于 0.000000

我应该如何处理这些值以保持在 0 和 1 之间?

opengl 3d modeling data-modeling wavefront

1
推荐指数
1
解决办法
748
查看次数

在 C 中的 OpenGL 中加载 .obj

我对 OpenGL 比较陌生,正在将它用于需要我将它与 C 一起使用的类(没有 C++)。我想在我的代码中使用 .obj 文件,但不知道如何导入它们。我在网上找到了很多 C++ 的导入器,但必须使用 C。任何人都可以将我引导到导入器或给我一些关于如何编写我自己的/处理和导入 .obj 文件到我的程序的基础知识。谢谢!

c opengl import wavefront .obj

0
推荐指数
1
解决办法
3075
查看次数

如何将 PYopenGL 写入 JPG 图像

我是 PYopenGL 的新手,实际上,我也不确定 PYopenGL 是否适合我的任务。

我有一个 Wavefront obj 文件格式的 3D 模型。我需要从给定的视图中获取模型的“打印屏幕”。换句话说,我需要渲染模型而不是显示模型将其保存为图像(jpg)

我的想法是使用 PYopenGL 来完成这项任务。但是,谷歌搜索我找不到如何做到这一点的建议或示例。因此,我开始怀疑 PYopenGL 是否适合我的任务。

你们中有人已经有了这样的东西,或者知道一个我可以用来学习的例子吗?

提前致谢。

python image pyopengl wavefront

-1
推荐指数
2
解决办法
5608
查看次数