使用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)的比例等
這被稱爲對象選擇/對象選取,並且有許多關於它的文章。 https://en.wikibooks.org/wiki/OpenGL_Programming/Object_selection –
我的問題真的是有沒有辦法使用SharpGL庫達到這個目的 – James
是的,你做的事情是正常的OpenGL,但通過SharpGL包裝器訪問API調用。這就是SharpGL的工作原理......它不是一個真正的不同的API,它只是一個很薄的包裝器,可以讓你從C#中調用OpenGL函數。 –