Показать сообщение отдельно

  #5572  
Старый 01.11.2021, 01:38
kin4stat
Флудер
Регистрация: 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
;
}
 
Ответить с цитированием