minecraft

minecraft
git clone git://git.evenfri.pw/minecraft.git
Log | Files | Refs | README

commit d1aff1f0a60c16d97bf5ce3a14614da3d184e91e
parent 13072c6043e79e12badb50ddf4451615fe328699
Author: evenfri <evenfri@4plt.ch>
Date:   Mon,  2 Nov 2026 06:17:02 +0800

fix format, add define CAMERA_FOV

Diffstat:
Mblocks.c | 12++++++------
Mcamera.c | 106++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mdat.h | 14++++++++------
3 files changed, 73 insertions(+), 59 deletions(-)

diff --git a/blocks.c b/blocks.c @@ -3,12 +3,12 @@ Block blocks[] = { { BLOCK_GRASS, { - "assets/grass_side.png", /* back */ - "assets/grass_side.png", /* front */ - "assets/grass_side.png", /* left */ - "assets/grass_side.png", /* right */ - "assets/dirt.png", /* bottom */ - "assets/grass_top.png", /* top */ + "assets/grass_side.png", /* back */ + "assets/grass_side.png", /* front */ + "assets/grass_side.png", /* left */ + "assets/grass_side.png", /* right */ + "assets/dirt.png", /* bottom */ + "assets/grass_top.png", /* top */ }}, { BLOCK_STONE, { "assets/stone.png", "assets/stone.png", diff --git a/camera.c b/camera.c @@ -5,23 +5,60 @@ Camera camera; -static vec3 vec3_make(float x, float y, float z) { vec3 v = {x, y, z}; return v; } -// static vec3 vec3_sub (vec3 a, vec3 b) { return vec3_make(a.x-b.x, a.y-b.y, a.z-b.z); } -static vec3 vec3_scale(vec3 a, float s){ return vec3_make(a.x*s, a.y*s, a.z*s); } -static float vec3_dot (vec3 a, vec3 b) { return a.x*b.x + a.y*b.y + a.z*b.z; } +static vec3 vec3_make(float x, float y, float z) { + vec3 v = {x, y, z}; + return v; +} + +/* + * static vec3 vec3_sub (vec3 a, vec3 b) { + * return vec3_make(a.x - b.x, a.y - b.y, a.z - b.z); + * } + */ + +static float vec3_dot (vec3 a, vec3 b) { + return a.x * b.x + a.y * b.y + a.z * b.z; +} + static vec3 vec3_cross(vec3 a, vec3 b) { - return vec3_make(a.y*b.z - a.z*b.y, - a.z*b.x - a.x*b.z, - a.x*b.y - a.y*b.x); + return vec3_make(a.y * b.z - a.z * b.y, + a.z * b.x - a.x * b.z, + a.x * b.y - a.y * b.x); } + static vec3 vec3_norm(vec3 a) { float l = sqrtf(vec3_dot(a, a)); if (l < 1e-6f) return vec3_make(0, 0, 0); return vec3_scale(a, 1.0f / l); } +mat4 mat4_identity(void) + mat4 r = {{0}}; +r.m[0] = r.m[5] = r.m[10] = r.m[15] = 1.0f; +return r; +} + +mat4 mat4_perspective(float fovy, float aspect, float znear, float zfar) { + mat4 r = {{0}}; + float f = 1.0f / tanf(0.5f * fovy * PI / 180.0f); + r.m[0] = f / aspect; + r.m[5] = f; + r.m[10] = (zfar + znear) / (znear - zfar); + r.m[11] = -1.0f; + r.m[14] = (2.0f * zfar * znear) / (znear - zfar); + return r; +} + +mat4 mat4_translate(float x, float y, float z) { + mat4 r = mat4_identity(); + r.m[12] = x; + r.m[13] = y; + r.m[14] = z; + return r; +} + void camera_update_vectors(void) { - float yr = camera.yaw * PI / 180.0f; + float yr = camera.yaw * PI / 180.0f; float pr = camera.pitch * PI / 180.0f; vec3 front; @@ -31,17 +68,17 @@ void camera_update_vectors(void) { camera.front = vec3_norm(front); camera.right = vec3_norm(vec3_cross(camera.front, camera.world_up)); - camera.up = vec3_norm(vec3_cross(camera.right, camera.front)); + camera.up = vec3_norm(vec3_cross(camera.right, camera.front)); } void camera_init(void) { - camera.position = vec3_make(0.0f, 0.0f, 3.0f); - camera.world_up = vec3_make(0.0f, 1.0f, 0.0f); - camera.yaw = -90.0f; /* смотрим в -Z */ - camera.pitch = 0.0f; - camera.speed = 2.5f; - camera.sensitivity = 0.1f; - camera.fov = 45.0f; + camera.position = vec3_make(0.0f, 0.0f, 3.0f); + camera.world_up = vec3_make(0.0f, 1.0f, 0.0f); + camera.yaw = -90.0f; /* look to -90 z */ + camera.pitch = 0.0f; + camera.speed = 2.5f; + camera.sensitivity = 0.1f; + camera.fov = CAMERA_FOV; camera_update_vectors(); } @@ -52,38 +89,13 @@ mat4 camera_get_view(void) { vec3 e = camera.position; mat4 v; - v.m[0] = s.x; v.m[4] = s.y; v.m[8] = s.z; v.m[12] = -vec3_dot(s, e); - v.m[1] = u.x; v.m[5] = u.y; v.m[9] = u.z; v.m[13] = -vec3_dot(u, e); - v.m[2] = -f.x; v.m[6] = -f.y; v.m[10] = -f.z; v.m[14] = vec3_dot(f, e); - v.m[3] = 0.0f; v.m[7] = 0.0f; v.m[11] = 0.0f; v.m[15] = 1.0f; + v.m[0] = s.x; v.m[4] = s.y; v.m[8] = s.z; v.m[12] = -vec3_dot(s, e); + v.m[1] = u.x; v.m[5] = u.y; v.m[9] = u.z; v.m[13] = -vec3_dot(u, e); + v.m[2] = -f.x; v.m[6] = -f.y; v.m[10] = -f.z; v.m[14] = vec3_dot(f, e); + v.m[3] = 0.0f; v.m[7] = 0.0f; v.m[11] = 0.0f; v.m[15] = 1.0f; return v; } -mat4 mat4_identity(void) { - mat4 r = {{0}}; - r.m[0] = r.m[5] = r.m[10] = r.m[15] = 1.0f; - return r; -} - -mat4 mat4_perspective(float fovy, float aspect, float znear, float zfar) { - mat4 r = {{0}}; - float f = 1.0f / tanf(0.5f * fovy * PI / 180.0f); - r.m[0] = f / aspect; - r.m[5] = f; - r.m[10] = (zfar + znear) / (znear - zfar); - r.m[11] = -1.0f; - r.m[14] = (2.0f * zfar * znear) / (znear - zfar); - return r; -} - -mat4 mat4_translate(float x, float y, float z) { - mat4 r = mat4_identity(); - r.m[12] = x; - r.m[13] = y; - r.m[14] = z; - return r; -} - void camera_process_keyboard(float dt) { float v = camera.speed * dt; @@ -114,10 +126,10 @@ void camera_process_keyboard(float dt) { } void camera_process_mouse(float dx, float dy) { - camera.yaw += dx * camera.sensitivity; + camera.yaw += dx * camera.sensitivity; camera.pitch += dy * camera.sensitivity; - if (camera.pitch > 89.0f) camera.pitch = 89.0f; + if (camera.pitch > 89.0f) camera.pitch = 89.0f; if (camera.pitch < -89.0f) camera.pitch = -89.0f; camera_update_vectors(); diff --git a/dat.h b/dat.h @@ -11,11 +11,11 @@ typedef struct { float x, y, z; } vec3; typedef struct { float m[16]; } mat4; typedef struct { - vec3 position; - vec3 front; - vec3 up; - vec3 right; - vec3 world_up; + vec3 position; + vec3 front; + vec3 up; + vec3 right; + vec3 world_up; float yaw; float pitch; float speed; @@ -23,6 +23,8 @@ typedef struct { float fov; } Camera; +#define CAMERA_FOV 60 + #define FACE_BACK 0 #define FACE_FRONT 1 #define FACE_LEFT 2 @@ -45,6 +47,6 @@ extern GLFWwindow *Window; extern unsigned int Shader; extern Camera camera; extern Block blocks[]; -extern int block_count; +extern int block_count; #endif /* DAT_H */