首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java三维参数曲面绘制

Java三维参数曲面绘制
EN

Stack Overflow用户
提问于 2015-03-14 18:19:38
回答 2查看 482关注 0票数 0

我真的需要你的帮助,因为我正在与未知的战斗了一段时间。

我试图在java3D上画一个参数化的曲面。如果我使用点阵,则该曲面正在绘制.以下是代码:

代码语言:javascript
复制
PointArray lsa=new PointArray(length,    GeometryArray.COLOR_3|GeometryArray.NORMALS|GeometryArray.COORDINATES);


float maxV=(float) ((float) 2*Math.PI);
         float maxU=(float) ((float) Math.PI);
         Vector3f norm = new Vector3f();
         for (float v = 0.01f; v < maxV; v+=0.03)
         {
               for (float u = 0.01f; u < maxU; u+=0.03)
              {
                 vIndex++;
                 Point3f pt = new Point3f();



                 pt.x=(float) (Math.sin(u)*Math.cos(v));
                 pt.y=(float) (2*Math.sin(u)*Math.sin(v));
                 pt.z=(float) Math.cos(u);





                 lsa.setCoordinate(vIndex, pt);
                 lsa.setColor(vIndex, new Color3f(0.9f,0.0f,0.0f));



             } 

         }



     Shape3D shape = new Shape3D(lsa);

我的问题是,它只画点(点),所以它不是一个完整的绘制表面。如何用多边形或任何曲面绘制这个参数曲面?有没有什么方法?

我在网上搜索,买书,但我仍然不能用java 3d。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-17 06:20:06

我会这么做的。

我会定义一个

代码语言:javascript
复制
Point3f[][] points = new Point3f[(int)((umax-umin)/du)][(int)((vmax-vmin)/dv)];

然后使用类似于int i = 0; i<points.length; i++int j = 0; j < points[0].length; j++的循环。定义u = i * du + uminv = j * dv + vmin

并使用对应于Point3f(u, v)填充此数组。

循环int i = 0; i<points.length - 1; i++int j = 0; j < points[0].length - 1; j++,并得到points[i][j]points[i+1][j]points[i][j+1]points[i+1][j+1]的点。

然后使用这篇文章中给出的方法将这些点转换为Polygon。将其添加到模型/稍后添加到模型中的数组中。

当然,这可能不是最好的办法,我觉得它不能很好地处理不连续,但它至少应该制造多边形。

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 17:23:35

你好,这是解决方案,它画了一个coons曲面,例如,它应该适用于任何参数曲面x(s,t),y(s,t),z(s,t)。

代码语言:javascript
复制
public static Shape3D getShape3D()
    {
        //Coons
        int ns=100;
        int nt=100;
        float param0=1.0f;
        float param1=3.0f;
        float s=0.0f;
        float t=0.0f;
        if (ns>500) ns=500; 
        if (nt>500) nt=500;
        Point3f[][] f=new Point3f[ns][nt];

        int sizeOfVectors=0;

        for (int i=0;i<ns;i++) //t -->s
        {
            for (int j=0;j<nt;j++) //u ---t
            {
                s=((float) i/ns);
                t=((float) j/nt);
                //System.out.println(" i "+ i + " j "+ j  + " s "+ s + " t "+ t);

                f[i][j]=new Point3f();

                //f[i][j].x=s;
                //f[i][j].y=2*t;
                //f[i][j].z=10*t*(1-s);

                f[i][j].x=param0*s;
                f[i][j].y=param1*t;
                f[i][j].z=(float) (0.5*((54*s*Math.sqrt(s)-126*Math.sqrt(s)+72*s-6)*t+(27*Math.sqrt(s)-27*s+6)));



                /*f[i][j].x = (float) (Math.sqrt(s)*Math.cos(t));

                f[i][j].y=(float) (Math.sqrt(s)*Math.sin(t));

                f[i][j].z=s;*/


                sizeOfVectors++;
                sizeOfVectors++;

            }
        }
        System.out.println("Total vectors "+sizeOfVectors);
        Shape3D plShape = new Shape3D();
        int vIndex=-1;
        int k=0;
        for (int i=0;i<(ns-1);i++)
        {
            k=i+1;
            sizeOfVectors=nt*2;
            vIndex=-1;
            TriangleStripArray lsa=new TriangleStripArray(sizeOfVectors, GeometryArray.COLOR_3|GeometryArray.COORDINATES|GeometryArray.NORMALS, new int[] {sizeOfVectors});

            for (int j=0;j<nt;j++)
            {
                vIndex++;
                lsa.setCoordinate(vIndex, f[i][j]);
                lsa.setColor(vIndex, new Color3f(0.9f,0.0f,0.0f));
                vIndex++;
                lsa.setCoordinate(vIndex, f[k][j]);
                lsa.setColor(vIndex, new Color3f(0.9f,0.0f,0.0f));
            }
            plShape.addGeometry(lsa);


        }


        return plShape;

    }

就像做梦一样。你的指导是最终成功的催化剂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29052513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档