SharpGL屏幕/光标坐标到模型视图

时间:2017-09-26 18:40:32

标签: c# wpf opengl graphics sharpgl

使用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)缩放等。

2 个答案:

答案 0 :(得分:0)

我不知道以前的答案是否对你有好处,但是BTW glVertex,glRotate,glBegin等都非常 GL函数(v1或v2)。您是否可以选择使用它们,或者您不知道使用opengl(VAO,VBO等)进行3D操作的v3或v4方法吗?

答案 1 :(得分:0)

您可以使用gluUnproject()并将其从鼠标回调中检索到的2D屏幕空间鼠标位置传递。此功能将返回您可以根据需要使用的3D世界空间位置。