Sign in to follow this  
afsajghfd

[.net] unproject problem

Recommended Posts

afsajghfd    100
Hi all, I have a problem with Vector3.Unproject, but i would like to know what's the best way of calculate space coords if I'm using multiple views. When i was using just one view, to calculate space coords was very simple.

v3Position.Unproject(device.Viewport, device.Transform.Projection, device.Transform.View, Matrix.Identity)

But now I have two views (of different size) using
device = New Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, _
                 handle, createFlags, parametros)
dev2 = New SwapChain(device, parametros)

surface0 = device.GetBackBuffer(0, 0, BackBufferType.Mono)    
surface1 = dev2.GetBackBuffer(0, BackBufferType.Mono)   

To render I never calculate the device.viewport for each picturebox, but it draws well The problem its that I get wrong coords and I think this it's cause I need to store somewhere the parameters of unproject for the two views.
 Public Structure dataP
        Dim viewPort As Viewport
        Dim projection As Matrix
        Dim view As Matrix
 End Structure

Dim XY_Plane, ZX_Plane as dataP

In render

 Select Case tipoVista
            Case Plano.XY
                XY_Plane.view = Matrix.LookAtRH(eye, dest_eye, vector_up)
                Device.Transform.View = XY_Plane.view

                XY_Plane.projection = Matrix.OrthoRH(PictureBox.Width / zoom, PictureBox.Height / zoom, 1, 300)
                Device.Transform.Projection = XY_Plane.projection

            Case Plano.ZX
                ZX_Plane.view = Matrix.LookAtRH(eye, dest_eye, vector_up)
                Device.Transform.View = ZX_Plane.view

                ZX_Plane.projection = Matrix.OrthoRH(PictureBox.Width / zoom, PictureBox.Height / zoom, 1, 300)
                Device.Transform.Projection = ZX_Plane.projection

        End Select


then in the function to getCoords()
      Dim v3Position As Vector3
      Select Case tipoVista
            Case Plano.XY
                v3Position = New Vector3(cX, cY, 0)
                v3Position.Unproject(XY_Plane.viewPort, XY_Plane.projection, XY_Plane.view, Matrix.Identity)
                v3Position.X = Math.Round(CDec(v3Position.X), 2) 
                v3Position.Y = Math.Round(CDec(v3Position.Y), 2)

            Case Plano.ZX
                v3Position = New Vector3(cX, cY, 0)
                v3Position.Unproject(ZX_Plane.viewPort, ZX_Plane.projection, ZX_Plane.view, Matrix.Identity)
                v3Position.X = Math.Round(CDec(v3Position.X), 2)
                v3Position.Y = Math.Round(CDec(v3Position.Z), 2)

        End Select
        Return v3Position

(I set the viewport for each picturebox in the begginnig of the program) but still getting wrong coords :( any suggestions? [dead] thanks in advance

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this