Skip to content

Commit 0f9e0a8

Browse files
committed
Add new perspective method
1 parent dd0f964 commit 0f9e0a8

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NeuralGraphicsGL"
22
uuid = "263f7e6d-e369-49af-a86e-c85638573b76"
33
authors = ["Anton Smirnov <[email protected]>"]
4-
version = "0.1.1"
4+
version = "0.2.0"
55

66
[deps]
77
CImGui = "5d785b6c-b76f-510e-a07c-3070796c7e87"

src/NeuralGraphicsGL.jl

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,38 +87,48 @@ function look_at(position, target, up)
8787
X = normalize(normalize(up) × Z)
8888
Y = Z × X
8989

90-
SMatrix{4, 4, Float32}(
90+
SMatrix{4, 4, Float32, 16}(
9191
X[1], Y[1], Z[1], 0f0,
9292
X[2], Y[2], Z[2], 0f0,
9393
X[3], Y[3], Z[3], 0f0,
9494
X -position, Y -position, Z -position, 1f0)
9595
end
9696

97-
function _frustum(left, right, bottom, top, znear, zfar)
97+
function _frustum(left, right, bottom, top, znear, zfar; zsign::Float32 = -1f0)
9898
(right == left || bottom == top || znear == zfar) &&
99-
return SMatrix{4, 4, Float32}(I)
99+
return SMatrix{4, 4, Float32, 16}(I)
100100

101101
rl = 1f0 / (right - left)
102102
tb = 1f0 / (top - bottom)
103103
zz = 1f0 / (zfar - znear)
104104

105-
SMatrix{4, 4, Float32}(
105+
SMatrix{4, 4, Float32, 16}(
106106
2f0 * znear * rl, 0f0, 0f0, 0f0,
107107
0f0, 2f0 * znear * tb, 0f0, 0f0,
108-
(right + left) * rl, (top + bottom) * tb, -(zfar + znear) * zz, -1f0,
108+
(right + left) * rl, (top + bottom) * tb, zsign * (zfar + znear) * zz, zsign,
109109
0f0, 0f0, (-2f0 * znear * zfar) * zz, 0f0)
110110
end
111111

112112
"""
113+
- `fovx`: In degrees.
113114
- `fovy`: In degrees.
114115
"""
115-
function perspective(fovy, aspect, znear, zfar)
116+
function perspective(fovx, fovy, znear, zfar; zsign::Float32 = -1f0)
117+
(znear == zfar) &&
118+
error("znear `$znear` must be different from zfar `$zfar`")
119+
120+
w = tan(0.5f0 * deg2rad(fovx)) * znear
121+
h = tan(0.5f0 * deg2rad(fovy)) * znear
122+
_frustum(-w, w, -h, h, znear, zfar; zsign)
123+
end
124+
125+
function perspective(fovy, znear, zfar; aspect::Float32, zsign::Float32 = -1f0)
116126
(znear == zfar) &&
117127
error("znear `$znear` must be different from zfar `$zfar`")
118128

119129
h = tan(0.5f0 * deg2rad(fovy)) * znear
120130
w = h * aspect
121-
_frustum(-w, w, -h, h, znear, zfar)
131+
_frustum(-w, w, -h, h, znear, zfar; zsign)
122132
end
123133

124134
abstract type AbstractTexture end

0 commit comments

Comments
 (0)