# cathode26

Member

6

134 Neutral

• Rank
Newbie
1. ## Rotation in a sub node.

The actual solution...  I solved it..  This is how  you rotate properly in world space.  If you look closely I had switched the order of the multiplication during the calculation of the world transform.   D3DXMATRIX worldRotation(*(node->rn_worldMatrix)); D3DXMATRIX worldTranslation; D3DXMatrixIdentity(&worldTranslation); worldTranslation(3,0) = worldRotation(3,0); worldTranslation(3,1) = worldRotation(3,1); worldTranslation(3,2) = worldRotation(3,2); worldRotation(3,0) = 0; worldRotation(3,1) = 0; worldRotation(3,2) = 0; D3DXMATRIX worldTransformation = worldRotation*rotationMat*worldTranslation; localTransformation = worldTransformation*parentInverseWorld;
2. ## Rotation in a sub node.

This is the code I tried to use for the world rotation of the sub nodes but this gives similar results to the parent code,  but worse because there is eventually some distortion and my axes eventually stops being world for the child node when the parent has not even been rotated.     D3DXMATRIX worldRotation(*(node->rn_worldMatrix)); D3DXMATRIX worldTranslation; D3DXMatrixIdentity(&worldTranslation); worldTranslation(3,0) = worldRotation(3,0); worldTranslation(3,1) = worldRotation(3,1); worldTranslation(3,2) = worldRotation(3,2); worldRotation(3,0) = 0; worldRotation(3,1) = 0; worldRotation(3,2) = 0; D3DXMATRIX worldTransformation = rotationMat*worldRotation*worldTranslation; //I need to convert it to local FLOAT determinant; D3DXMATRIX parentInverseWorld; D3DXMatrixInverse(&parentInverseWorld, &determinant, &parentWorldTransform); localTransformation = worldTransformation*parentInverseWorld;     I also tried changing the coordinate space of the rotation into the local coordinate space and applying the rotation there.  With similar results, I can rotate the child in world space if the parent is not rotated.   D3DXMATRIX localRotation((*(node->rn_matrix))); D3DXMATRIX localTranslation; D3DXMatrixIdentity(&localTranslation); localTranslation(3,0) = localRotation(3,0); localTranslation(3,1) = localRotation(3,1); localTranslation(3,2) = localRotation(3,2); localRotation(3,0) = 0; localRotation(3,1) = 0; localRotation(3,2) = 0; D3DXMATRIX deltaRotationLocal = rotationMat*parentInverseWorld; localTransformation = localRotation*deltaRotationLocal*localTranslation;
3. ## Rotation in a sub node.

I am making a tool that rotates a model.  This tool needs to not care which direction the model is facing.  It just needs to rotate on world coordinate.  Like a rotate tool you would use in 3d studio max.  The problem comes up after the parent node has been rotated.  When the parent is not aligned with the world the children rotate on a different axis.   Rotating the parent is fine.  Rotating just the child is fine. But if the parent is not on the identity for the axis then the child is rotated incorrectly.   This is the code I use on the parent.   if(dz == 0 && dy == 0) D3DXMatrixRotationX(&rotationMat, D3DXToRadian(node->rn_eulerOffset->x)); else if(dx == 0 && dz == 0) D3DXMatrixRotationY(&rotationMat, D3DXToRadian(node->rn_eulerOffset->y)); else if(dx == 0 && dy == 0) D3DXMatrixRotationZ(&rotationMat, D3DXToRadian(node->rn_eulerOffset->z)); if(node->parent == NULL) { D3DXMATRIX localRotation(*node->rn_matrix); D3DXMATRIX localTranslation; D3DXMatrixIdentity(&localTranslation); localTranslation(3,0) = localRotation(3,0); localTranslation(3,1) = localRotation(3,1); localTranslation(3,2) = localRotation(3,2); localRotation(3,0) = 0; localRotation(3,1) = 0; localRotation(3,2) = 0; localTransformation = localRotation*rotationMat*localTranslation; }     I tried to remove the parent rotation from the child before rotating and to use world space but I didnt have much luck.   Thanks ahead of time for any help.
4. ## I am having trouble with intersecting a ray and sprite

Hi everyone, I am trying to do collision detection. I am: clicking on the screen returning the point that I clicked on turning the point into a ray turning 4 points into a plane, the 4 points of a sprite seeing if the ray intersects with the plane I have never done this before and I have been looking on the net for how to do it. Something is going wrong. If anyone can point me to a correct example or if they see something wrong can you please help me. The idea of how to do it came from this example http://answers.google.com/answers/threadview?id=18979 Thanks in advance to anyone that sees what I am doing wrong. -Vincent int mousex; //your current mouse positions int mousey; //Calculate a picking ray from the mouse positions //I am using directX //i need to get the projection matrix D3DXMATRIX proj; g_d3ddevice->GetTransform(D3DTS_PROJECTION, &proj); //I need the viewport D3DVIEWPORT9 vp; g_d3ddevice->GetViewport(&vp); //this will get me my points p.x = (((2.0f*x) / vp.Width) - 1.0f) / proj(0,0); p.y = (((-2.0f*y) / vp.Height) + 1.0f) / proj(1,1); p.z = 1.0f; //Ray is a struct containing 2, 3d vectors, the origin o and the direction d Ray myRay; myRay.o = D3DXVECTOR3(g_nScreenWidth/2.0f, 384.0f, -350.0f); myRay.d = D3DXVECTOR3(p.x, p.y, p.z); //I need to transform the ray from view space to world space to do that I need //to get the inverse of the view transformation matrix D3DXMATRIX view; g_d3ddevice->GetTransform(D3DTS_VIEW, &view); //inverse of the view matrix D3DXMATRIX vI; //viewInverse D3DXMatrixInverse(&vI, 0, &view) Ray tRay; //temp ray tRay.d.x = myRay->d.x*vI->_11 + myRay->d.y*vI->_21 + myRay->d.z*vI->_31; tRay.d.y = myRay->d.x*vI->_12 + myRay->d.y*vI->_22 + myRay->d.z*vI->_32; tRay.d.z = myRay->d.x*vI->_13 + myRay->d.y*vI->_23 + myRay->d.z*vI->_33; myRay->o.x = vI->_41; myRay->o.y = vI->_42; myRay->o.z = vI->_43; myRay->d.x = tRay.d.x; myRay->d.y = tRay.d.y; myRay->d.z = tRay.d.z; //Now my ray needs to be transformed from world to object space D3DXMATRIX world; device->GetTransform(D3DTS_WORLD, &world); D3DXMATRIX matWorldInverse; D3DXMatrixInverse(&matWorldInverse,NULL,&world); D3DXVECTOR3 rayObjOrigin,rayObjDirection; D3DXVec3TransformCoord(&myRay.o,&myRay.o,&matWorldInverse); D3DXVec3TransformNormal(&myRay.d,&myRay.d,&matWorldInverse); D3DXVec3Normalize(&myRay.d,&myRay.d); //So now my ray is finished //I am trying to click on barney, barney is a sprite //Created using this function /* ID3DXSprite::Draw Adds a sprite to the list of batched sprites. HRESULT Draw( LPDIRECT3DTEXTURE9 pTexture, CONST RECT * pSrcRect, CONST D3DXVECTOR3 * pCenter, CONST D3DXVECTOR3 * pPosition, D3DCOLOR Color ); */ //barney is a 256x256 image so I gave him a bounding square //The position he is originally given in the draw function is this // x = 256 /2.0f; // y = 256; // z = 500; // and I think that these points are the top left corner of the image // so I define these vectors to represent the image D3DXVECTOR3 barneyP1 = D3DXVECTOR3(128, 256, 500); D3DXVECTOR3 barneyP2 = D3DXVECTOR3(384, 256, 500); D3DXVECTOR3 barneyP3 = D3DXVECTOR3(384, 0, 500); D3DXVECTOR3 barneyP4 = D3DXVECTOR3(128, 0, 500); //defining these points in a clock wise order as a bounding rectangle //for barney //Now I am going to turn these vectors into a plane //I saw an example saying to use cramer's rule float A = barneyP1.y * (barneyP2.z - barneyP3.z) + barneyP2.y * (barneyP3.z - barneyP1.z) + barneyP3.y * (barneyP1.z - barneyP2.z); float B = barneyP1.z * (barneyP2.x - barneyP3.x) + barneyP2.z * (barneyP3.x - barneyP1.x) + barneyP3.z * (barneyP1.x - barneyP2.x); float C = barneyP1.x * (barneyP2.y - barneyP3.y) + barneyP2.x * (barneyP3.y - barneyP1.y) + barneyP3.x * (barneyP1.y - barneyP2.y); float D = -barneyP1.x * (barneyP2.y * barneyP3.z - barneyP3.y * barneyP2.z) - barneyP2.x * (barneyP3.y * barneyP1.z - barneyP1.y * barneyP3.z) - barneyP3.x * (barneyP1.y * barneyP2.z - barneyP2.y * barneyP1.z); //then create the plane and substitute the ray into plane and solve for t //o is for origin //d is for direction float t = -(A * myRay.o.x + B*myRay.o.y + C*myRay.o.z + D) / (A*myRay.d.x + B*myRay.d.y + C*myRay.d.z); //then get your intersection point D3DXVECTOR3 intersectionPoint = D3DXVECTOR3((myRay.o.x) + (myRay.d.x * t), (myRay.o.y) + (myRay.d.y * t), (myRay.o.z) + (myRay.d.z * t)); //Now we need to trim the x and y axis on the plane and test for intersection //we can do this using //create a vector from A to the Intersection //create a vector from C to the Intersection D3DXVECTOR3 V3 = intersectionPoint - barneyP1; D3DXVECTOR3 V4 = intersectionPoint - barneyP3; //a vector from A to B //a vector from C to D D3DXVECTOR3 V1 = barneyP2 - barneyP1; D3DXVECTOR3 V2 = barneyP4 - barneyP3; //Normalize those vectors D3DXVec3Normalize(&V1,&V1); D3DXVec3Normalize(&V2,&V2); D3DXVec3Normalize(&V3,&V3); D3DXVec3Normalize(&V4,&V4); //dot product them float a = D3DXVec3Dot(&V1,&V4); float b = D3DXVec3Dot(&V3,&V5); if(a>0 && b>0) return true //for intersection to be true
5. ## Cost / Time analysis in Casino Games

Thanks everyone for responding, I really appreciate your input. I know the job is out of my league. I am posting this because I really dont want to give the job up. I am asking for the knowledge of people that have done this project already so I can get an idea on how these projects are managed. If anyone knows of any websites or books that can teach me how to take on a task like this please let me know. Dont worry about it being out of my league. :) Thanks -Vince
6. ## Cost / Time analysis in Casino Games

I am a computer science student, and I have 1 year experience in programming video games in DirectX and C++. I recently applied for a job at an up and coming casino game company. They outsourced all of the software development to other companies and they dont have the rights to any of the source code. They dont have a lot of money and they dont want to outsource for their software anymore. They have told me that they need a jack of all trades, programmer, director, and manager. They have told me to figure out how long I need to develop a video keno game and how many employees I think I need. I have no experience developing a game from the ground up, but I have access to a game engine that I have used in the past. My job would be converting the engine from C++ to C#, or possibly trying to just port it over using a dll because the casino machines are set up for C#. The next job would be making the keno game. It is going to be all 2D with billboarding. It is going to need to be really pretty, using shaders and cool lighting. But it is just a keno game. I know that no one can give a solid estimate on time. But, if you were a programmer with 3 years experience in C++ and 1 year experience in game programming how long do you think it would take you to do it. I would also have help from my game programming professor because he is thinking about doing consulting on the game. Also I need to tell them how much I want as an hourly wage, I was going to say 15, but some people tell me 30, others say 25, and I kind of want to say 20 an hour. -Vince P.S. I am very very afraid