
01.11.2021, 01:38
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Scar_
Как проверить, если точка на экране для рендера, аналог isPointOnScreen() на Lua
C++:
Код:
CVector2D
get_screen_coords
(
CVector vecWorld
)
{
float
x
,
y
,
z
;
double
fRecip
;
const
D3DXMATRIX m
{
reinterpret_cast
(
0xB6FA2C
)
}
;
unsigned
long
dwLenX
=
*
reinterpret_cast
(
0xC17044
)
;
unsigned
long
dwLenY
=
*
reinterpret_cast
(
0xC17048
)
;
x
=
(
vecWorld
.
z
*
m
.
_31
)
+
(
vecWorld
.
y
*
m
.
_21
)
+
(
vecWorld
.
x
*
m
.
_11
)
+
m
.
_41
;
y
=
(
vecWorld
.
z
*
m
.
_32
)
+
(
vecWorld
.
y
*
m
.
_22
)
+
(
vecWorld
.
x
*
m
.
_12
)
+
m
.
_42
;
z
=
(
vecWorld
.
z
*
m
.
_33
)
+
(
vecWorld
.
y
*
m
.
_23
)
+
(
vecWorld
.
x
*
m
.
_13
)
+
m
.
_43
;
fRecip
=
1.0
/
z
;
x
*=
static_cast
(
fRecip
*
dwLenX
)
;
y
*=
static_cast
(
fRecip
*
dwLenY
)
;
return
{
x
,
y
}
;
}
bool
is_point_on_screen
(
CVector vecWorld
)
{
const
D3DXMATRIX m
{
reinterpret_cast
(
0xB6FA2C
)
}
;
const
unsigned
long
dwLenX
=
*
reinterpret_cast
(
0xC17044
)
;
const
unsigned
long
dwLenY
=
*
reinterpret_cast
(
0xC17048
)
;
float
z
;
z
=
(
vecWorld
.
z
*
m
.
_33
)
+
(
vecWorld
.
y
*
m
.
_23
)
+
(
vecWorld
.
x
*
m
.
_13
)
+
m
.
_43
;
return
z
>=
1.0f
;
}
|
|
|