Anmeldungsdatum: Jun 2011
Beiträge: 490
Benutzer-Bewertung:
|
Moin, ich bin mal wieder an der World2Screen am verzweifeln. Erstmal der code, danach erklär ich mein Problem.
CPP Code: void AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up) { float angle; static float sr, sp, sy, cr, cp, cy, cpi = (M_PI/180); angle = angles.y * cpi; sy = sin(angle); cy = cos(angle); angle = angles.x * cpi; sp = sin(angle); cp = cos(angle); angle = angles.z * cpi; sr = sin(angle); cr = cos(angle); if(forward) { forward->x = cp*cy; forward->y = cp*sy; forward->z = -sp; } if(right) { right->x = (-1*sr*sp*cy+-1*cr*-sy); right->y = (-1*sr*sp*sy+-1*cr*cy); right->z = -1*sr*cp; } if(up) { up->x = (cr*sp*cy+-sr*-sy); up->y = (cr*sp*sy+-sr*cy); up->z = cr*cp; } } //--------------------------------------------------------------------------- bool WorldToScreen ( Vector viewangles, Vector mypos, const Vector WorldLocation, float *fScreenX, float *fScreenY) { Vector vLocal, vTransForm, vForward, vRight, vUpward; AngleVectors(viewangles, &vForward, &vRight, &vUpward); vLocal = WorldLocation - mypos; vTransForm.x = vLocal.dotproduct(vRight); vTransForm.y = vLocal.dotproduct(vUpward); vTransForm.z = vLocal.dotproduct(vForward); if(vTransForm.z < 0.01) return false; *fScreenX = screencenter[0] + (screencenter[0]/vTransForm.z * (1/90)) * vTransForm.x; *fScreenY = screencenter[1] - (screencenter[1]/vTransForm.z * (1/90)) * vTransForm.y; return true; }
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: angle = angles.z * cpi; sr = sin(angle); cr = cos(angle); if(right) { right->x = (-1*sr*sp*cy+-1*cr*-sy); right->y = (-1*sr*sp*sy+-1*cr*cy); right->z = -1*sr*cp; } if(up) { up->x = (cr*sp*cy+-sr*-sy); up->y = (cr*sp*sy+-sr*cy); up->z = cr*cp; }
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
__________________
|