我并不需要像JT2GO一样拥有很高的需求和功能,我只想渲染3D文件,不需要分层或选择单个组件。只需要一个平面查看器。
开始获取规范:
并编写一个库来读取文件。该规范看起来很大,但实现起来很直接。我认为可以在不将整个数据结构保留在内存中的情况下访问文件的元素。
在编写查看器部分时,请勿直接使用OpenGL,而是使用场景图库。(OpenSceneGraph是我想到的第一个)
您可以从这里使用Java库:http://www.johannes-raida.de/jnetcad。 据我所见,它应该支持JT版本8文件。我使用了DXF导入库并感到非常满意。API相同,因此您可以访问所有三角形及其坐标、法线、颜色和图层。
您还可以使用Open Cascade库。它是一个开源的C++库(LGPL),主要设计用于CAD。目前,它还支持读取JT文档的面(三角形): 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文件格式,请分享如何读取。