5

サンドキャッスル楕円のアウトライン ジオメトリに従っています。とにかく楕円の線幅を広くする方法があるのだろうか?width 属性を使用してポリラインを広くする例はありますが、ellipseOutlineGeometry オブジェクトを作成する方法はないようです。サンドキャッスルの例では、最後に lineWidth 設定がありますが、これを変更しても楕円の輪郭の幅には影響しないようです。

サンドボックス コード:

// Create the ellipse geometry.  To extrude, specify the
// height of the geometry with the extrudedHeight option.
// The numberOfVerticalLines option can be used to specify
// the number of lines connecting the top and bottom of the
// ellipse.
ellipseOutlineGeometry = new Cesium.EllipseOutlineGeometry({
    center : Cesium.Cartesian3.fromDegrees(-95.0, 35.0),
    semiMinorAxis : 200000.0,
    semiMajorAxis : 300000.0,
    extrudedHeight : 150000.0,
   rotation : Cesium.Math.toRadians(45),
   numberOfVerticalLines: 10
});
// Create a geometry instance using the ellipse geometry
// created above.
var extrudedEllipseOutlineInstance = new Cesium.GeometryInstance({
    geometry : ellipseOutlineGeometry,
    attributes : {
        color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
    }
});

// Add both ellipse outline instances to primitives.
 primitives.add(new Cesium.Primitive({
    geometryInstances : [ellipseOutlineInstance, extrudedEllipseOutlineInstance],
    appearance : new Cesium.PerInstanceColorAppearance({
        flat : true,
        renderState : {
            depthTest : {
                enabled : true
            },
             lineWidth : Math.min(2.0, scene.maximumAliasedLineWidth)  //changes here dont seem to affect the actual size?
        }
    })
}));
4

3 に答える 3

13

Windows を使用していると仮定します (理由はすぐにわかります)。

常に 1 を返す理由についての簡単な答えscene.maximumAliasedLineWidthは、それが Web ブラウザーで許可されている最大値だからです。これは、1 より大きい値を使用するとエラーが発生する理由でもあります。もちろん、この回答はさらに多くの質問につながるだけです。ということで、詳しい回答を。

WebGL 仕様では、実装は最小線幅 1 をサポートすると述べています。また、1 より大きい線幅をサポートする必要はありません。実際には、すべての OpenGL ドライバーが 1 より大きい値をサポートしています。あなたが現在使用しているハードウェアも同様であると確信しています。ただし、Windows での主要な WebGL 実装のすべてが、実際には OpenGL を使用しているわけではありません。

Chrome と Firefox は両方とも、 DirectX 経由で Wi​​ndows に WebGL を実装するANGLE (Almost Native Graphics Layer Engine)と呼ばれるライブラリを使用します。ANGLE は、それ自体で適合実装と見なされます。ANGLE は線幅 1 のみをサポートすることを選択しているため (理由については説明しません)。つまり、Chrome と Firefox の両方が Windows でより広い境界線を引くことができないということです (その過程であなたや他の多くの開発者を夢中にさせます)。

Internet Explorer 11 も同様のアプローチを採用していますが、ANGLE を使用せず、代わりに独自のカスタム DirectX ベースの実装を使用しています。さらに悪いことに、彼らは 1 の線幅しかサポートしていないと主張しています。代わりに、ブラウザー自体は常に太い線 (幅が 3 ~ 5 ピクセルに見える) を描画します。そのため、IE では太い線を使用しないことはできません。

他のプラットフォームでの実装; Android、iOS、Mac OS のいずれであっても、この問題はありません。オリジン コード スニペットは、これらのプラットフォームでは 2 の太さ、Windows では 1 の太さの線を描画します。

ブラウザが使用している WebGL 実装について学習するための便利なサイトはhttp://webglreport.com/です。ANGLE を使用しているかどうか、多くの機能の最小値と最大値、およびその他の無数の情報 (グラフィック プログラマーのみが気にするかもしれません) を知ることができます。

于 2014-08-20T13:04:16.973 に答える
0

Windows で Firefox を使用しています。http://webglreport.com/にアクセスして、それらの値を確認しました。しかし、問題なく太い線でポリライン(MultiGeometry)をレンダリングしています。問題はポリゴンのみです。

于 2015-10-19T20:09:49.897 に答える