|
|
发表于 2006-11-26 23:36:00
|
显示全部楼层
Re:视图平移后,拾取操作出问题了,请教OpenGL拾取操作!!
可我的就没有问题
只不过是gluPerspective
摄像机类也全是glRotate glTranslate
vb.net
'得到射线的起点和终点
Public Shared Sub PickRay(ByVal CursorPos As Point2Di, ByRef RayStart As Point3D, ByRef RayEnd As Point3D)
Dim o1x, o1y, o1z As Double
Dim o2x, o2y, o2z As Double
Dim Viewport(0 To 3) As Integer
GL.glGetIntegerv(GL.GL_VIEWPORT, Viewport)
GL.gluUnProject(CursorPos.x, (Viewport(3) - CursorPos.y - 1), 0.0, Render3D.Frustum.mv_mat, Render3D.Frustum.p_mat, Viewport, o1x, o1y, o1z)
GL.gluUnProject(CursorPos.x, (Viewport(3) - CursorPos.y - 1), 1.0, Render3D.Frustum.mv_mat, Render3D.Frustum.p_mat, Viewport, o2x, o2y, o2z)
RayStart = ExpressVtr(o1x, o1y, o1z)
RayEnd = ExpressVtr(o2x, o2y, o2z)
End Sub
此过程获得从鼠标出去到远裁减平面的射线,和我写的东西的别的地方联系着,
Render3D.Frustum.mv_mat : modelview matrix
Render3D.Frustum.p_mat: projection matrix
Point3D : 结构体 ,表示空间点,向量
RayStart = ExpressVtr(o1x, o1y, o1z):相当于RayStart = New Point3D(o1x, o1y, o1z)
|
|