OldSchoolHack

Register / Login English

World2Screen failed

icon Thread: World2Screen failed

Join Date: Jun 2011

Posts: 490

User-Rating:

12 positive
0 negative
Moin, ich bin mal wieder an der World2Screen am verzweifeln. Erstmal der code, danach erklär ich mein Problem.
CPP Code:
  1. void AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up)
  2. {
  3. float angle;
  4. static float sr, sp, sy, cr, cp, cy, cpi = (M_PI/180);
  5.  
  6. angle = angles.y * cpi;
  7. sy = sin(angle);
  8. cy = cos(angle);
  9. angle = angles.x * cpi;
  10. sp = sin(angle);
  11. cp = cos(angle);
  12. angle = angles.z * cpi;
  13. sr = sin(angle);
  14. cr = cos(angle);
  15.  
  16. if(forward)
  17. {
  18. forward->x = cp*cy;
  19. forward->y = cp*sy;
  20. forward->z = -sp;
  21. }
  22.  
  23. if(right)
  24. {
  25. right->x = (-1*sr*sp*cy+-1*cr*-sy);
  26. right->y = (-1*sr*sp*sy+-1*cr*cy);
  27. right->z = -1*sr*cp;
  28. }
  29.  
  30. if(up)
  31. {
  32. up->x = (cr*sp*cy+-sr*-sy);
  33. up->y = (cr*sp*sy+-sr*cy);
  34. up->z = cr*cp;
  35. }
  36. }
  37. //---------------------------------------------------------------------------
  38. bool WorldToScreen ( Vector viewangles, Vector mypos, const Vector WorldLocation, float *fScreenX, float *fScreenY)
  39. {
  40. Vector vLocal, vTransForm, vForward, vRight, vUpward;
  41.  
  42. AngleVectors(viewangles, &vForward, &vRight, &vUpward);
  43.  
  44. vLocal = WorldLocation - mypos;
  45.  
  46. vTransForm.x = vLocal.dotproduct(vRight);
  47. vTransForm.y = vLocal.dotproduct(vUpward);
  48. vTransForm.z = vLocal.dotproduct(vForward);
  49.  
  50. if(vTransForm.z < 0.01)
  51. return false;
  52.  
  53. *fScreenX = screencenter[0] + (screencenter[0]/vTransForm.z * (1/90)) * vTransForm.x;
  54. *fScreenY = screencenter[1] - (screencenter[1]/vTransForm.z * (1/90)) * vTransForm.y;
  55.  
  56. return true;
  57. }
So, nun habe ich aber das Problem, dass vTransform.x und vTransform.y immer 0 sind, und das ganze daran scheitert. Wenn man sich mal die AngleVectors Funktion anschaut, können die beiden ja auch nur 0 werden.

CPP Code:
  1. angle = angles.z * cpi;
  2. sr = sin(angle);
  3. cr = cos(angle);
  4. if(right)
  5. {
  6. right->x = (-1*sr*sp*cy+-1*cr*-sy);
  7. right->y = (-1*sr*sp*sy+-1*cr*cy);
  8. right->z = -1*sr*cp;
  9. }
  10.  
  11. if(up)
  12. {
  13. up->x = (cr*sp*cy+-sr*-sy);
  14. up->y = (cr*sp*sy+-sr*cy);
  15. up->z = cr*cp;
  16. }
angle.z ist der roll, und der ist für gewöhnlich in css 0. Dadurch werden sr und cr auch 0.
right->x = (-1*sr*sp*cy+-1*cr*-sy): (-1*0*sp*cy+-1*0*-sy) Folglich ist right.x 0 und so folgt es bei den anderen werten für right und up. Liegt es also an mienen Funktionen, oder ist das beabsichtigt, das right und up immer 0 sind? Falls es an mir liegt, was mache ich denn falsch?
Greetz Manta

__________________

http://www10.pic-upload.de/30.04.12/j9dbc34bxdg.jpg