Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


glm::unProject alignment error


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 BinaryDeadBeef   Members   -  Reputation: 103

Like
0Likes
Like

Posted 29 March 2013 - 02:59 PM

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



Sponsor:

#2 Geometrian   Crossbones+   -  Reputation: 1583

Like
0Likes
Like

Posted 30 March 2013 - 12:47 AM

I think your glReadPixels might be upsidedown.


And a Unix user said rm -rf *.* and all was null and void...|There's no place like 127.0.0.1|The Application "Programmer" has unexpectedly quit. An error of type A.M. has occurred.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS