Looks cool!
 Home
 » Viewing Profile: Posts: GameCodingNinja
GameCodingNinja
Member Since 18 Aug 2005Offline Last Active Mar 30 2016 05:19 PM
About Me
Software engineering, engine & game development, game design and art.
At one time I used to be an artist. I grew up with the desire draw comics or illustrate science fiction/fantasy with oil paints. Since that never worked out, I turned to software engineering.
I work as a software engineer for a game company that produces games for casinos.
The below web page link is my web site with all my screen savers and apps I wrote a long time ago. Try one.
Community Stats
 Group Members
 Active Posts 313
 Profile Views 5,323
 Submitted Links 0
 Member Title Member
 Age Age Unknown
 Birthday Birthday Unknown

Gender
Male

Location
Keller, Texas
Posts I've Made
In Topic: Killing Room
06 March 2016  10:06 AM
In Topic: Translate 2D mouse position to place an object in 3D space
24 February 2016  09:38 AM
Read: http://mathworld.wolfram.com/Tangent.html  look for the big triangle. Remember SOHCAHTOA.
tan(theta), where theta = pi/8, gives you the rise over run. When the camera is 1 unit away from the origin, the run is 1. The rise goes on to give you half of the image plane width.
That helps because I didn't know what the tangent was for.
I've analyzed the code and simplified it. Below is the final modified version. Let's look at it line by line.
First useless line.
const float pi = 4.0f*atanf(1.0f);
All this does is give us the value of PI. math.h has a #define you can use so this is unnecessary. As you'll see in the finial code, many things were unnecessary.
Next line.
const float aspect = (float)(m_renderbufferWidth) / (float)(m_renderbufferHeight);
This give us the aspect ratio of the screen. Not sure why this is needed for the x coordinate and not the y. I think it's magic.
Next Two lines.
const float fx = 2.0f * ((float)(x) / (float)(m_renderbufferWidth  1))  1.0f; const float fy = 2.0f * ((float)(y) / (float)(m_renderbufferHeight  1))  1.0f;
This converts screen coordinates from a top/left orientation to a center screen coordinates but there's a little more to this then that.
1) Subtracting the width and height by one. The reason you do this is because resolution sizes are usually all even numbers. For example, a resolution of 1280x720 there is no center pixel or a pixel at 0. The other reason this could be is that you need a value of base 0, as if this was an array and w/h represents the total number of elements.
2) x/y divied by w/h. This gives you a normalize value of the point on your screen. In other words, a value from 0 to 1.
3) 2.0f *; not entirely sure what this is doing and why it is needed.
4) The last  1.0f flips the sign.
Second useless line
const float y_fov = pi/4; // pi/4 radians = 45 degrees
This takes PI and divides it by 4 to give us 45 degrees in radians. This is unnecessary.
Modified line.
const float tangent = tan(y_fov / 2.0f);
This divides the 45 degrees by 2 to give use 22.5 degrees in radians. This can be simplified by plopping a number in tan.
I know what the rest is doing, I just don't understand why it works.
/************************************************************************ * desc: Convert 2d screen coordinates to 3D perspective space ************************************************************************/ void Convert2Dto3D( float & destX, float & destY, float x, float y, float width, float height ) { const float aspect = width / height; // Convert upper left 0,0 to center screen 0,0 coordinates const float fx = (2.0f * (x / (width  1)))  1.0f; const float fy = (2.0f * (y / (height  1)))  1.0f; // (pi/4 radians = 45 degrees / 2) or ((pi/4) / 2)) const float tangent = tan( 0.392699082 ); // Project x,y to a z plane of 1 destX = aspect * tangent* fx; destY = tangent * fy; } // Convert2Dto3D
In Topic: Translate 2D mouse position to place an object in 3D space
20 February 2016  05:41 PM
done! You have your up vote.
I wish I could look at this code and know what it's doing. If anyone can explain it, please do.
In Topic: Translate 2D mouse position to place an object in 3D space
19 February 2016  10:48 AM
Thank you guys for your help!
Taby, thank you for posting the code. It works GREAT!
All I had to do was multiply the final X and Y values by a positive z order.
I couldn't be more happy! There's no way I would have been able to write that code. Taby, you are Awesome!
In Topic: OpenGL Projection Matrix Clarifications
19 December 2015  03:40 PM
(Why does everyone say that the camera is at 0,0,0 then?!)
Saying the camera is at 0,0,0 is a bit misleading. In computer graphics, everything is a vector and vector math requires that the origin be 0. It's no more complicated then that. The camera, which is nothing more then a matrix, is the translation and rotation from 0,0,0.