-
Автор темы
- #1
Я скорее всего нашел не ту матрицу либо не полноценную....
Но, спросить стоит. Нашел видовую матрицу, позицию игрока X-Y-Z. И перевел и в screen pos.
С помощью
Result:
Что могло пойти не так?
Решено: PushMatrix and PopMatrix.
Но, спросить стоит. Нашел видовую матрицу, позицию игрока X-Y-Z. И перевел и в screen pos.
С помощью
C++:
bool WorldToScreen(VEC3 pos, VEC2* screen, float matrix[16], int windowWidth, int windowHeight)
{
// Matrix-vector Product, multiplying world(eye) coordinates by projection matrix = clipCoords
VEC4 clipCoords;
clipCoords.x = pos.x * matrix[0] + pos.y * matrix[4] + pos.z * matrix[8] + matrix[12];
clipCoords.y = pos.x * matrix[1] + pos.y * matrix[5] + pos.z * matrix[9] + matrix[13];
clipCoords.z = pos.x * matrix[2] + pos.y * matrix[6] + pos.z * matrix[10] + matrix[14];
clipCoords.w = pos.x * matrix[3] + pos.y * matrix[7] + pos.z * matrix[11] + matrix[15];
if (clipCoords.w < 0.1f)
return false;
// perspective division, dividing by clip.W = Normalized Device Coordinates
VEC3 NDC;
NDC.x = clipCoords.x / clipCoords.w;
NDC.y = clipCoords.y / clipCoords.w;
NDC.z = clipCoords.z / clipCoords.w;
screen->x = (windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2);
screen->y = -(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2);
return true;
}
Что могло пойти не так?
Решено: PushMatrix and PopMatrix.
Последнее редактирование: