mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-20 15:40:26 +00:00
2D3D:: better stars
This commit is contained in:
parent
42dd86f650
commit
88d6c0d144
@ -642,6 +642,38 @@ void geometry_information::make_ball(hpcshape& sh, ld rad, int lev) {
|
|||||||
add_texture(sh);
|
add_texture(sh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void geometry_information::hpcsquare(hyperpoint h1, hyperpoint h2, hyperpoint h3, hyperpoint h4) {
|
||||||
|
last->flags |= POLY_TRIANGLES;
|
||||||
|
hpcpush(h1);
|
||||||
|
hpcpush(h2);
|
||||||
|
hpcpush(h3);
|
||||||
|
hpcpush(h2);
|
||||||
|
hpcpush(h3);
|
||||||
|
hpcpush(h4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void geometry_information::make_star(hpcshape& sh, ld rad) {
|
||||||
|
bshape(sh, sh.prio);
|
||||||
|
rad = sinh(rad);
|
||||||
|
sh.flags |= POLY_TRIANGLES | POLY_INTENSE;
|
||||||
|
for(int a=0; a<64; a++) {
|
||||||
|
ld z0 = (a-32)/32.;
|
||||||
|
ld z1 = (a-31)/32.;
|
||||||
|
ld r0 = sqrt(1 - z0*z0) * rad;
|
||||||
|
ld r1 = sqrt(1 - z1*z1) * rad;
|
||||||
|
z0 *= rad;
|
||||||
|
z1 *= rad;
|
||||||
|
for(int b=0; b<360; b+=15) {
|
||||||
|
ld b0 = b * degree;
|
||||||
|
ld b1 = (b+15) * degree;
|
||||||
|
hpcsquare(
|
||||||
|
hpxy3(r0 * cos(b0), r0 * sin(b0), z0), hpxy3(r0 * cos(b1), r0 * sin(b1), z0),
|
||||||
|
hpxy3(r1 * cos(b0), r1 * sin(b0), z1), hpxy3(r1 * cos(b1), r1 * sin(b1), z1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hyperpoint psmin(hyperpoint H) {
|
hyperpoint psmin(hyperpoint H) {
|
||||||
hyperpoint res;
|
hyperpoint res;
|
||||||
res[2] = asin_auto(H[2]);
|
res[2] = asin_auto(H[2]);
|
||||||
@ -978,8 +1010,8 @@ void geometry_information::make_3d_models() {
|
|||||||
if(euclid)
|
if(euclid)
|
||||||
make_ball(shSun, 0.5, 2);
|
make_ball(shSun, 0.5, 2);
|
||||||
else
|
else
|
||||||
make_ball(shSun, 3, 5);
|
make_star(shSun, 3);
|
||||||
make_ball(shNightStar, 0.75, 2);
|
make_star(shNightStar, 0.75);
|
||||||
|
|
||||||
if(WDIM == 2) {
|
if(WDIM == 2) {
|
||||||
for(int i=0; i<3; i++) {
|
for(int i=0; i<3; i++) {
|
||||||
|
24
graph.cpp
24
graph.cpp
@ -4633,9 +4633,7 @@ void draw_euclidean_sky() {
|
|||||||
}
|
}
|
||||||
queuecurve(0, 0x0044e4FF, PPR::EUCLIDEAN_SKY).flags |= POLY_TRIANGLES;
|
queuecurve(0, 0x0044e4FF, PPR::EUCLIDEAN_SKY).flags |= POLY_TRIANGLES;
|
||||||
|
|
||||||
auto &sun = queuepolyat(T * zpush(cgi.SKY+0.5) * xpush(cgi.SKY+0.5), cgi.shSun, 0xFFFF00FF, PPR::SKY);
|
queuepolyat(T * zpush(cgi.SKY+0.5) * xpush(cgi.SKY+0.5), cgi.shSun, 0xFFFF00FF, PPR::SKY);
|
||||||
sun.tinf = NULL;
|
|
||||||
sun.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t& wcol) {
|
void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t& wcol) {
|
||||||
@ -4647,9 +4645,7 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
|
|||||||
case 1: {
|
case 1: {
|
||||||
if(euclid) return;
|
if(euclid) return;
|
||||||
if(fieldpattern::fieldval_uniq(c) % 3 == 0) {
|
if(fieldpattern::fieldval_uniq(c) % 3 == 0) {
|
||||||
auto &star = queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
||||||
star.tinf = NULL;
|
|
||||||
star.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
int sk = get_skybrightness();
|
int sk = get_skybrightness();
|
||||||
if(sk > 0) {
|
if(sk > 0) {
|
||||||
@ -4658,9 +4654,7 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
|
|||||||
}
|
}
|
||||||
if(c->land == laAsteroids) {
|
if(c->land == laAsteroids) {
|
||||||
if(fieldpattern::fieldval_uniq(c) % 9 < 3) {
|
if(fieldpattern::fieldval_uniq(c) % 9 < 3) {
|
||||||
auto &downstar = queuepolyat(V * zpush(-0.5-cgi.SKY), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
queuepolyat(V * zpush(-0.5-cgi.SKY), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
||||||
downstar.tinf = NULL;
|
|
||||||
downstar.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
sk = get_skybrightness(-1);
|
sk = get_skybrightness(-1);
|
||||||
auto sky = draw_shapevec(c, V * MirrorZ, cgi.shFullFloor.levels[SIDE_SKY], 0x000000FF + 0x100 * (sk/17), PPR::SKY);
|
auto sky = draw_shapevec(c, V * MirrorZ, cgi.shFullFloor.levels[SIDE_SKY], 0x000000FF + 0x100 * (sk/17), PPR::SKY);
|
||||||
@ -4675,9 +4669,7 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
|
|||||||
if(c->land == laWineyard) {
|
if(c->land == laWineyard) {
|
||||||
col = 0x4040FF;
|
col = 0x4040FF;
|
||||||
if(emeraldval(c) / 4 == 11) {
|
if(emeraldval(c) / 4 == 11) {
|
||||||
auto &sun = queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shSun, 0xFFFF00FF, PPR::SKY);
|
queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shSun, 0xFFFF00FF, PPR::SKY);
|
||||||
sun.tinf = NULL;
|
|
||||||
sun.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -4728,9 +4720,7 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
|
|||||||
if(euclid) return;
|
if(euclid) return;
|
||||||
|
|
||||||
if(true) {
|
if(true) {
|
||||||
auto &star = queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
||||||
star.tinf = NULL;
|
|
||||||
star.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
int sk = get_skybrightness();
|
int sk = get_skybrightness();
|
||||||
if(sk > 0) {
|
if(sk > 0) {
|
||||||
@ -4752,9 +4742,7 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
|
|||||||
|
|
||||||
if(euclid) return;
|
if(euclid) return;
|
||||||
if(true) {
|
if(true) {
|
||||||
auto &star = queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
queuepolyat(V * zpush(cgi.SKY+0.5), cgi.shNightStar, 0xFFFFFFFF, PPR::SKY);
|
||||||
star.tinf = NULL;
|
|
||||||
star.flags |= POLY_INTENSE;
|
|
||||||
}
|
}
|
||||||
int sk = get_skybrightness();
|
int sk = get_skybrightness();
|
||||||
if(sk > 0) {
|
if(sk > 0) {
|
||||||
|
2
hyper.h
2
hyper.h
@ -4467,6 +4467,7 @@ hpcshape
|
|||||||
void prepare_usershapes();
|
void prepare_usershapes();
|
||||||
|
|
||||||
void hpcpush(hyperpoint h);
|
void hpcpush(hyperpoint h);
|
||||||
|
void hpcsquare(hyperpoint h1, hyperpoint h2, hyperpoint h3, hyperpoint h4);
|
||||||
void chasmifyPoly(double fac, double fac2, int k);
|
void chasmifyPoly(double fac, double fac2, int k);
|
||||||
void shift(hpcshape& sh, double dx, double dy, double dz);
|
void shift(hpcshape& sh, double dx, double dy, double dz);
|
||||||
void initPolyForGL();
|
void initPolyForGL();
|
||||||
@ -4522,6 +4523,7 @@ hpcshape
|
|||||||
void slimetriangle(hyperpoint a, hyperpoint b, hyperpoint c, ld rad, int lev);
|
void slimetriangle(hyperpoint a, hyperpoint b, hyperpoint c, ld rad, int lev);
|
||||||
void balltriangle(hyperpoint a, hyperpoint b, hyperpoint c, ld rad, int lev);
|
void balltriangle(hyperpoint a, hyperpoint b, hyperpoint c, ld rad, int lev);
|
||||||
void make_ball(hpcshape& sh, ld rad, int lev);
|
void make_ball(hpcshape& sh, ld rad, int lev);
|
||||||
|
void make_star(hpcshape& sh, ld rad);
|
||||||
void adjust_eye(hpcshape& eye, hpcshape head, ld shift_eye, ld shift_head, int q, ld zoom=1);
|
void adjust_eye(hpcshape& eye, hpcshape head, ld shift_eye, ld shift_head, int q, ld zoom=1);
|
||||||
void shift_last_straight(ld z);
|
void shift_last_straight(ld z);
|
||||||
void queueball(const transmatrix& V, ld rad, color_t col, eItem what);
|
void queueball(const transmatrix& V, ld rad, color_t col, eItem what);
|
||||||
|
Loading…
Reference in New Issue
Block a user