@dayme/bunraylib 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -11
- package/package.json +11 -3
- package/src/Raylib.ts +58 -3678
- package/src/c/common.h +0 -2
- package/src/constants.ts +2 -2
- package/src/index.ts +6 -6
- package/src/main.c +0 -1
- package/src/main.d.ts +1 -1
- package/src/modules/audio/AudioModule.ts +197 -0
- package/src/modules/audio/symbols.ts +70 -0
- package/src/{c/audio.c → modules/audio/wrapper.c} +40 -80
- package/src/modules/camera/CameraModule.ts +239 -0
- package/src/modules/camera/symbols.ts +49 -0
- package/src/modules/camera/wrapper.c +141 -0
- package/src/modules/collision/CollisionModule.ts +363 -0
- package/src/modules/collision/symbols.ts +149 -0
- package/src/modules/collision/wrapper.c +176 -0
- package/src/modules/color/ColorModule.ts +65 -0
- package/src/modules/color/symbols.ts +26 -0
- package/src/modules/color/wrapper.c +16 -0
- package/src/modules/draw3d/Draw3DModule.ts +441 -0
- package/src/modules/draw3d/symbols.ts +199 -0
- package/src/modules/draw3d/wrapper.c +202 -0
- package/src/modules/font/FontModule.ts +250 -0
- package/src/modules/font/symbols.ts +46 -0
- package/src/{c/font.c → modules/font/wrapper.c} +50 -70
- package/src/modules/image/ImageModule.ts +451 -0
- package/src/{symbols/image.ts → modules/image/symbols.ts} +15 -12
- package/src/{c/image.c → modules/image/wrapper.c} +23 -45
- package/src/modules/input/InputModule.ts +160 -0
- package/src/modules/input/symbols.ts +54 -0
- package/src/modules/input/wrapper.c +31 -0
- package/src/modules/model/ModelModule.ts +228 -0
- package/src/{symbols/model.ts → modules/model/symbols.ts} +17 -14
- package/src/{c/model.c → modules/model/wrapper.c} +30 -30
- package/src/modules/shader/ShaderModule.ts +78 -0
- package/src/{symbols/shader.ts → modules/shader/symbols.ts} +3 -1
- package/src/{c/shader.c → modules/shader/wrapper.c} +11 -1
- package/src/modules/shapes/ShapesModule.ts +687 -0
- package/src/modules/shapes/symbols.ts +161 -0
- package/src/modules/shapes/wrapper.c +183 -0
- package/src/modules/texture/TextureModule.ts +190 -0
- package/src/{symbols/texture.ts → modules/texture/symbols.ts} +15 -9
- package/src/{c/texture.c → modules/texture/wrapper.c} +7 -22
- package/src/modules/window/WindowModule.ts +248 -0
- package/src/modules/window/symbols.ts +85 -0
- package/src/modules/window/wrapper.c +39 -0
- package/src/symbols.ts +87 -47
- package/src/utils.ts +63 -15
- package/src/c/camera.c +0 -161
- package/src/c/collision.c +0 -176
- package/src/c/color.c +0 -100
- package/src/c/draw3d.c +0 -222
- package/src/c/filesystem.c +0 -36
- package/src/c/input.c +0 -85
- package/src/c/shapes.c +0 -283
- package/src/c/window.c +0 -150
- package/src/symbols/audio.ts +0 -64
- package/src/symbols/camera.ts +0 -46
- package/src/symbols/collision.ts +0 -116
- package/src/symbols/color.ts +0 -22
- package/src/symbols/draw3d.ts +0 -137
- package/src/symbols/filesystem.ts +0 -30
- package/src/symbols/font.ts +0 -40
- package/src/symbols/input.ts +0 -51
- package/src/symbols/shapes.ts +0 -92
- package/src/symbols/window.ts +0 -83
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { getSymbols } from '../../symbols';
|
|
2
|
+
import { bufs as b, f, i } from '../../utils';
|
|
3
|
+
import type { Vec2, Vec3, Camera2D, Camera3D, Ray } from '../../types';
|
|
4
|
+
|
|
5
|
+
const r = () => getSymbols();
|
|
6
|
+
|
|
7
|
+
export class CameraModule {
|
|
8
|
+
static beginMode2D(camera: Camera2D): void {
|
|
9
|
+
r().symbols.BeginMode2DW(
|
|
10
|
+
f(camera.offset.x),
|
|
11
|
+
f(camera.offset.y),
|
|
12
|
+
f(camera.target.x),
|
|
13
|
+
f(camera.target.y),
|
|
14
|
+
f(camera.rotation),
|
|
15
|
+
f(camera.zoom),
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
static endMode2D(): void {
|
|
19
|
+
r().symbols.EndMode2D();
|
|
20
|
+
}
|
|
21
|
+
static beginMode3D(camera: Camera3D): void {
|
|
22
|
+
r().symbols.BeginMode3DW(
|
|
23
|
+
f(camera.position.x),
|
|
24
|
+
f(camera.position.y),
|
|
25
|
+
f(camera.position.z),
|
|
26
|
+
f(camera.target.x),
|
|
27
|
+
f(camera.target.y),
|
|
28
|
+
f(camera.target.z),
|
|
29
|
+
f(camera.up.x),
|
|
30
|
+
f(camera.up.y),
|
|
31
|
+
f(camera.up.z),
|
|
32
|
+
f(camera.fovy),
|
|
33
|
+
i(camera.projection),
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
static endMode3D(): void {
|
|
37
|
+
r().symbols.EndMode3D();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static updateCamera(camera: Camera3D, mode: number): Camera3D {
|
|
41
|
+
const pos = new Float32Array([camera.position.x, camera.position.y, camera.position.z]);
|
|
42
|
+
const tar = new Float32Array([camera.target.x, camera.target.y, camera.target.z]);
|
|
43
|
+
const up = new Float32Array([camera.up.x, camera.up.y, camera.up.z]);
|
|
44
|
+
const fovy = new Float32Array([camera.fovy]);
|
|
45
|
+
const proj = new Int32Array([camera.projection]);
|
|
46
|
+
r().symbols.UpdateCameraW(pos, tar, up, fovy, proj, i(mode));
|
|
47
|
+
return {
|
|
48
|
+
position: { x: pos[0]!, y: pos[1]!, z: pos[2]! },
|
|
49
|
+
target: { x: tar[0]!, y: tar[1]!, z: tar[2]! },
|
|
50
|
+
up: { x: up[0]!, y: up[1]!, z: up[2]! },
|
|
51
|
+
fovy: fovy[0]!,
|
|
52
|
+
projection: proj[0]! as Camera3D['projection'],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static updateCameraPro(camera: Camera3D, movement: Vec3, rotation: Vec3, zoom: number): Camera3D {
|
|
57
|
+
const pos = new Float32Array([camera.position.x, camera.position.y, camera.position.z]);
|
|
58
|
+
const tar = new Float32Array([camera.target.x, camera.target.y, camera.target.z]);
|
|
59
|
+
const up = new Float32Array([camera.up.x, camera.up.y, camera.up.z]);
|
|
60
|
+
const fovy = new Float32Array([camera.fovy]);
|
|
61
|
+
const proj = new Int32Array([camera.projection]);
|
|
62
|
+
r().symbols.UpdateCameraProW(
|
|
63
|
+
pos,
|
|
64
|
+
tar,
|
|
65
|
+
up,
|
|
66
|
+
fovy,
|
|
67
|
+
proj,
|
|
68
|
+
f(movement.x),
|
|
69
|
+
f(movement.y),
|
|
70
|
+
f(movement.z),
|
|
71
|
+
f(rotation.x),
|
|
72
|
+
f(rotation.y),
|
|
73
|
+
f(rotation.z),
|
|
74
|
+
f(zoom),
|
|
75
|
+
);
|
|
76
|
+
return {
|
|
77
|
+
position: { x: pos[0]!, y: pos[1]!, z: pos[2]! },
|
|
78
|
+
target: { x: tar[0]!, y: tar[1]!, z: tar[2]! },
|
|
79
|
+
up: { x: up[0]!, y: up[1]!, z: up[2]! },
|
|
80
|
+
fovy: fovy[0]!,
|
|
81
|
+
projection: proj[0]! as Camera3D['projection'],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static getScreenToWorldRay(position: Vec2, camera: Camera3D): Ray {
|
|
86
|
+
const outPos = new Float32Array(3);
|
|
87
|
+
const outDir = new Float32Array(3);
|
|
88
|
+
r().symbols.GetScreenToWorldRayW(
|
|
89
|
+
outPos,
|
|
90
|
+
outDir,
|
|
91
|
+
i(position.x),
|
|
92
|
+
i(position.y),
|
|
93
|
+
f(camera.position.x),
|
|
94
|
+
f(camera.position.y),
|
|
95
|
+
f(camera.position.z),
|
|
96
|
+
f(camera.target.x),
|
|
97
|
+
f(camera.target.y),
|
|
98
|
+
f(camera.target.z),
|
|
99
|
+
f(camera.up.x),
|
|
100
|
+
f(camera.up.y),
|
|
101
|
+
f(camera.up.z),
|
|
102
|
+
f(camera.fovy),
|
|
103
|
+
i(camera.projection),
|
|
104
|
+
);
|
|
105
|
+
return {
|
|
106
|
+
position: { x: outPos[0]!, y: outPos[1]!, z: outPos[2]! },
|
|
107
|
+
direction: { x: outDir[0]!, y: outDir[1]!, z: outDir[2]! },
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
static getWorldToScreen(position: Vec3, camera: Camera3D): Vec2 {
|
|
111
|
+
r().symbols.GetWorldToScreenW(
|
|
112
|
+
b._vec2Buf,
|
|
113
|
+
f(position.x),
|
|
114
|
+
f(position.y),
|
|
115
|
+
f(position.z),
|
|
116
|
+
f(camera.position.x),
|
|
117
|
+
f(camera.position.y),
|
|
118
|
+
f(camera.position.z),
|
|
119
|
+
f(camera.target.x),
|
|
120
|
+
f(camera.target.y),
|
|
121
|
+
f(camera.target.z),
|
|
122
|
+
f(camera.up.x),
|
|
123
|
+
f(camera.up.y),
|
|
124
|
+
f(camera.up.z),
|
|
125
|
+
f(camera.fovy),
|
|
126
|
+
i(camera.projection),
|
|
127
|
+
);
|
|
128
|
+
return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
|
|
129
|
+
}
|
|
130
|
+
static getWorldToScreen2D(position: Vec2, camera: Camera2D): Vec2 {
|
|
131
|
+
r().symbols.GetWorldToScreen2DW(
|
|
132
|
+
b._vec2Buf,
|
|
133
|
+
f(position.x),
|
|
134
|
+
f(position.y),
|
|
135
|
+
f(camera.offset.x),
|
|
136
|
+
f(camera.offset.y),
|
|
137
|
+
f(camera.target.x),
|
|
138
|
+
f(camera.target.y),
|
|
139
|
+
f(camera.rotation),
|
|
140
|
+
f(camera.zoom),
|
|
141
|
+
);
|
|
142
|
+
return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
|
|
143
|
+
}
|
|
144
|
+
static getScreenToWorld2D(position: Vec2, camera: Camera2D): Vec2 {
|
|
145
|
+
r().symbols.GetScreenToWorld2DW(
|
|
146
|
+
b._vec2Buf,
|
|
147
|
+
f(position.x),
|
|
148
|
+
f(position.y),
|
|
149
|
+
f(camera.offset.x),
|
|
150
|
+
f(camera.offset.y),
|
|
151
|
+
f(camera.target.x),
|
|
152
|
+
f(camera.target.y),
|
|
153
|
+
f(camera.rotation),
|
|
154
|
+
f(camera.zoom),
|
|
155
|
+
);
|
|
156
|
+
return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
|
|
157
|
+
}
|
|
158
|
+
static getScreenToWorldRayEx(
|
|
159
|
+
position: Vec2,
|
|
160
|
+
camera: Camera3D,
|
|
161
|
+
width: number,
|
|
162
|
+
height: number,
|
|
163
|
+
): Ray {
|
|
164
|
+
r().symbols.GetScreenToWorldRayExW(
|
|
165
|
+
b._rayPosBuf2,
|
|
166
|
+
b._rayDirBuf2,
|
|
167
|
+
i(position.x),
|
|
168
|
+
i(position.y),
|
|
169
|
+
i(width),
|
|
170
|
+
i(height),
|
|
171
|
+
f(camera.position.x),
|
|
172
|
+
f(camera.position.y),
|
|
173
|
+
f(camera.position.z),
|
|
174
|
+
f(camera.target.x),
|
|
175
|
+
f(camera.target.y),
|
|
176
|
+
f(camera.target.z),
|
|
177
|
+
f(camera.up.x),
|
|
178
|
+
f(camera.up.y),
|
|
179
|
+
f(camera.up.z),
|
|
180
|
+
f(camera.fovy),
|
|
181
|
+
i(camera.projection),
|
|
182
|
+
);
|
|
183
|
+
return {
|
|
184
|
+
position: { x: b._rayPosBuf2[0]!, y: b._rayPosBuf2[1]!, z: b._rayPosBuf2[2]! },
|
|
185
|
+
direction: { x: b._rayDirBuf2[0]!, y: b._rayDirBuf2[1]!, z: b._rayDirBuf2[2]! },
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
static getWorldToScreenEx(position: Vec3, camera: Camera3D, width: number, height: number): Vec2 {
|
|
189
|
+
r().symbols.GetWorldToScreenExW(
|
|
190
|
+
b._vec2Buf,
|
|
191
|
+
f(position.x),
|
|
192
|
+
f(position.y),
|
|
193
|
+
f(position.z),
|
|
194
|
+
f(camera.position.x),
|
|
195
|
+
f(camera.position.y),
|
|
196
|
+
f(camera.position.z),
|
|
197
|
+
f(camera.target.x),
|
|
198
|
+
f(camera.target.y),
|
|
199
|
+
f(camera.target.z),
|
|
200
|
+
f(camera.up.x),
|
|
201
|
+
f(camera.up.y),
|
|
202
|
+
f(camera.up.z),
|
|
203
|
+
f(camera.fovy),
|
|
204
|
+
i(camera.projection),
|
|
205
|
+
i(width),
|
|
206
|
+
i(height),
|
|
207
|
+
);
|
|
208
|
+
return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
|
|
209
|
+
}
|
|
210
|
+
static getCameraMatrix(camera: Camera3D): Float32Array {
|
|
211
|
+
r().symbols.GetCameraMatrixW(
|
|
212
|
+
b._matBuf,
|
|
213
|
+
f(camera.position.x),
|
|
214
|
+
f(camera.position.y),
|
|
215
|
+
f(camera.position.z),
|
|
216
|
+
f(camera.target.x),
|
|
217
|
+
f(camera.target.y),
|
|
218
|
+
f(camera.target.z),
|
|
219
|
+
f(camera.up.x),
|
|
220
|
+
f(camera.up.y),
|
|
221
|
+
f(camera.up.z),
|
|
222
|
+
f(camera.fovy),
|
|
223
|
+
i(camera.projection),
|
|
224
|
+
);
|
|
225
|
+
return new Float32Array(b._matBuf);
|
|
226
|
+
}
|
|
227
|
+
static getCameraMatrix2D(camera: Camera2D): Float32Array {
|
|
228
|
+
r().symbols.GetCameraMatrix2DW(
|
|
229
|
+
b._matBuf,
|
|
230
|
+
camera.offset.x,
|
|
231
|
+
camera.offset.y,
|
|
232
|
+
camera.target.x,
|
|
233
|
+
camera.target.y,
|
|
234
|
+
f(camera.rotation),
|
|
235
|
+
f(camera.zoom),
|
|
236
|
+
);
|
|
237
|
+
return new Float32Array(b._matBuf);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { FFIType } from 'bun:ffi';
|
|
2
|
+
const { i32, ptr, f32 } = FFIType;
|
|
3
|
+
|
|
4
|
+
export const cameraWrapperSymbols = {
|
|
5
|
+
BeginMode2DW: { args: [f32, f32, f32, f32, f32, f32], returns: FFIType.void },
|
|
6
|
+
BeginMode3DW: {
|
|
7
|
+
args: [f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
|
|
8
|
+
returns: FFIType.void,
|
|
9
|
+
},
|
|
10
|
+
UpdateCameraW: { args: [ptr, ptr, ptr, ptr, ptr, i32], returns: FFIType.void },
|
|
11
|
+
UpdateCameraProW: {
|
|
12
|
+
args: [ptr, ptr, ptr, ptr, ptr, f32, f32, f32, f32, f32, f32, f32],
|
|
13
|
+
returns: FFIType.void,
|
|
14
|
+
},
|
|
15
|
+
GetScreenToWorldRayW: {
|
|
16
|
+
args: [ptr, ptr, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
|
|
17
|
+
returns: FFIType.void,
|
|
18
|
+
},
|
|
19
|
+
GetWorldToScreenW: {
|
|
20
|
+
args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
|
|
21
|
+
returns: FFIType.void,
|
|
22
|
+
},
|
|
23
|
+
GetWorldToScreen2DW: {
|
|
24
|
+
args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32],
|
|
25
|
+
returns: FFIType.void,
|
|
26
|
+
},
|
|
27
|
+
GetScreenToWorld2DW: {
|
|
28
|
+
args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32],
|
|
29
|
+
returns: FFIType.void,
|
|
30
|
+
},
|
|
31
|
+
GetScreenToWorldRayExW: {
|
|
32
|
+
args: [ptr, ptr, i32, i32, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
|
|
33
|
+
returns: FFIType.void,
|
|
34
|
+
},
|
|
35
|
+
GetWorldToScreenExW: {
|
|
36
|
+
args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32, i32, i32],
|
|
37
|
+
returns: FFIType.void,
|
|
38
|
+
},
|
|
39
|
+
GetCameraMatrixW: {
|
|
40
|
+
args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
|
|
41
|
+
returns: FFIType.void,
|
|
42
|
+
},
|
|
43
|
+
GetCameraMatrix2DW: { args: [ptr, f32, f32, f32, f32, f32, f32], returns: FFIType.void },
|
|
44
|
+
} as const;
|
|
45
|
+
|
|
46
|
+
export const cameraDirectSymbols = {
|
|
47
|
+
EndMode3D: { args: [], returns: FFIType.void },
|
|
48
|
+
EndMode2D: { args: [], returns: FFIType.void },
|
|
49
|
+
} as const;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#include "../../c/common.h"
|
|
2
|
+
|
|
3
|
+
void BeginMode2DW(float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
|
|
4
|
+
Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
|
|
5
|
+
BeginMode2D(cam);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
void BeginMode3DW(float posX, float posY, float posZ, float tarX, float tarY, float tarZ, float upX, float upY, float upZ, float fovy, int projection) {
|
|
9
|
+
Camera3D cam = { {posX, posY, posZ}, {tarX, tarY, tarZ}, {upX, upY, upZ}, fovy, projection };
|
|
10
|
+
BeginMode3D(cam);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void UpdateCameraW(float* pos, float* tar, float* up, float* fovy, int* projection, int mode) {
|
|
14
|
+
Camera3D cam = {
|
|
15
|
+
{pos[0], pos[1], pos[2]},
|
|
16
|
+
{tar[0], tar[1], tar[2]},
|
|
17
|
+
{up[0], up[1], up[2]},
|
|
18
|
+
fovy[0],
|
|
19
|
+
projection[0]
|
|
20
|
+
};
|
|
21
|
+
UpdateCamera(&cam, mode);
|
|
22
|
+
pos[0] = cam.position.x; pos[1] = cam.position.y; pos[2] = cam.position.z;
|
|
23
|
+
tar[0] = cam.target.x; tar[1] = cam.target.y; tar[2] = cam.target.z;
|
|
24
|
+
up[0] = cam.up.x; up[1] = cam.up.y; up[2] = cam.up.z;
|
|
25
|
+
fovy[0] = cam.fovy;
|
|
26
|
+
projection[0] = cam.projection;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void UpdateCameraProW(float* pos, float* tar, float* up, float* fovy, int* projection,
|
|
30
|
+
float mx, float my, float mz, float rx, float ry, float rz, float zoom) {
|
|
31
|
+
Camera3D cam = {
|
|
32
|
+
{pos[0], pos[1], pos[2]},
|
|
33
|
+
{tar[0], tar[1], tar[2]},
|
|
34
|
+
{up[0], up[1], up[2]},
|
|
35
|
+
fovy[0],
|
|
36
|
+
projection[0]
|
|
37
|
+
};
|
|
38
|
+
UpdateCameraPro(&cam, (Vector3){mx, my, mz}, (Vector3){rx, ry, rz}, zoom);
|
|
39
|
+
pos[0] = cam.position.x; pos[1] = cam.position.y; pos[2] = cam.position.z;
|
|
40
|
+
tar[0] = cam.target.x; tar[1] = cam.target.y; tar[2] = cam.target.z;
|
|
41
|
+
up[0] = cam.up.x; up[1] = cam.up.y; up[2] = cam.up.z;
|
|
42
|
+
fovy[0] = cam.fovy;
|
|
43
|
+
projection[0] = cam.projection;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void GetScreenToWorldRayW(float* outPos, float* outDir, int screenX, int screenY,
|
|
47
|
+
float camPosX, float camPosY, float camPosZ, float camTarX, float camTarY, float camTarZ,
|
|
48
|
+
float camUpX, float camUpY, float camUpZ, float camFovy, int camProj) {
|
|
49
|
+
Camera3D cam = {
|
|
50
|
+
{camPosX, camPosY, camPosZ},
|
|
51
|
+
{camTarX, camTarY, camTarZ},
|
|
52
|
+
{camUpX, camUpY, camUpZ},
|
|
53
|
+
camFovy, camProj
|
|
54
|
+
};
|
|
55
|
+
Ray r = GetScreenToWorldRay((Vector2){screenX, screenY}, cam);
|
|
56
|
+
outPos[0] = r.position.x; outPos[1] = r.position.y; outPos[2] = r.position.z;
|
|
57
|
+
outDir[0] = r.direction.x; outDir[1] = r.direction.y; outDir[2] = r.direction.z;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
void GetWorldToScreenW(float* out, float posX, float posY, float posZ,
|
|
61
|
+
float camPosX, float camPosY, float camPosZ, float camTarX, float camTarY, float camTarZ,
|
|
62
|
+
float camUpX, float camUpY, float camUpZ, float camFovy, int camProj) {
|
|
63
|
+
Camera3D cam = {
|
|
64
|
+
{camPosX, camPosY, camPosZ},
|
|
65
|
+
{camTarX, camTarY, camTarZ},
|
|
66
|
+
{camUpX, camUpY, camUpZ},
|
|
67
|
+
camFovy, camProj
|
|
68
|
+
};
|
|
69
|
+
Vector2 v = GetWorldToScreen((Vector3){posX, posY, posZ}, cam);
|
|
70
|
+
out[0] = v.x; out[1] = v.y;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
void GetWorldToScreen2DW(float* out, float posX, float posY,
|
|
74
|
+
float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
|
|
75
|
+
Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
|
|
76
|
+
Vector2 v = GetWorldToScreen2D((Vector2){posX, posY}, cam);
|
|
77
|
+
out[0] = v.x; out[1] = v.y;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void GetScreenToWorld2DW(float* out, float posX, float posY,
|
|
81
|
+
float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
|
|
82
|
+
Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
|
|
83
|
+
Vector2 v = GetScreenToWorld2D((Vector2){posX, posY}, cam);
|
|
84
|
+
out[0] = v.x; out[1] = v.y;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
void GetScreenToWorldRayExW(float* outPos, float* outDir,
|
|
88
|
+
int screenX, int screenY, int screenW, int screenH,
|
|
89
|
+
float camPosX, float camPosY, float camPosZ,
|
|
90
|
+
float camTarX, float camTarY, float camTarZ,
|
|
91
|
+
float camUpX, float camUpY, float camUpZ,
|
|
92
|
+
float camFovy, int camProj) {
|
|
93
|
+
Camera3D cam = {
|
|
94
|
+
{camPosX, camPosY, camPosZ},
|
|
95
|
+
{camTarX, camTarY, camTarZ},
|
|
96
|
+
{camUpX, camUpY, camUpZ},
|
|
97
|
+
camFovy, camProj
|
|
98
|
+
};
|
|
99
|
+
Ray r = GetScreenToWorldRayEx((Vector2){screenX, screenY}, cam, screenW, screenH);
|
|
100
|
+
outPos[0] = r.position.x; outPos[1] = r.position.y; outPos[2] = r.position.z;
|
|
101
|
+
outDir[0] = r.direction.x; outDir[1] = r.direction.y; outDir[2] = r.direction.z;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void GetWorldToScreenExW(float* out,
|
|
105
|
+
float posX, float posY, float posZ,
|
|
106
|
+
float camPosX, float camPosY, float camPosZ,
|
|
107
|
+
float camTarX, float camTarY, float camTarZ,
|
|
108
|
+
float camUpX, float camUpY, float camUpZ,
|
|
109
|
+
float camFovy, int camProj,
|
|
110
|
+
int screenW, int screenH) {
|
|
111
|
+
Camera3D cam = {
|
|
112
|
+
{camPosX, camPosY, camPosZ},
|
|
113
|
+
{camTarX, camTarY, camTarZ},
|
|
114
|
+
{camUpX, camUpY, camUpZ},
|
|
115
|
+
camFovy, camProj
|
|
116
|
+
};
|
|
117
|
+
Vector2 v = GetWorldToScreenEx((Vector3){posX, posY, posZ}, cam, screenW, screenH);
|
|
118
|
+
out[0] = v.x; out[1] = v.y;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
void GetCameraMatrixW(float* out,
|
|
122
|
+
float camPosX, float camPosY, float camPosZ,
|
|
123
|
+
float camTarX, float camTarY, float camTarZ,
|
|
124
|
+
float camUpX, float camUpY, float camUpZ,
|
|
125
|
+
float camFovy, int camProj) {
|
|
126
|
+
Camera3D cam = {
|
|
127
|
+
{camPosX, camPosY, camPosZ},
|
|
128
|
+
{camTarX, camTarY, camTarZ},
|
|
129
|
+
{camUpX, camUpY, camUpZ},
|
|
130
|
+
camFovy, camProj
|
|
131
|
+
};
|
|
132
|
+
Matrix m = GetCameraMatrix(cam);
|
|
133
|
+
memcpy(out, &m, sizeof(Matrix));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void GetCameraMatrix2DW(float* out,
|
|
137
|
+
float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
|
|
138
|
+
Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
|
|
139
|
+
Matrix m = GetCameraMatrix2D(cam);
|
|
140
|
+
memcpy(out, &m, sizeof(Matrix));
|
|
141
|
+
}
|