diff --git a/polygons.cpp b/polygons.cpp index 7e527c41..163c08fc 100644 --- a/polygons.cpp +++ b/polygons.cpp @@ -317,13 +317,15 @@ void glapplymatrix(const transmatrix& V) { glMultMatrixf(mat); } +int tinfshift; + void gldraw(int useV, const transmatrix& V, int ps, int pq, int col, int outline, int flags, textureinfo *tinf) { if(tinf) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tinf->texture_id); glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(3, GL_FLOAT, 0, &tinf->tvertices[0]); + glTexCoordPointer(3, GL_FLOAT, 0, &tinf->tvertices[tinfshift]); } for(int ed = vid.goteyes ? -1 : 0; ed<2; ed+=2) { @@ -519,7 +521,21 @@ unsigned char& part(int& col, int i) { } void drawpolyline(polytodraw& p) { - auto pp = p.u.poly; + auto& pp = p.u.poly; + + if(sphere && pp.tinf && pp.cnt > 3) { + int i = pp.cnt; + pp.cnt = 3; + for(int j=0; jtvertices[i*3], p.col); + drawTexturedTriangle(s, polyx+i, polyy+i, &pp.tinf->tvertices[tinfshift + i*3], p.col); #endif } else if(poly_flags & POLY_INVERSE) { diff --git a/textures.cpp b/textures.cpp index aa8f0558..b93294f7 100644 --- a/textures.cpp +++ b/textures.cpp @@ -227,9 +227,9 @@ void mapTextureTriangle(textureinfo &mi, array v, int splits = gs if(splits) { array v2 = { mid(v[1], v[2]), mid(v[2], v[0]), mid(v[0], v[1]) }; - mapTextureTriangle(mi, {v[0], v2[1], v2[2]}, splits-1); - mapTextureTriangle(mi, {v[1], v2[2], v2[0]}, splits-1); - mapTextureTriangle(mi, {v[2], v2[0], v2[1]}, splits-1); + mapTextureTriangle(mi, {v[0], v2[2], v2[1]}, splits-1); + mapTextureTriangle(mi, {v[1], v2[0], v2[2]}, splits-1); + mapTextureTriangle(mi, {v[2], v2[1], v2[0]}, splits-1); mapTextureTriangle(mi, {v2[0], v2[1], v2[2]}, splits-1); return; } @@ -245,7 +245,7 @@ void mapTextureTriangle(textureinfo &mi, array v, int splits = gs mi.tvertices.push_back((inmodel[0]+1)/2); mi.tvertices.push_back((inmodel[1]+1)/2); mi.tvertices.push_back(0); - } + } } map texture_map, texture_map_orig; @@ -269,8 +269,8 @@ void mapTexture(cell *c, textureinfo& mi, patterns::patterninfo &si, const trans for(int i=0; itype; i++) { int i2 = i+shift; - hyperpoint h1 = spin(M_PI + M_PI * (2*i2 +1) / c->type) * xpush(z) * C0; - hyperpoint h2 = spin(M_PI + M_PI * (2*i2 -1) / c->type) * xpush(z) * C0; + hyperpoint h1 = spin(M_PI + M_PI * (2*i2 -1) / c->type) * xpush(z) * C0; + hyperpoint h2 = spin(M_PI + M_PI * (2*i2 +1) / c->type) * xpush(z) * C0; mapTextureTriangle(mi, {C0, h1, h2}); } }