Sign in to follow this  
BinaryDeadBeef

glm::unProject alignment error

Recommended Posts

I am trying to create a dynamic UI that operates in my scene graph. It is comprised of planes in 2D space, that I wish to be able to interact with and move about.

 

To test this I have been trying to get the location of a 2D plane in 3D space, facing the camera -5.0f units away to align with the positon of the mouse ( from this I can then click and drag UI elements, interact with elements etc.), however, I am unable to align the place correctly, as it overshoots the current location of the mouse pointer.

 

I have googled extensively and experimented, but to no avail.

 

Here is my mouse unproject code: 

 

void mouse::unProjectMouse(float width, float height, camera* viewportCamera)
{
	if(NULL == viewportCamera)
	{
		std::cout<<CNTRLCALL<<"camera failed! failed to un-project mouse";
	} else {

		GLfloat pixelDepth;
		glReadPixels((GLint)mouseX, (GLint)mouseY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &pixelDepth);

		glm::vec4 viewport = glm::vec4(0.0f, 0.0f, width, height);
		glm::mat4 tmpView = viewportCamera->updateView();
		glm::mat4 tmpProj = viewportCamera->updateProjection();
		glm::vec3 screenPos = glm::vec3(mouseX, height-mouseY, pixelDepth);
	
	
		glm::vec3 worldPos = glm::unProject(screenPos, tmpView, tmpProj, viewport);

		//worldPos = worldPos / (worldPos.z * -1.0f);

		mouseWorldX = worldPos.x;
		mouseWorldY = worldPos.y;
		mouseWorldZ = worldPos.z;
	}
	
}

 

and the code from the camera for the View and Projection:

glm::mat4 camera::updateProjection(){return glm::perspective(m_fieldOfView, m_aspectRatio, m_nearPlane, m_farPlane);}
glm::mat4 camera::updateView(){return camOrientation() * glm::translate(glm::mat4(), -m_cameraPosition);}

 

 

Many thanks

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