diff --git a/client/main.c b/client/main.c index 3ff1cb0..dead48c 100644 --- a/client/main.c +++ b/client/main.c @@ -39,12 +39,24 @@ static void tick(void){ } static GSVector3 rot = {0, 0, 0}; +static GSVector3 pos = {0, 0, 0}; static GSModel model = NULL; static void render(GSEngine self){ GSGL gl = GSClientGetGL(GSEngineGetClient(self)); + pos[1] = 0; + GSGLPushMatrix(gl); + GSGLSetPosition(gl, pos); + GSGLSetRotation(gl, rot); + if(model != NULL) GSModelDraw(model); + GSGLPopMatrix(gl); + + pos[1] = 1; + + GSGLPushMatrix(gl); + GSGLSetPosition(gl, pos); GSGLSetRotation(gl, rot); if(model != NULL) GSModelDraw(model); GSGLPopMatrix(gl); @@ -52,6 +64,9 @@ static void render(GSEngine self){ static void after_render(GSEngine self){ rot[0] = rot[1] = rot[2] += (1.0 / GSEngineGetTPS(self)) * 90; + + pos[0] = cos(rot[0] / 180 * GSMathPi); + pos[2] = sin(rot[0] / 180 * GSMathPi); } #ifndef _WIN32 @@ -86,7 +101,7 @@ int main(int argc, char** argv){ GSClientSetSkybox(GSEngineGetClient(engine), GSTrue); - if((sound = GSSoundOpen(GSClientGetSoundEngine(GSEngineGetClient(engine)), "game:/shanghai.mp3")) != NULL){ + if((sound = GSSoundOpen(GSClientGetSoundEngine(GSEngineGetClient(engine)), "game:/df97.xm")) != NULL){ GSSoundSetLoop(sound, 1); GSSoundStart(sound); } diff --git a/engine/src/client.c b/engine/src/client.c index ff33c15..b31d292 100644 --- a/engine/src/client.c +++ b/engine/src/client.c @@ -98,6 +98,17 @@ void GSClientDestroy(GSClient client) { static void scene(GSClient client) { if(client->engine->param->render != NULL) client->engine->param->render(client->engine); + + GSVector3 n = {0, 1, 0}; + GSVector3 q[] = { + {-3, -1, 3}, + {-3, -1, -3}, + {3, -1, -3}, + {3, -1, 3}}; + + GSGLTextureSet(client->gl, 2); + GSGLPolygon(client->gl, 4, q, NULL, n); + GSGLTextureSet(client->gl, 0); } void GSClientStep(GSClient client) { diff --git a/engine/src/gl/gl_camera.c b/engine/src/gl/gl_camera.c index 5b94aa3..a0b2e23 100644 --- a/engine/src/gl/gl_camera.c +++ b/engine/src/gl/gl_camera.c @@ -52,17 +52,17 @@ void GSGLCameraLookAt(GSGL gl, GSVector3 camera, GSVector3 look_at) { for(i = 0; i < 16; i++) matrix[i] = 0; matrix[4 * 0 + 0] = s[0]; matrix[4 * 1 + 0] = s[1]; - matrix[4 * 2 + 0] = s[2]; + matrix[4 * 2 + 0] = -s[2]; matrix[4 * 0 + 1] = u[0]; matrix[4 * 1 + 1] = u[1]; - matrix[4 * 2 + 1] = u[2]; + matrix[4 * 2 + 1] = -u[2]; matrix[4 * 0 + 2] = -f[0]; matrix[4 * 1 + 2] = -f[1]; - matrix[4 * 2 + 2] = -f[2]; + matrix[4 * 2 + 2] = f[2]; matrix[4 * 3 + 3] = 1; glMultMatrixd(matrix); - glTranslated(-camera[0], -camera[1], -camera[2]); + glTranslated(-camera[0], -camera[1], camera[2]); } void GSGLCameraSetup(GSGL gl) { diff --git a/engine/src/model.c b/engine/src/model.c index bd5ee3c..2648b6e 100644 --- a/engine/src/model.c +++ b/engine/src/model.c @@ -137,7 +137,7 @@ static void parse_obj(GSModel model, char* txt) { if(arrlen(model->vertex) > varr[i] * 3) { face.vertex[i][0] = (model->vertex[varr[i] * 3 + 0] - lm - lr / 2) / sc; face.vertex[i][1] = (model->vertex[varr[i] * 3 + 1] - dm - ud / 2) / sc; - face.vertex[i][2] = (model->vertex[varr[i] * 3 + 2] - bm - bf / 2) / sc; + face.vertex[i][2] = -(model->vertex[varr[i] * 3 + 2] - bm - bf / 2) / sc; } if(arrlen(model->texcoord) > tarr[i] * 2) { @@ -147,8 +147,8 @@ static void parse_obj(GSModel model, char* txt) { } } - if(c == 3) GSMathNormal3x3(face.normal, face.vertex[0], face.vertex[1], face.vertex[2]); - if(c == 4) GSMathNormal3x4(face.normal, face.vertex[0], face.vertex[1], face.vertex[2], face.vertex[3]); + if(c == 3) GSMathNormal3x3(face.normal, face.vertex[2], face.vertex[1], face.vertex[0]); + if(c == 4) GSMathNormal3x4(face.normal, face.vertex[3], face.vertex[2], face.vertex[1], face.vertex[0]); arrput(model->face, face); } diff --git a/engine/src/skybox.c b/engine/src/skybox.c index 09cf67f..3f18299 100644 --- a/engine/src/skybox.c +++ b/engine/src/skybox.c @@ -100,45 +100,45 @@ void GSSkyBoxDraw(GSSkyBox skybox) { if(i == 0) { tex = skybox->left; - v[0][0] = -1, v[0][1] = 1 + s, v[0][2] = 1 + s; - v[1][0] = -1, v[1][1] = -1 - s, v[1][2] = 1 + s; - v[2][0] = -1, v[2][1] = -1 - s, v[2][2] = -1 - s; - v[3][0] = -1, v[3][1] = 1 + s, v[3][2] = -1 - s; + v[0][0] = -1, v[0][1] = 1 + s, v[0][2] = -1 - s; + v[1][0] = -1, v[1][1] = -1 - s, v[1][2] = -1 - s; + v[2][0] = -1, v[2][1] = -1 - s, v[2][2] = 1 + s; + v[3][0] = -1, v[3][1] = 1 + s, v[3][2] = 1 + s; } else if(i == 1) { tex = skybox->right; - v[0][0] = 1, v[0][1] = 1 + s, v[0][2] = -1 - s; - v[1][0] = 1, v[1][1] = -1 - s, v[1][2] = -1 - s; - v[2][0] = 1, v[2][1] = -1 - s, v[2][2] = 1 + s; - v[3][0] = 1, v[3][1] = 1 + s, v[3][2] = 1 + s; + v[0][0] = 1, v[0][1] = 1 + s, v[0][2] = 1 + s; + v[1][0] = 1, v[1][1] = -1 - s, v[1][2] = 1 + s; + v[2][0] = 1, v[2][1] = -1 - s, v[2][2] = -1 - s; + v[3][0] = 1, v[3][1] = 1 + s, v[3][2] = -1 - s; } else if(i == 2) { tex = skybox->front; - v[0][0] = -1 - s, v[0][1] = 1 + s, v[0][2] = -1; - v[1][0] = -1 - s, v[1][1] = -1 - s, v[1][2] = -1; - v[2][0] = 1 + s, v[2][1] = -1 - s, v[2][2] = -1; - v[3][0] = 1 + s, v[3][1] = 1 + s, v[3][2] = -1; + v[0][0] = -1 - s, v[0][1] = 1 + s, v[0][2] = 1; + v[1][0] = -1 - s, v[1][1] = -1 - s, v[1][2] = 1; + v[2][0] = 1 + s, v[2][1] = -1 - s, v[2][2] = 1; + v[3][0] = 1 + s, v[3][1] = 1 + s, v[3][2] = 1; } else if(i == 3) { tex = skybox->back; - v[0][0] = 1 + s, v[0][1] = 1 + s, v[0][2] = 1; - v[1][0] = 1 + s, v[1][1] = -1 - s, v[1][2] = 1; - v[2][0] = -1 - s, v[2][1] = -1 - s, v[2][2] = 1; - v[3][0] = -1 - s, v[3][1] = 1 + s, v[3][2] = 1; + v[0][0] = 1 + s, v[0][1] = 1 + s, v[0][2] = -1; + v[1][0] = 1 + s, v[1][1] = -1 - s, v[1][2] = -1; + v[2][0] = -1 - s, v[2][1] = -1 - s, v[2][2] = -1; + v[3][0] = -1 - s, v[3][1] = 1 + s, v[3][2] = -1; } else if(i == 4) { tex = skybox->up; - v[0][0] = -1 - s, v[0][1] = 1, v[0][2] = 1 + s; - v[1][0] = -1 - s, v[1][1] = 1, v[1][2] = -1 - s; - v[2][0] = 1 + s, v[2][1] = 1, v[2][2] = -1 - s; - v[3][0] = 1 + s, v[3][1] = 1, v[3][2] = 1 + s; + v[0][0] = -1 - s, v[0][1] = 1, v[0][2] = -1 - s; + v[1][0] = -1 - s, v[1][1] = 1, v[1][2] = 1 + s; + v[2][0] = 1 + s, v[2][1] = 1, v[2][2] = 1 + s; + v[3][0] = 1 + s, v[3][1] = 1, v[3][2] = -1 - s; } else if(i == 5) { tex = skybox->down; - v[0][0] = -1 - s, v[0][1] = -1, v[0][2] = -1 - s; - v[1][0] = -1 - s, v[1][1] = -1, v[1][2] = 1 + s; - v[2][0] = 1 + s, v[2][1] = -1, v[2][2] = 1 + s; - v[3][0] = 1 + s, v[3][1] = -1, v[3][2] = -1 - s; + v[0][0] = -1 - s, v[0][1] = -1, v[0][2] = 1 + s; + v[1][0] = -1 - s, v[1][1] = -1, v[1][2] = -1 - s; + v[2][0] = 1 + s, v[2][1] = -1, v[2][2] = -1 - s; + v[3][0] = 1 + s, v[3][1] = -1, v[3][2] = 1 + s; } GSGLTextureSet(gl, tex); @@ -159,10 +159,10 @@ void GSSkyBoxDraw(GSSkyBox skybox) { n[1] = -1; n[2] = 0; - vc[0][0] = -1 - s, vc[0][1] = 1, vc[0][2] = 1 - s; - vc[1][0] = -1 - s, vc[1][1] = 1, vc[1][2] = -1 + s; - vc[2][0] = 1 - s, vc[2][1] = 1, vc[2][2] = -1 + s; - vc[3][0] = 1 - s, vc[3][1] = 1, vc[3][2] = 1 - s; + vc[0][0] = -1 - s, vc[0][1] = 1, vc[0][2] = -1 - s; + vc[1][0] = -1 - s, vc[1][1] = 1, vc[1][2] = 1 + s; + vc[2][0] = 1 - s, vc[2][1] = 1, vc[2][2] = 1 + s; + vc[3][0] = 1 - s, vc[3][1] = 1, vc[3][2] = -1 - s; tc[0][0] = -1, tc[0][1] = -1; tc[1][0] = -1, tc[1][1] = 1; diff --git a/engine/logo.sh b/engine/tools/logo.sh similarity index 100% rename from engine/logo.sh rename to engine/tools/logo.sh