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

问题描述:

使用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)的比例等

+0

这被称为对象选择/对象选取,并且有许多关于它的文章。 https://en.wikibooks.org/wiki/OpenGL_Programming/Object_selection –

+1

我的问题真的是有没有办法使用SharpGL库达到这个目的 – James

+0

是的,你做的事情是正常的OpenGL,但通过SharpGL包装器访问API调用。这就是SharpGL的工作原理......它不是一个真正的不同的API,它只是一个很薄的包装器,可以让你从C#中调用OpenGL函数。 –

我不知道,如果以前的答案对你有好处,但BTW glVertex,glRotate,在glBegin等等都非常 GL功能(V1或V2)。是你选择使用它们还是不知道使用opengl(VAO,VBO等)做3D事物的v3或v4方法?

您可以使用gluUnproject()并将它从鼠标回调中检索到的2D屏幕空间鼠标位置传递给它。此函数将返回您可以随意使用的3D世界空间位置。