
18.07.2023, 14:53
|
|
Участник форума
Регистрация: 20.12.2021
Сообщений: 290
С нами:
2315345
Репутация:
48
|
|
Функцию позволяющая установить позицию камеры на 3д координаты
Сообщение от Спойлер
C++:
Код:
void
SFrotateCameraAt3D
(
CVector coords
)
{
CVector camera_orig
=
*
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
;
int
camera_mode
=
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
->
GetMode
(
)
;
CVector2D crosshair_offset
;
float
aspect_ratio
;
CVector vector
;
vector
=
{
(
camera_orig
.
fX
-
coords
.
fX
)
,
(
camera_orig
.
fY
-
coords
.
fY
)
,
(
camera_orig
.
fZ
-
coords
.
fZ
)
}
;
crosshair_offset
=
{
*
reinterpret_cast
(
0xB6EC10
)
,
*
reinterpret_cast
(
0xB6EC14
)
}
;
aspect_ratio
=
*
reinterpret_cast
(
0xC3EFA4
)
;
float
mult
;
float
idk_fX
,
idk_fZ
;
float
idk_afX
,
idk_afZ
;
mult
=
tan
(
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
->
GetFOV
(
)
*
0.5
*
0.01745
)
;
idk_fZ
=
(
3.14
-
atan2
(
1.0
,
mult
*
(
(
0.5
-
crosshair_offset
.
fX
)
*
(
2
/
aspect_ratio
)
)
)
)
;
idk_fX
=
(
3.14
-
atan2
(
1.0
,
mult
*
2
*
(
crosshair_offset
.
fY
-
0.5
)
)
)
;
if
(
!
(
camera_mode
==
53
||
camera_mode
==
55
)
)
{
idk_fX
=
3.14
/
2
;
idk_fZ
=
3.14
/
2
;
}
idk_afX
=
atan2
(
vector
.
fY
,
-
vector
.
fX
)
-
3.14
/
2
;
idk_afZ
=
atan2
(
sqrt
(
vector
.
fX
*
vector
.
fX
+
vector
.
fY
*
vector
.
fY
)
,
vector
.
fZ
)
;
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
->
SetDirection
(
(
idk_afZ
-
idk_fZ
)
,
(
idk_fX
-
idk_afX
)
)
;
//SF->getCLEO()->callOpcode("0A25: %f %f", (idk_afZ - idk_fZ), (idk_fX - idk_afX));
}
Сообщение от Спойлер
C++:
Код:
void
rotateCameraAt3D
(
CVector coords
)
{
CVector camera_orig
=
TheCamera
.
GetPosition
(
)
;
int
camera_mode
=
TheCamera
.
m_aCams
[
0
]
.
m_nMode
;
CVector2D crosshair_offset
;
float
aspect_ratio
;
CVector vector
;
vector
=
{
(
camera_orig
.
x
-
coords
.
x
)
,
(
camera_orig
.
y
-
coords
.
y
)
,
(
camera_orig
.
z
-
coords
.
z
)
}
;
crosshair_offset
=
{
*
reinterpret_cast
(
0xB6EC10
)
,
*
reinterpret_cast
(
0xB6EC14
)
}
;
aspect_ratio
=
*
reinterpret_cast
(
0xC3EFA4
)
;
float
mult
;
float
idk_fX
,
idk_fZ
;
float
idk_afX
,
idk_afZ
;
mult
=
tan
(
TheCamera
.
FindCamFOV
(
)
*
0.5
*
0.01745
)
;
idk_fZ
=
(
3.14
-
atan2
(
1.0
,
mult
*
(
(
0.5
-
crosshair_offset
.
x
)
*
(
2
/
aspect_ratio
)
)
)
)
;
idk_fX
=
(
3.14
-
atan2
(
1.0
,
mult
*
2
*
(
crosshair_offset
.
y
-
0.5
)
)
)
;
if
(
!
(
camera_mode
==
53
||
camera_mode
==
55
)
)
{
idk_fX
=
3.14
/
2
;
idk_fZ
=
3.14
/
2
;
}
idk_afX
=
atan2
(
vector
.
y
,
-
vector
.
x
)
-
3.14
/
2
;
idk_afZ
=
atan2
(
sqrt
(
vector
.
x
*
vector
.
x
+
vector
.
y
*
vector
.
y
)
,
vector
.
z
)
;
TheCamera
.
m_aCams
[
0
]
.
m_fHorizontalAngle
=
(
idk_fX
-
idk_afX
)
;
TheCamera
.
m_aCams
[
0
]
.
m_fVerticalAngle
=
(
idk_afZ
-
idk_fZ
)
;
}
|
|
|