我想创建一个可以查看/渲染 JT 文件格式的查看器。我知道有 1 个可用的 JT2Go 查看器,但我想为自己创建 1 个,因为 JT2GO 不是开源的。
我的要求不是那么高,我不需要JT2GO具有的功能,我只想渲染3D文件,不需要分层或选择单个组件。只是一个平面观众。
首先获取规格:
并编写一个库来读取文件。该规范看起来很大,但实施起来很简单。我认为应该可以访问文件的元素,而无需将整个数据结构保留在内存中。
在编写查看器部分时,不要直接使用OpenGL,而是使用场景图形库。 (我第一个想到的就是 OpenSceneGraph)
您可以从这里使用 Java 库:http://www.johannes-raida.de/jnetcad。 据我所知,它应该支持 JT 版本 8 文件。我使用了 DXF 导入库并且非常高兴。 API 是相同的,因此您可以访问所有三角形及其坐标、法线、颜色和图层。
也可以使用 Open Cascade 库。它是一个开源 C++ 库 (LGPL),主要为 CAD 设计。目前还支持读取JT文档的facets(三角形): http://www.opencascade.org/support/applications/jt_assistant/ Jt助手还可以可视化JT文档。该应用程序的 C++ 代码是开源的 (GPL)。与 Jt2Go 相比,Jt 助手的优点之一是可以显示 JT 文档的不同层(组)。
您可以尝试向开放资源导入库添加对此文件格式的支持:
http://assimp.sourceforge.net/
还知道不幸的缩写 ASSIMP。他们已经有一个查看器,所以一旦您将格式添加到导入库中,您就完成了。此外,您还将向现有开源库添加对另一种格式的支持。
要在加载文件后查看文件,您基本上需要在程序中实现 OpenGL。每个对象都是一个浮点值数组,表示其几何形状(顶点)。因此,一旦提取出这些信息,您只需使用标准 OpenGL 调用来渲染它。例如,将顶点放入密堆积数组(一维浮点数数组)中:
vertexX, vertexY, vertexZ, normalX, normalY, normalZ
这个浮点数组代表模型的所有面。每个面三个顶点,上面的线是一个顶点。一旦有了浮点数组,渲染就很简单了。
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]);
glNormalPointer(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]);
glColor4f(R, G, B, 1); //range 0-1
glDrawArrays(GL_TRIANGLES, 0, numVertices); //number of floats in array divided by 6
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
然后将其放入 OpenGL-ES 1.1 渲染循环中。让我知道这是否适合您。另外,如果您可以的话,请分享如何读取 JT 文件格式。