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
|
/**
* m_Do_lib.cpp
* View and Projection Matrix Helper Functions
*/
#include "m_Do/machine.h" // IWYU pragma: keep
#include "m_Do/m_Do_lib.h"
#include "m_Do/m_Do_graphic.h"
#include "JSystem/J3DGraphBase/J3DMatBlock.h"
#include "SSystem/SComponent/c_math.h"
#include "d/d_com_inf_game.h"
#include <types.h>
u32 mDoLib_setResTimgObj(ResTIMG const* i_img, GXTexObj* o_texObj, u32 tlut_name,
GXTlutObj* o_tlutObj) {
if (i_img->indexTexture) {
JUT_ASSERT(44, o_tlutObj != NULL);
GXInitTlutObj(o_tlutObj, (void*)((u8*)i_img + i_img->paletteOffset),
(GXTlutFmt)i_img->colorFormat, (u16)i_img->numColors);
GXInitTexObjCI(o_texObj, (void*)((u8*)i_img + i_img->imageOffset), i_img->width, i_img->height,
(GXCITexFmt)i_img->format, (GXTexWrapMode)i_img->wrapS,
(GXTexWrapMode)i_img->wrapT, i_img->mipmapCount > 1 ? GX_TRUE : GX_FALSE, tlut_name);
} else {
GXInitTexObj(o_texObj, (void*)((u8*)i_img + i_img->imageOffset), i_img->width, i_img->height,
(GXTexFmt)i_img->format, (GXTexWrapMode)i_img->wrapS, (GXTexWrapMode)i_img->wrapT,
i_img->mipmapCount > 1 ? GX_TRUE : GX_FALSE);
}
GXInitTexObjLOD(o_texObj, (GXTexFilter)i_img->minFilter, (GXTexFilter)i_img->magFilter,
(f32)i_img->minLOD * 0.125f, (f32)i_img->maxLOD * 0.125f,
(f32)i_img->LODBias * 0.01f, (s32)i_img->biasClamp, (s32)i_img->doEdgeLOD,
(GXAnisotropy)i_img->maxAnisotropy);
return i_img->indexTexture;
}
J3DUClipper mDoLib_clipper::mClipper;
f32 mDoLib_clipper::mSystemFar;
f32 mDoLib_clipper::mFovyRate;
void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) {
mClipper.setFovy(fovy);
mClipper.setAspect(aspect);
mClipper.setNear(near);
mClipper.setFar(far);
mSystemFar = far;
mClipper.calcViewFrustum();
s16 tmp = DEG2S(fovy);
mFovyRate = cM_scos(tmp) / cM_ssin(tmp);
}
void mDoLib_project(Vec* src, Vec* dst) {
if (dComIfGd_getView() == NULL) {
dst->x = 0.0f;
dst->y = 0.0f;
dst->z = 0.0f;
return;
}
{ int unused; }
Vec multVec;
cMtx_multVec(*dComIfGd_getProjViewMtx(), src, &multVec);
f32 calcFloat = (src->x * (*dComIfGd_getProjViewMtx())[3][0]) +
(src->y * (*dComIfGd_getProjViewMtx())[3][1]) +
(src->z * (*dComIfGd_getProjViewMtx())[3][2]) +
(*dComIfGd_getProjViewMtx())[3][3];
if (multVec.z >= 0.0f) {
multVec.z = 0.0f;
}
if (calcFloat <= 0.0f) {
if (calcFloat == 0.0f) {
dst->z = multVec.z * 500000.0f;
} else {
dst->z = multVec.z * (0.5f / calcFloat);
}
calcFloat = 500000.0f;
} else {
calcFloat = 0.5f / calcFloat;
dst->z = multVec.z * calcFloat;
}
view_port_class* viewPort = dComIfGd_getViewport();
f32 xOffset;
f32 yOffset;
f32 xSize;
f32 ySize;
if (viewPort->x_orig != 0.0f) {
xOffset = (0.5f * ((2.0f * viewPort->x_orig) + viewPort->width)) - (int)(FB_WIDTH / 2);
xSize = FB_WIDTH;
} else {
xOffset = viewPort->x_orig;
xSize = viewPort->width;
}
if (viewPort->y_orig != 0.0f) {
yOffset = (0.5f * ((2.0f * viewPort->y_orig) + viewPort->height)) - (int)(FB_HEIGHT / 2);
ySize = FB_HEIGHT;
} else {
yOffset = viewPort->y_orig;
ySize = viewPort->height;
}
dst->x = ((0.5f + (multVec.x * calcFloat)) * xSize) + xOffset;
dst->y = ((0.5f + (multVec.y * (-calcFloat))) * ySize) + yOffset;
}
void mDoLib_pos2camera(Vec* src, Vec* dst) {
if (dComIfGd_getView() == NULL) {
dst->x = 0.0f;
dst->y = 0.0f;
dst->z = 0.0f;
return;
}
cMtx_multVec(dComIfGd_getView()->viewMtx, src, dst);
}
#if PLATFORM_WII
void mDoLib_2Dto3D(f32 i_x, f32 i_y, f32 i_z, Vec* o_dst) {
if (dComIfGd_getView() == NULL) {
o_dst->x = 0.0f;
o_dst->y = 0.0f;
o_dst->z = 0.0f;
return;
}
f32 fovy = dComIfGd_getView()->fovy;
f32 aspect = dComIfGd_getView()->aspect;
f32 temp_f3 = tan(DEG_TO_RAD(0.5f * fovy));
Vec sp8;
sp8.x = (-i_x * i_z) * (temp_f3 * aspect);
sp8.y = (i_y * -i_z) * temp_f3;
sp8.z = -i_z;
PSMTXMultVec(dComIfGd_getInvViewMtx(), &sp8, o_dst);
}
#endif
static void dummy() {
std::tan(0.0f);
J3DAlphaComp* alphaComp = NULL;
alphaComp->setAlphaCompInfo((J3DAlphaCompInfo){});
J3DPEBlock* peBlock = NULL;
peBlock->getZMode()->setZModeInfo((J3DZModeInfo){});
dComIfGd_getInvViewMtx();
J3DMaterial* mat = NULL;
mat->getTevKColor(0);
mDoLib_clipper::clip(j3dSys.getViewMtx(), (Vec){}, 0.0f);
}
|