1

SharpGL を使用して、画面のカーソル位置をモデル ビューの位置に戻すことは可能ですか (つまり、レイキャスト関数を作成します)?

私が取り組んできた例は、次のようなものです。

private void OpenGLControl_OpenGLDraw(object sender, SharpGL.OpenGLEventArgs args)
{

    OpenGL gl = args.OpenGL;
    gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
    gl.LoadIdentity(); 

    gl.Translate(0.0f, 0.0f, -6.0f);
    gl.Rotate(rotatePyramid, 0.0f, 1.0f, 0.0f);

    gl.Begin(OpenGL.GL_TRIANGLES);

        gl.Color(1.0f, 0.0f, 0.0f);        
        gl.Vertex(0.0f, 1.0f, 0.0f);    
        gl.Color(0.0f, 1.0f, 0.0f);        
        gl.Vertex(-1.0f, -1.0f, 1.0f);    
        gl.Color(0.0f, 0.0f, 1.0f);        
        gl.Vertex(1.0f, -1.0f, 1.0f);    

        gl.Color(1.0f, 0.0f, 0.0f);        
        gl.Vertex(0.0f, 1.0f, 0.0f);    
        gl.Color(0.0f, 0.0f, 1.0f);        
        gl.Vertex(1.0f, -1.0f, 1.0f);    
        gl.Color(0.0f, 1.0f, 0.0f);        
        gl.Vertex(1.0f, -1.0f, -1.0f);    

        gl.Color(1.0f, 0.0f, 0.0f);        
        gl.Vertex(0.0f, 1.0f, 0.0f);    
        gl.Color(0.0f, 1.0f, 0.0f);        
        gl.Vertex(1.0f, -1.0f, -1.0f);    
        gl.Color(0.0f, 0.0f, 1.0f);        
        gl.Vertex(-1.0f, -1.0f, -1.0f);    

        gl.Color(1.0f, 0.0f, 0.0f);        
        gl.Vertex(0.0f, 1.0f, 0.0f);    
        gl.Color(0.0f, 0.0f, 1.0f);        
        gl.Vertex(-1.0f, -1.0f, -1.0f);    
        gl.Color(0.0f, 1.0f, 0.0f);        
        gl.Vertex(-1.0f, -1.0f, 1.0f);    

    gl.End();
    gl.Flush();
}

SharpGL と上記のサンプルで示したアプローチを使用して、レイキャスト/マウス選択を実装することは可能ですか? または、これを達成するには、OpenGL の仕組み (マトリックスを手動で管理するなど) をさらに深く掘り下げる必要がありますか?

編集: 明確にするために、2D カーソル位置の 3D 解釈を取得しようとしています。たぶん、パースペクティブ(w)スケーリングなどを通じて。

4

2 に答える 2