手动缩放Java3d中的单位多维数据集

时间:2013-03-15 21:26:10

标签: graphics transformation java-3d 3d-rendering

我正在研究Java3D中的一些东西,我知道TransformGroups通常是如何应用缩放...

但是,我正在尝试创建一种基于缩放矢量定义长方体的方法。

所以我有一个单位立方体1,1,1 - > -1,-1,-1,我想手动应用缩放变换。

 private static void scaleCoordinates(IndexedQuadArray indexedQuadArray, Vector3d scaleVector) {
    //Create scalar transform
    Transform3D scalarTransform = new Transform3D();
    scalarTransform.setScale(scaleVector);

    // retrieve the vertex coordinates
    GeometryInfo indexedQuadArrayGeometryInfo = new GeometryInfo(indexedQuadArray);
    Point3f coordinatesToScaleArray [] = indexedQuadArrayGeometryInfo.getCoordinates();

    // scale each 3d coordinate 
    for(Point3f coordinate: coordinatesToScaleArray){
        scalarTransform.transform(coordinate);
    }

    // update the indexed quad array with scaled-coordinates.
    indexedQuadArray.setCoordinates(0, coordinatesToScaleArray);
}

现在当缩放为正整数时它可以正常工作,但如果我按0.5或负数缩放,则顶点会变得混乱。

任何人都知道什么是错的?我应该能够按小于1的比例进行缩放,也许是因为我不知道的Transform3D.transform(Point3f)而感到高兴。

非常感谢您的阅读!

1 个答案:

答案 0 :(得分:0)

我不希望负数运作。当您考虑它时,缩放转换实际上只是一个扩展。因此,使用向量(.5,.6,.7)缩放点(1,1,1)应该为您提供新点(.5,.6,.7)

如果你用负数“缩放”,你就会将你的立方体内外翻出来,各种法线和边缘都是错误的。

您能提供quadArray和您正在使用的scaleVector的顶点列表吗?