-
Автор темы
- #1
Мне нужен world to screen для apex.
Пробовал это но не пашит:
struct view_matrix_t {
float* operator[ ](int index) {
return matrix[index];
}
float matrix[4][4];
};
struct Vector3
{
float x, y, z;
};
Vector3 WorldToScreen(const Vector3 pos, view_matrix_t matrix) {
float _x = matrix[0][0] * pos.x + matrix[0][1] * pos.y + matrix[0][2] * pos.z + matrix[0][3];
float _y = matrix[1][0] * pos.x + matrix[1][1] * pos.y + matrix[1][2] * pos.z + matrix[1][3];
float w = matrix[3][0] * pos.x + matrix[3][1] * pos.y + matrix[3][2] * pos.z + matrix[3][3];
float inv_w = 1.f / w;
_x *= inv_w;
_y *= inv_w;
float x = screenX * .5f;
float y = screenY * .5f;
x += 0.5f * _x * screenX + 0.5f;
y -= 0.5f * _y * screenY + 0.5f;
return { x,y,w };
}
Пробовал это но не пашит:
struct view_matrix_t {
float* operator[ ](int index) {
return matrix[index];
}
float matrix[4][4];
};
struct Vector3
{
float x, y, z;
};
Vector3 WorldToScreen(const Vector3 pos, view_matrix_t matrix) {
float _x = matrix[0][0] * pos.x + matrix[0][1] * pos.y + matrix[0][2] * pos.z + matrix[0][3];
float _y = matrix[1][0] * pos.x + matrix[1][1] * pos.y + matrix[1][2] * pos.z + matrix[1][3];
float w = matrix[3][0] * pos.x + matrix[3][1] * pos.y + matrix[3][2] * pos.z + matrix[3][3];
float inv_w = 1.f / w;
_x *= inv_w;
_y *= inv_w;
float x = screenX * .5f;
float y = screenY * .5f;
x += 0.5f * _x * screenX + 0.5f;
y -= 0.5f * _y * screenY + 0.5f;
return { x,y,w };
}