idk anymore
This commit is contained in:
parent
6b4602a984
commit
b6e7ca8c06
5 changed files with 90 additions and 15 deletions
68
client/gl.c
68
client/gl.c
|
|
@ -18,8 +18,30 @@ void gl_resize(int width, int height) {
|
|||
}
|
||||
|
||||
void gl_init(void) {
|
||||
GLfloat lightamb[] = {0.1, 0.1, 0.1, 1.0};
|
||||
GLfloat lightcol[] = {1.0, 1.0, 1.0, 1.0};
|
||||
const GLdouble genfunc[][4] = {
|
||||
{1.0, 0.0, 0.0, 0.0},
|
||||
{0.0, 1.0, 0.0, 0.0},
|
||||
{0.0, 0.0, 1.0, 0.0},
|
||||
{0.0, 0.0, 0.0, 1.0},
|
||||
};
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_NORMALIZE);
|
||||
glEnable(GL_BLEND);
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glEnable(GL_LIGHT0);
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_CULL_FACE);
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, lightamb);
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightcol);
|
||||
glLightfv(GL_LIGHT0, GL_SPECULAR, lightcol);
|
||||
|
||||
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
|
||||
|
||||
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
||||
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||
|
||||
|
|
@ -28,22 +50,62 @@ void gl_init(void) {
|
|||
gl_font_init();
|
||||
}
|
||||
|
||||
static void gl_common(void) {
|
||||
char buf[128];
|
||||
glColor3f(1, 0, 0);
|
||||
|
||||
sprintf(buf, "AssaultFish %s", AF_VERSION);
|
||||
gl_font_text(buf, MwGetInteger(opengl, MwNwidth) - gl_font_width(buf), MwGetInteger(opengl, MwNheight) - gl_font_height(buf) * 2, 1);
|
||||
|
||||
sprintf(buf, "%s", AF_COPYRIGHT);
|
||||
gl_font_text(buf, MwGetInteger(opengl, MwNwidth) - gl_font_width(buf), MwGetInteger(opengl, MwNheight) - gl_font_height(buf), 1);
|
||||
}
|
||||
|
||||
void gl_render(void) {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
GLfloat lightpos[4] = {0, 5, 0, 1};
|
||||
GLdouble modelview[16];
|
||||
|
||||
if(gl_scenes[gl_scene].init != NULL) gl_scenes[gl_scene].init();
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(60, (double)MwGetInteger(opengl, MwNwidth) / MwGetInteger(opengl, MwNheight), 0.01, 100);
|
||||
|
||||
gluPerspective(60, (double)MwGetInteger(opengl, MwNwidth) / MwGetInteger(opengl, MwNheight), 0.01, 100.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
gluLookAt(gl_cam_x, gl_cam_y, gl_cam_z, gl_cam_x + cos(gl_cam_lr / 180.0 * M_PI), gl_cam_y + sin(gl_cam_ud / 180.0 * M_PI), gl_cam_z + sin(gl_cam_lr / 180.0 * M_PI), 0, 1, 0);
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
|
||||
|
||||
if(gl_scenes[gl_scene].draw != NULL) gl_scenes[gl_scene].draw();
|
||||
|
||||
gl_common();
|
||||
}
|
||||
|
||||
void gl_scene_change(void) {
|
||||
if(gl_scenes[gl_scene].changed != NULL) gl_scenes[gl_scene].changed();
|
||||
}
|
||||
|
||||
static void cross(double* out, double v00, double v01, double v02, double v10, double v11, double v12) {
|
||||
out[0] = v01 * v12 - v02 * v11;
|
||||
out[1] = v02 * v10 - v00 * v12;
|
||||
out[2] = v00 * v11 - v01 * v10;
|
||||
}
|
||||
|
||||
void gl_calc_normal(double* out, double v00, double v01, double v02, double v10, double v11, double v12, double v20, double v21, double v22) {
|
||||
double v[3];
|
||||
double l = 0;
|
||||
int i;
|
||||
|
||||
cross(&v[0], /**/
|
||||
v10 - v00, v11 - v01, v12 - v02, /**/
|
||||
v20 - v00, v21 - v01, v22 - v02 /**/
|
||||
);
|
||||
|
||||
l = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
||||
|
||||
for(i = 0; i < 3; i++) {
|
||||
out[i] = v[i] / l;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ void gl_font_init(void) {
|
|||
void gl_font_text(const char* text, int x, int y, double scale) {
|
||||
int i;
|
||||
int gw = font_width / 16 * scale, gh = font_height / 16 * scale;
|
||||
int is = glIsEnabled(GL_TEXTURE_2D) ? 1 : 0;
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
if(!is) glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, font_atlas);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
|
|
@ -61,7 +62,7 @@ void gl_font_text(const char* text, int x, int y, double scale) {
|
|||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
if(!is) glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,23 +18,32 @@ void gl_main_init(void) {
|
|||
void gl_main_draw(void) {
|
||||
int i;
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glPushMatrix();
|
||||
glRotatef(rad, 1, 0, 0);
|
||||
glRotatef(rad, 0, 1, 0);
|
||||
glRotatef(rad, 0, 0, 1);
|
||||
glBegin(GL_TRIANGLES);
|
||||
for(i = 0; i < 8; i++) {
|
||||
double r = i * 90 / 180.0 * M_PI;
|
||||
int c = ((i + (i / 4)) % 2) == 0 ? 1 : 0;
|
||||
glColor4f(c ? 0.75 : 0, 0, c ? 0 : 0.75, 0.5);
|
||||
glVertex3f(0, (i > 3 ? -1 : 1) * 0.5, 0);
|
||||
glVertex3f(cos(r) / 2, 0, sin(r) / 2);
|
||||
glVertex3f(cos(r + 90 / 180.0 * M_PI) / 2, 0, sin(r + 90 / 180.0 * M_PI) / 2);
|
||||
int c = (i % 2) == 0 ? 1 : 0;
|
||||
double n[3];
|
||||
double u = 0.3;
|
||||
|
||||
gl_calc_normal(&n[0], 0, u * 1.4, 0, -u, 0, u, u, 0, u);
|
||||
|
||||
glColor3f(c ? 0.75 : 0, 0, c ? 0 : 0.75);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glNormal3f(n[0], n[1], n[2]);
|
||||
glVertex3f(0, u * 1.4, 0);
|
||||
glVertex3f(-u, 0, u);
|
||||
glVertex3f(u, 0, u);
|
||||
glEnd();
|
||||
glRotatef(90, 0, 1, 0);
|
||||
if(i == 3) {
|
||||
glRotatef(180, 0, 0, 1);
|
||||
glRotatef(90, 0, 1, 0);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
rad += 60.0 / (1000.0 / AF_WAIT_MS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ void gl_init(void);
|
|||
void gl_render(void);
|
||||
void gl_resize(int width, int height);
|
||||
void gl_scene_change(void);
|
||||
void gl_calc_normal(double* out, double v00, double v01, double v02, double v10, double v11, double v12, double v20, double v21, double v22);
|
||||
|
||||
/* gl_font.c */
|
||||
void gl_font_init(void);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
#endif
|
||||
|
||||
#define AF_DEFAULT_PORT 5312
|
||||
#define AF_VERSION "0.0.0"
|
||||
#define AF_COPYRIGHT "Copyright (C) 2025 Fishsoup"
|
||||
|
||||
/* should be broadcasted! otherwise other user wouldn't know */
|
||||
typedef struct af_pkt_join {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue