使用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 :(得分:0)
我不知道以前的答案是否对你有好处,但是BTW glVertex,glRotate,glBegin等都非常旧 GL函数(v1或v2)。您是否可以选择使用它们,或者您不知道使用opengl(VAO,VBO等)进行3D操作的v3或v4方法吗?
答案 1 :(得分:0)
您可以使用gluUnproject()并将其从鼠标回调中检索到的2D屏幕空间鼠标位置传递。此功能将返回您可以根据需要使用的3D世界空间位置。