1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
//
// Generated By: dol2asm
// Translation Unit: J3DUClipper
//
#include "JSystem/J3DU/J3DUClipper.h"
#include "math.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80273778-8027378C 26E0B8 0014+00 0/0 1/1 0/0 .text init__11J3DUClipperFv */
void J3DUClipper::init() {
mNear = 1.0f;
mFar = 100000.0f;
}
/* ############################################################################################## */
/* 8027378C-802738FC 26E0CC 0170+00 0/0 3/3 4/4 .text calcViewFrustum__11J3DUClipperFv */
void J3DUClipper::calcViewFrustum() {
static const f32 unused[3] = {0.0f};
f32 f0 = tan(0.5f * mFovY * 0.01745329238474369f);
f32 f4 = mNear * f0;
f32 f5 = mAspect * f4;
Vec tmp1 = {-f5, -f4, -mNear};
Vec tmp2 = {-f5, f4, -mNear};
Vec tmp3 = {f5, f4, -mNear};
Vec tmp4 = {f5, -f4, -mNear};
VECCrossProduct(&tmp2, &tmp1, &_04);
VECCrossProduct(&tmp3, &tmp2, &_10);
VECCrossProduct(&tmp4, &tmp3, &_1C);
VECCrossProduct(&tmp1, &tmp4, &_28);
VECNormalize(&_04, &_04);
VECNormalize(&_10, &_10);
VECNormalize(&_1C, &_1C);
VECNormalize(&_28, &_28);
}
/* 802738FC-80273A44 26E23C 0148+00 0/0 3/3 2/2 .text clip__11J3DUClipperCFPA4_Cf3Vecf */
int J3DUClipper::clip(f32 const (*param_0)[4], Vec param_1, f32 param_2) const {
Vec vec1;
MTXMultVec(param_0, ¶m_1, &vec1);
if (-vec1.z < mNear - param_2) {
return 1;
}
if (-vec1.z > mFar + param_2) {
return 1;
}
if (vec1.x * _04.x + vec1.y * _04.y + vec1.z * _04.z > param_2) {
return 1;
}
if (vec1.x * _10.x + vec1.y * _10.y + vec1.z * _10.z > param_2) {
return 1;
}
if (vec1.x * _1C.x + vec1.y * _1C.y + vec1.z * _1C.z > param_2) {
return 1;
}
if (vec1.x * _28.x + vec1.y * _28.y + vec1.z * _28.z > param_2) {
return 1;
}
return 0;
}
/* ############################################################################################## */
/* 80273A44-80273E08 26E384 03C4+00 0/0 3/3 2/2 .text clip__11J3DUClipperCFPA4_CfP3VecP3Vec */
int J3DUClipper::clip(f32 const (*param_1)[4], Vec* param_2, Vec* param_3) const {
s32 local_98[6];
for (int i = 0; i < 6; i++) {
local_98[i] = 0;
}
Vec local_80[8];
local_80[0].x = param_3->x;
local_80[0].y = param_3->y;
local_80[0].z = param_2->z;
local_80[1].x = param_3->x;
local_80[1].y = param_3->y;
local_80[1].z = param_3->z;
local_80[2].x = param_2->x;
local_80[2].y = param_3->y;
local_80[2].z = param_3->z;
local_80[3].x = param_2->x;
local_80[3].y = param_3->y;
local_80[3].z = param_2->z;
local_80[4].x = param_3->x;
local_80[4].y = param_2->y;
local_80[4].z = param_2->z;
local_80[5].x = param_3->x;
local_80[5].y = param_2->y;
local_80[5].z = param_3->z;
local_80[6].x = param_2->x;
local_80[6].y = param_2->y;
local_80[6].z = param_3->z;
local_80[7].x = param_2->x;
local_80[7].y = param_2->y;
local_80[7].z = param_2->z;
for (u32 i = 0; i < 8; i++) {
Vec vec1;
MTXMultVec(param_1, local_80 + i, &vec1);
s32 r4 = 0;
if (-vec1.z < mNear) {
local_98[4]++;
r4 = 1;
}
if (-vec1.z > mFar) {
local_98[5]++;
r4++;
}
if (vec1.x * _04.x + vec1.y * _04.y + vec1.z * _04.z > 0.0f) {
local_98[0]++;
r4++;
}
if (vec1.x * _10.x + vec1.y * _10.y + vec1.z * _10.z > 0.0f) {
local_98[1]++;
r4++;
}
if (vec1.x * _1C.x + vec1.y * _1C.y + vec1.z * _1C.z > 0.0f) {
local_98[2]++;
r4++;
}
if (vec1.x * _28.x + vec1.y * _28.y + vec1.z * _28.z > 0.0f) {
local_98[3]++;
r4++;
}
if (r4 == 0) {
return 0;
}
}
if (local_98[0] == 8) {
return 1;
}
if (local_98[2] == 8) {
return 1;
}
if (local_98[1] == 8) {
return 1;
}
if (local_98[3] == 8) {
return 1;
}
if (local_98[4] == 8) {
return 1;
}
if (local_98[5] == 8) {
return 1;
}
return 0;
}
/* ############################################################################################## */
/* 8039A984-8039A99D 026FE4 0019+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A984 = " J3DUClipper::mFovy = %f";
/* 8039A99D-8039A9B8 026FFD 001B+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A99D = " J3DUClipper::mAspect = %f";
/* 8039A9B8-8039A9D1 027018 0019+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A9B8 = " J3DUClipper::mNear = %f";
/* 8039A9D1-8039A9F0 027031 0018+07 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A9D1 = " J3DUClipper::mFar = %f";
/* @stringBase0 padding */
static char const* const pad_8039A9E9 = "\0\0\0\0\0\0";
/* 8039A984-8039A984 026FE4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|