1

私は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) で何かが起こっていると思います。

読んでくれてありがとう!

4

1 に答える 1

0

負の数が機能するとは思わないでしょう。あなたがそれについて考えるとき、スケーリング変換は実際にはただの掛け算です。したがって、ポイント (1,1,1) をベクトル (.5,.6,.7) でスケーリングすると、新しいポイント (.5,.6,.7) が得られます。

負の数で「スケーリング」すると、立方体が裏返しになり、あらゆる種類の法線とエッジが正しくなくなります。

使用している quadArray と scaleVector の頂点のリストを提供できますか?

于 2013-03-18T13:39:35.993 に答える