現在、球をレンダリングするために glutsolidsphere() を使用しています。もちろん、スケーリング後、球体は楕円体のように見えます。固定ピクセル半径で球をレンダリングする方法はありますか? 特定の場所 (x、y、z) に特定の半径 (たとえば、r = 10 ピクセル) の球を描画し、その形状がモデリング変換の影響を受けないようにしたいだけです。
2 に答える
Rotation、Translation、Scaling などの変換は、球体の外観に影響を与えるべきではありません。3 つの軸すべてを同じ値で正しくスケーリングすることを忘れないでください。または、頂点を定数スカラーで乗算するだけで、球を歪ませずにスケーリングすることができます。それでも歪みが見られる場合は、カメラが原因である可能性があります (FOV が高いとエッジ付近が歪む傾向があります)、またはアスペクト比が間違っている可能性があります (openGL ウィンドウのサイズを変更すると、アスペクト比が維持されません)。
スケーリングする場合、x、y、およびzでスケーリングできます。各次元で同じ値でスケーリングすると、球のままになります。
ピクセル単位で測定した球のサイズが常に同じになるスケーリングを適用する場合は、ビューポートサイズの定義に基づいてスケーリングを行う必要があります。これらは、glViewport()に指定した引数です。
たとえば、「x」をスケーリングするときは、係数k / widthを使用します(幅はglViewportから取得されます)。球のサイズに応じて、必要に応じて定数「k」を選択します。
glGet()を使用してglViewport()で送信されたデータを要求することは可能ですが、OpenGLからのデータの読み取りは避ける必要があります。最悪の場合、パイプラインがフラッシュするのを待ちます。より良いアイデアは、glViewport()に何が使用されたかを覚えておくことです。
あなたは、過剰が古く、もはや推奨されていないことに気づいていますか?そして、そのglutsolidsphereは非推奨の固定機能パイプラインOpenGLに基づいていますか?