Pass vertex as pointer
This commit is contained in:
parent
f77fa5694b
commit
fdce10a85c
20
src/obj.c
20
src/obj.c
@ -113,7 +113,7 @@ internal TriangleBBox get_triangle_bbox(const Image *img,
|
||||
internal V3f get_barycentric_coords(f32 d00, f32 d01, f32 d11, f32 denom,
|
||||
const V2i *ab, const V2i *ac,
|
||||
const V2i *ap);
|
||||
internal V3f get_viewport_vertex(V3f vertex, const Image *img);
|
||||
internal V3f get_viewport_vertex(const V3f *vertex, const Image *img);
|
||||
|
||||
V3f g_light_dir = {0.0f, 0.0f, 1.0f};
|
||||
|
||||
@ -298,8 +298,8 @@ internal void render_triangle(const Triangle *triangle, const Model *model,
|
||||
v0 = vertices[i];
|
||||
v1 = vertices[(i + 1) % TRIANGLE_VERTICES];
|
||||
|
||||
vp0 = get_viewport_vertex(v0, img);
|
||||
vp1 = get_viewport_vertex(v1, img);
|
||||
vp0 = get_viewport_vertex(&v0, img);
|
||||
vp1 = get_viewport_vertex(&v1, img);
|
||||
|
||||
draw_line(img, (u64)vp0.x, (u64)vp0.y, (u64)vp1.x, (u64)vp1.y, colour);
|
||||
}
|
||||
@ -317,9 +317,9 @@ internal void fill_triangle(Render *render, V3f vertices[TRIANGLE_VERTICES],
|
||||
Depth *depth = &(render->depth);
|
||||
TriangleBBox bbox = get_triangle_bbox(img, vertices);
|
||||
|
||||
V3f v0 = get_viewport_vertex(vertices[0], img);
|
||||
V3f v1 = get_viewport_vertex(vertices[1], img);
|
||||
V3f v2 = get_viewport_vertex(vertices[2], img);
|
||||
V3f v0 = get_viewport_vertex(&vertices[0], img);
|
||||
V3f v1 = get_viewport_vertex(&vertices[1], img);
|
||||
V3f v2 = get_viewport_vertex(&vertices[2], img);
|
||||
|
||||
V2i ab = V2(V2i, i64, v0.x, v0.y, v1.x, v1.y);
|
||||
V2i ac = V2(V2i, i64, v0.x, v0.y, v2.x, v2.y);
|
||||
@ -441,8 +441,8 @@ internal TriangleBBox get_triangle_bbox(const Image *img,
|
||||
f32 y0 = max(vertices[0].y, max(vertices[1].y, vertices[2].y));
|
||||
f32 y1 = min(vertices[0].y, min(vertices[1].y, vertices[2].y));
|
||||
|
||||
V3f minimum = get_viewport_vertex((V3f){x0, y0, 0.0f}, img);
|
||||
V3f maximum = get_viewport_vertex((V3f){x1, y1, 0.0f}, img);
|
||||
V3f minimum = get_viewport_vertex(&(V3f){x0, y0, 0.0f}, img);
|
||||
V3f maximum = get_viewport_vertex(&(V3f){x1, y1, 0.0f}, img);
|
||||
|
||||
return (TriangleBBox){
|
||||
.x0 = minimum.x,
|
||||
@ -469,8 +469,8 @@ internal V3f get_barycentric_coords(f32 d00, f32 d01, f32 d11, f32 denom,
|
||||
return (V3f){v, w, u};
|
||||
}
|
||||
|
||||
internal V3f get_viewport_vertex(V3f vertex, const Image *img) {
|
||||
V4f vh = {.x = vertex.x, .y = 0.0f - vertex.y, .z = vertex.z, .w = 1.0f};
|
||||
internal V3f get_viewport_vertex(const V3f *vertex, const Image *img) {
|
||||
V4f vh = {.x = vertex->x, .y = 0.0f - vertex->y, .z = vertex->z, .w = 1.0f};
|
||||
vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh);
|
||||
return project_vec4(vh);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user