void draw() { Matrix4 view; Matrix4 projection; parg_zcam_matrices(&projection, &view); Matrix4 model = M4MakeIdentity(); Matrix4 modelview = M4Mul(view, model); Matrix4 mvp = M4Mul(projection, modelview); parg_draw_clear(); parg_shader_bind(P_SIMPLE); parg_uniform_matrix4f(U_MVP, &mvp); parg_varray_enable( parg_mesh_coord(trimesh), A_POSITION, 2, PARG_FLOAT, 0, 0); parg_draw_triangles(0, parg_mesh_ntriangles(trimesh)); }
void draw() { Matrix4 view; Matrix4 projection; parg_zcam_matrices(&projection, &view); Matrix4 model = M4MakeIdentity(); Matrix4 modelview = M4Mul(view, model); Matrix4 mvp = M4Mul(projection, modelview); parg_draw_clear(); parg_shader_bind(P_SIMPLE); parg_texture_bind(palmstexture, 0); parg_uniform_matrix4f(U_MVP, &mvp); parg_varray_enable( parg_mesh_coord(rectmesh), A_POSITION, 2, PARG_FLOAT, 0, 0); parg_varray_enable(parg_mesh_uv(rectmesh), A_TEXCOORD, 2, PARG_FLOAT, 0, 0); parg_draw_one_quad(); }
void init(float winwidth, float winheight, float pixratio) { resolution = pixratio * winwidth; par_shapes_mesh* shape; shape = par_shapes_create_cylinder(30, 3); float axis[3] = {1, 0, 0}; par_shapes_rotate(shape, PARG_PI * 0.5, axis); cylinder = parg_mesh_from_shape(shape); par_shapes_free_mesh(shape); shape = par_shapes_create_plane(3, 3); par_shapes_scale(shape, 4, 4, 1); par_shapes_translate(shape, -2, -2, -1); backdrop = parg_mesh_from_shape(shape); par_shapes_free_mesh(shape); kleingeo = parg_mesh_from_asset(M_KLEIN); parg_mesh_send_to_gpu(kleingeo); kleintex = parg_texture_from_asset_linear(T_KLEIN); abstract = parg_texture_from_asset(T_ABSTRACT); logo = parg_texture_from_asset(T_LOGO); rust = parg_texture_from_asset(T_RUST); billboard = parg_mesh_rectangle(1, 1); reflection = parg_framebuffer_create_empty( 512, 512, PARG_FBO_LINEAR | PARG_FBO_ALPHA | PARG_FBO_DEPTH); const Vector4 transparent = {0, 0, 0, 0}; parg_state_clearcolor(transparent); parg_state_depthtest(1); parg_state_cullfaces(1); parg_shader_load_from_asset(S_SIMPLE); const float h = 1.0f; const float w = h * winwidth / winheight; const float znear = 4; const float zfar = 20; projection = M4MakeFrustum(-w, w, -h, h, znear, zfar); Point3 eye = {0, 1.8, 5}; Point3 target = {0, 0.7, 0}; Vector3 up = {0, 1, 0}; view = M4MakeLookAt(eye, target, up); model = M4MakeIdentity(); }
void draw() { int mesh = 0, multi = 0, meshcolor = 0; switch (state) { case STATE_GRAY_SOURCE: parg_shader_bind(P_GRAY); parg_texture_bind(graytex, 0); parg_uniform1f(U_ZSCALE, 1); break; case STATE_COLOR_IH: mesh = 1; parg_shader_bind(P_GRAYMESH); parg_uniform1f(U_ZSCALE, 0.3); break; case STATE_COLOR_DHSCSI: mesh = multi = 1; parg_shader_bind(P_GRAYMESH); parg_uniform1f(U_ZSCALE, 0.3); break; case STATE_MULTI_RGBA: case STATE_MULTI_RGB: case STATE_MULTI_DIAGRAM: meshcolor = mesh = multi = 1; parg_shader_bind(P_GRAYMESH); parg_uniform1f(U_ZSCALE, 0.25); break; case STATE_COLOR_DEFAULT: case STATE_GRAY_DEFAULT: case STATE_GRAY_SIMPLIFY: case STATE_GRAY_INVERT: case STATE_GRAY_HEIGHTS: mesh = 1; parg_shader_bind(P_GRAYMESH); parg_uniform1f(U_ZSCALE, 1); break; case STATE_GRAY_MULTI: mesh = multi = 1; parg_shader_bind(P_GRAYMESH); parg_texture_bind(colortex, 0); parg_uniform1f(U_ZSCALE, 0.3); break; case STATE_GRAY_DUAL: mesh = multi = 1; parg_shader_bind(P_GRAYMESH); parg_texture_bind(colortex, 0); parg_uniform1f(U_ZSCALE, 1); break; case STATE_GRAY_DHS: case STATE_GRAY_DHSC: mesh = multi = 1; parg_shader_bind(P_GRAYMESH); parg_texture_bind(colortex, 0); parg_uniform1f(U_ZSCALE, 0.5); break; case STATE_COLOR_SOURCE: parg_texture_bind(colortex, 0); parg_shader_bind(P_COLOR); parg_uniform1f(U_ZSCALE, 1); break; default: break; } if (mesh) { for (int i = 0; i < sizeof(trimesh) / sizeof(trimesh[0]); i++) { parg_mesh_free(trimesh[i]); } memset(trimesh, 0, sizeof(trimesh)); create_mesh(); } Matrix4 model; if (mesh) { model = M4MakeScale(V3MakeFromElems(20, 20, 10)); model = M4Mul(M4MakeTranslation(V3MakeFromElems(-10, -10, 0)), model); } else { model = M4MakeIdentity(); } Matrix4 modelview = M4Mul(view, model); Matrix4 mvp = M4Mul(projection, modelview); parg_uniform_matrix4f(U_MVP, &mvp); parg_draw_clear(); if (mesh) { Vector4 colors[3]; colors[0] = (Vector4){0, 0.6, 0.9, 1}; colors[1] = (Vector4){0, 0.9, 0.6, 1}; colors[2] = (Vector4){0.9, 0.6, 0, 1}; Vector4 black = {0, 0, 0, 1.0}; for (int imesh = 0; imesh < nmeshes; imesh++) { parg_varray_enable(parg_mesh_coord(trimesh[imesh]), A_POSITION, 3, PARG_FLOAT, 0, 0); parg_varray_bind(parg_mesh_index(trimesh[imesh])); if (meshcolor) { unsigned int b = meshcolors[imesh] & 0xff; unsigned int g = (meshcolors[imesh] >> 8) & 0xff; unsigned int r = (meshcolors[imesh] >> 16) & 0xff; unsigned int a = (meshcolors[imesh] >> 24) & 0xff; Vector4 color; color.x = r / 255.0f; color.y = g / 255.0f; color.z = b / 255.0f; color.w = a / 255.0f; parg_uniform4f(U_COLOR, &color); } else { parg_uniform4f(U_COLOR, &colors[imesh]); } parg_draw_triangles_u16(0, parg_mesh_ntriangles(trimesh[imesh])); parg_uniform4f(U_COLOR, &black); parg_draw_wireframe_triangles_u16( 0, parg_mesh_ntriangles(trimesh[imesh])); } } else {