¿Cómo rotar la camera alnetworkingedor de algún punto?

Tengo pantalla con dimensiones: 800x600 . El object que quiero rotar está ubicado en (400,300, -50) – centro de la pantalla. Proyección ortogonal: Plano cercano – 0.1f, plano lejano – 1000.0f izquierdo – 0, inferior – 0, derecho – 800, superior – 600

Cámara: position en (0,0,0) mira (0,0,-50) en el vector (0,1,0)

Ahora lo que estoy haciendo para rotar es calcular la X de "mirar" usando: 0 + width * cos(A) . Y sigue siendo el mismo (0). Z se calcula usando: -50 + width * sin(A) .

Ahora el problema que estoy enfrentando es que después de cierto ángulo el object comienza a desaparecer y no gira alnetworkingedor del object. ¿Cual puede ser el problema?

La image de un punto A bajo una rotation alnetworkingedor de otro punto B (una rotation afín si B no es el origen del espacio) es A ', con

 A' = B + R*(AB) 

donde R es la matriz de la rotation lineal asociada.

Por ejemplo, en la dimensión 2, digamos que quiere rotar A = (1,0) alnetworkingedor de B = (1,1) 90 grados en sentido antihorario. Eso rendirá (2,1). Haz una foto si es necesario. Y, si llamamos a R la matriz de la rotation lineal en sentido contrario a las agujas del reloj de 90 grados, tenemos

 R = (0 -1) (1 0) 

y

 (1,1) + R*( (1,0) - (1,1) ) = (1,1) + R*(0,-1) = (1,1) + (1,0) = (2,1) 

Ahora, la solución a su problema en realidad depende de su implementación de la geometry mundial y de la camera. Puede rotar su camera alnetworkingedor del punto B o puede "girar el mundo" alnetworkingedor de la camera por el inverso de la rotation anterior (como es habitual en la matriz "ProjectionMatrix * CameraMatrix * ModelMatrix * positionOfVertex" de un sombreador de vértices, si es OpenGL o DirectX que estás usando).