安卓3D表面绘图

6
我的要求是从一组数据点(x,y,z)值创建一个3D表面图(还应显示x,y,z轴)。这个3D可视化需要在ANDROID上完成。 我的输入:目前计划使用open gl 1.0和java。我还考虑使用Adore3d、min3d和rgl包,它们使用open gl 1.0。我擅长java,但对3D编程是新手。
时间框架:2个月
我想知道最好的方法是什么?OpenGL 1.0适合3D表面绘制吗?还有其他可以在Android上使用的软件包/库吗?

欢迎来到SO!您的问题过于宽泛,涉及太多任务,难以得到高质量的回答。我建议您重构问题,并一次专注于一个部分。 - Justin Self
嗨,justnS,谢谢。我重新表述了我的问题,针对一个具体的问题。 - MRSGT _GT
2个回答

5

你可以使用OpenGL 1.0或OpenGL 2.0来绘制曲面。你只需要将轴线画成线条,曲面画成三角形即可。如果你有高度图数据,可以按照以下步骤进行:

float[][] surface;
int width, height; // 2D surface data and it's dimensions

GL.glBegin(GL.GL_LINES);
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0
GL.glVertex3f(width, 0, 0); // line ending at width, 0, 0
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0
GL.glVertex3f(0, 0, height); // line ending at 0, 0, height
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0
GL.glVertex3f(0, 50, 0); // line ending at 0, 50, 0 (50 is maximal value in surface[])
GL.glEnd();
// display the axes

GL.glBegin(GL.GL_TRIANGLES);
for(int x = 1; x < width; ++ x) {
    for(int y = 1; y < height; ++ y) {
        float a = surface[x - 1][y - 1];
        float b = surface[x][y - 1];
        float c = surface[x][y];
        float d = surface[x - 1][y];
        // get four points on the surface (they form a quad)

        GL.glVertex3f(x - 1, a, y - 1);
        GL.glVertex3f(x, b, y - 1);
        GL.glVertex3f(x, c, y);
        // draw triangle abc

        GL.glVertex3f(x - 1, a, y - 1);
        GL.glVertex3f(x, c, y);
        GL.glVertex3f(x - 1, d, y);
        // draw triangle acd
    }
}
GL.glEnd();
// display the data

这会绘制简单的轴和高度场,全部使用白色。从这里开始扩展应该非常简单。


感谢您的帮助。由于我正在使用Java,我将尝试转换您的代码并执行它。一旦我看到输出,我会回复您。非常感谢。附言:(请问您是否有这段代码片段的Java版本?) - MRSGT _GT
谢谢!有了您的示例,我能够生成一些2D曲面图。我希望使用(x,y,z)点生成3D曲面图。您是否能提供一个OpenGL Android的3D曲面生成示例呢? - MRSGT _GT
是的,我猜想您需要一个等值面!我想把一组三维点(长x宽x高)连接起来形成一个三维表面/地形。每个点的颜色由另一个参数给出。我想连接相似颜色的点,显示不同的区域。 - MRSGT _GT
好的,这仍然有点令人困惑。你“猜测”你想要一个等值面,然后你想要地形。使用谷歌,查看一些等值面图像,并决定是否符合你的需求。或者为什么不告诉我你想要实现什么,以及你的输入数据是什么(现在我知道它是一组彩色点,但你是如何获得它们的?颜色代表什么?)。 - the swine
抱歉造成困惑。我有一个包含(x,y,z,intensity)值的数据集。根据强度范围,我正在为点设置颜色。目前,我能够显示具有不同颜色的数据集点在3D中(20-30为红色,30-40为蓝色等)。然而,我想连接相似的点以形成3D表面视图。请查看视频http://www.youtube.com/watch?v=f1GeNljM0T8&feature=related 在0.02处。(我现在只能显示点。不确定如何连接相似强度的点以形成像视频中展示的区域。谢谢。) - MRSGT _GT
显示剩余3条评论

0
关于您问题的第二部分:
还有哪些可以与Android一起使用的包/库?
是的,现在可以使用SciChart绘制Android 3D表面图。
许多配置都是可能的,包括绘制线框、渐变色图、等高线和实时更新。 链接到Android图表特性页面 链接到Android 3D表面图示例

Android 3D Surface Plot

声明一下,我是scichart团队的技术负责人


人们寻求答案,我们给出了,却被点踩。除了开源代码,还有值得分享的解决方案! - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接