2017-09-26 59 views
0

使用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函數。 –

回答

0

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

0

您可以使用gluUnproject()並將它從鼠標回調中檢索到的2D屏幕空間鼠標位置傳遞給它。此函數將返回您可以隨意使用的3D世界空間位置。