📄 draw_funcs.h
字号:
// some drawing functions
// 0 = zpos ; 1 = zmin ; 2 = zmax ; 3 = z_grid_dist ;
// 4 = height ; 5 = xmin ; 6 = xmax
// 0 = ypos ; 1 = ymin ; 2 = ymax ; 3 = y_grid_dist ;
// 4 = depth ; 5 = xmin ; 6 = xmax
void draw_x_parallels(double params[7], const int& index1, const int& index2)
{
double* p1;
double* p2;
if(index1 > index2){
p1 = params+4;
p2 = params+2;
}
else{
p1 = params+2;
p2 = params+4;
}
while(params[0] < params[2]){
glVertex3d(params[5],params[index1],params[index2]);
glVertex3d(params[6],params[index1],params[index2]);
params[0] += params[3];
}
glVertex3d(params[5],*p1,*p2);
glVertex3d(params[6],*p1,*p2);
params[0] = 0.0;
while(params[0] > params[1]){
glVertex3d(params[5],params[index1],params[index2]);
glVertex3d(params[6],params[index1],params[index2]);
params[0] -= params[3];
}
if(index1 > index2)
--p2;
else
--p1;
glVertex3d(params[5],*p1,*p2);
glVertex3d(params[6],*p1,*p2);
}
// 0 = xpos ; 1 = xmin ; 2 = xmax ; 3 = x_grid_dist ;
// 4 = depth ; 5 = ymin ; 6 = ymax
// 0 = zpos ; 1 = zmin ; 2 = zmax ; 3 = z_grid_dist ;
// 4 = width ; 5 = ymin ; 6 = ymax
void draw_y_parallels(double params[7], const int& index1, const int& index2)
{
double* p1;
double* p2;
if(index1 > index2){
p1 = params+4;
p2 = params+2;
}
else{
p1 = params+2;
p2 = params+4;
}
while(params[0] < params[2]){
glVertex3d(params[index2],params[5],params[index1]);
glVertex3d(params[index2],params[6],params[index1]);
params[0] += params[3];
}
glVertex3d(*p2,params[5],*p1);
glVertex3d(*p2,params[6],*p1);
params[0] = 0.0;
while(params[0] > params[1]){
glVertex3d(params[index2],params[5],params[index1]);
glVertex3d(params[index2],params[6],params[index1]);
params[0] -= params[3];
}
if(index1 > index2)
--p2;
else
--p1;
glVertex3d(*p2,params[5],*p1);
glVertex3d(*p2,params[6],*p1);
}
// 0 = xpos ; 1 = xmin ; 2 = xmax ; 3 = x_grid_dist ;
// 4 = height ; 5 = zmin ; 6 = zmax
// 0 = ypos ; 1 = ymin ; 2 = ymax ; 3 = y_grid_dist ;
// 4 = width ; 5 = zmin ; 6 = zmax
void draw_z_parallels(double params[7], const int& index1, const int& index2)
{
double* p1;
double* p2;
if(index1 > index2){
p1 = params+4;
p2 = params+2;
}
else{
p1 = params+2;
p2 = params+4;
}
while(params[0] < params[2]){
glVertex3d(params[index2],params[index1],params[5]);
glVertex3d(params[index2],params[index1],params[6]);
params[0] += params[3];
}
glVertex3d(*p2,*p1,params[5]);
glVertex3d(*p2,*p1,params[6]);
params[0] = 0.0;
while(params[0] > params[1]){
glVertex3d(params[index2],params[index1],params[5]);
glVertex3d(params[index2],params[index1],params[6]);
params[0] -= params[3];
}
if(index1 > index2)
--p2;
else
--p1;
glVertex3d(*p2,*p1,params[5]);
glVertex3d(*p2,*p1,params[6]);
}
void draw_front_back(const unsigned int& tex_num, const bool& front)
{
float y_step = tex_height[tex_num];
float x_step = tex_width[tex_num];
if(y_step > (box_ymax - box_ymin)) y_step = box_ymax - box_ymin;
if(x_step > (box_xmax - box_xmin)) x_step = box_xmax - box_xmin;
float xpos = box_xmin;
float xpos2 = box_xmin + x_step;
float ypos = box_ymin;
float ypos2 = box_ymin + y_step;
bool flag = true;
float map_x1 = 0.0f;
float map_x2 = 1.0f;
float z = box_zmin;
if(front){
map_x1 = 1.0f;
map_x2 = 0.0f;
z = box_zmax;
}
if(T[tex_num] != NULL){
glBindTexture(GL_TEXTURE_2D, tex_name[tex_num]);
glBegin(GL_QUADS);
}
else return;
while(ypos<box_ymax)
{
if(flag)
{
while(xpos2 < box_xmax)
{
glTexCoord2f(map_x1, 0.0f); glVertex3f(xpos ,ypos , z);
glTexCoord2f(map_x1, 1.0f); glVertex3f(xpos ,ypos2, z);
glTexCoord2f(map_x2, 1.0f); glVertex3f(xpos2 ,ypos2, z);
glTexCoord2f(map_x2, 0.0f); glVertex3f(xpos2 ,ypos , z);
xpos += x_step;
xpos2 += x_step;
}
xpos2 = box_xmax;
glTexCoord2f(map_x1, 0.0f); glVertex3f(xpos ,ypos , z );
glTexCoord2f(map_x1, 1.0f); glVertex3f(xpos ,ypos2, z );
glTexCoord2f(map_x2, 1.0f); glVertex3f(xpos2 ,ypos2, z );
glTexCoord2f(map_x2, 0.0f); glVertex3f(xpos2 ,ypos , z );
ypos += y_step;
ypos2 += y_step;
flag = false;
}
else
{
glTexCoord2f(map_x2, 0.0f); glVertex3f(xpos2 ,ypos, z );
glTexCoord2f(map_x2, 1.0f); glVertex3f(xpos2 ,ypos2, z );
glTexCoord2f(map_x1, 1.0f); glVertex3f(xpos ,ypos2, z );
glTexCoord2f(map_x1, 0.0f); glVertex3f(xpos ,ypos, z );
xpos2 = xpos + x_step;
do{
xpos -= x_step;
xpos2 -= x_step;
glTexCoord2f(map_x2, 0.0f); glVertex3f(xpos2 ,ypos, z );
glTexCoord2f(map_x2, 1.0f); glVertex3f(xpos2 ,ypos2, z );
glTexCoord2f(map_x1, 1.0f); glVertex3f(xpos ,ypos2, z );
glTexCoord2f(map_x1, 0.0f); glVertex3f(xpos ,ypos, z );
}while(xpos > box_xmin);
ypos += y_step;
ypos2 += y_step;
flag = true;
}
if(ypos2 > box_ymax)
ypos2 = box_ymax;
}
glEnd();
}
void draw_left_right(const unsigned int& tex_num, const bool& left)
{
float y_step = tex_height[tex_num];
float z_step = tex_width[tex_num];
if(y_step > (box_ymax - box_ymin)) y_step = box_ymax - box_ymin;
if(z_step > (box_zmax - box_zmin)) z_step = box_zmax - box_zmin;
float zpos = box_zmin;
float zpos2 = box_zmin + z_step;
float ypos = box_ymin;
float ypos2 = box_ymin + y_step;
bool flag = true;
float map_x1 = 0.0f;
float map_x2 = 1.0f;
float x = box_xmax;
if(left){
map_x1 = 1.0f;
map_x2 = 0.0f;
x = box_xmin;
}
if(T[tex_num] != NULL){
glBindTexture(GL_TEXTURE_2D, tex_name[tex_num]);
glBegin(GL_QUADS);
}
else return;
while(zpos<box_zmax)
{
if(flag)
{
while(ypos2 < box_ymax)
{
glTexCoord2f(map_x1, 0.0f); glVertex3f(x ,ypos, zpos );
glTexCoord2f(map_x1, 1.0f); glVertex3f(x ,ypos2, zpos );
glTexCoord2f(map_x2, 1.0f); glVertex3f(x ,ypos2, zpos2);
glTexCoord2f(map_x2, 0.0f); glVertex3f(x ,ypos , zpos2);
ypos += y_step;
ypos2 += y_step;
}
ypos2 = box_ymax;
glTexCoord2f(map_x1, 0.0f); glVertex3f(x ,ypos , zpos );
glTexCoord2f(map_x1, 1.0f); glVertex3f(x ,ypos2, zpos );
glTexCoord2f(map_x2, 1.0f); glVertex3f(x ,ypos2, zpos2);
glTexCoord2f(map_x2, 0.0f); glVertex3f(x ,ypos , zpos2);
zpos += z_step;
zpos2 += z_step;
flag = false;
}
else
{
glTexCoord2f(map_x2, 0.0f); glVertex3f(x ,ypos , zpos2);
glTexCoord2f(map_x2, 1.0f); glVertex3f(x ,ypos2, zpos2);
glTexCoord2f(map_x1, 1.0f); glVertex3f(x ,ypos2, zpos );
glTexCoord2f(map_x1, 0.0f); glVertex3f(x ,ypos , zpos );
ypos2 = ypos + y_step;
do{
ypos -= y_step;
ypos2 -= y_step;
glTexCoord2f(map_x2, 0.0f); glVertex3f(x ,ypos , zpos2);
glTexCoord2f(map_x2, 1.0f); glVertex3f(x ,ypos2, zpos2);
glTexCoord2f(map_x1, 1.0f); glVertex3f(x ,ypos2, zpos );
glTexCoord2f(map_x1, 0.0f); glVertex3f(x ,ypos , zpos );
}while(ypos > box_ymin);
zpos += z_step;
zpos2 += z_step;
flag = true;
}
if(zpos2 > box_zmax)
zpos2 = box_zmax;
}
glEnd();
}
void draw_bottom_top(const unsigned int& tex_num, const bool& top)
{
float x_step = tex_width[tex_num];
float z_step = tex_height[tex_num];
if(x_step > (box_xmax - box_xmin)) x_step = box_xmax - box_xmin;
if(z_step > (box_zmax - box_zmin)) z_step = box_zmax - box_zmin;
float zpos = box_zmin;
float zpos2 = box_zmin + z_step;
float xpos = box_xmin;
float xpos2 = box_xmin + x_step;
bool flag = true;
float map_y1 = 0.0f;
float map_y2 = 1.0f;
float y = box_ymin;
if(top){
map_y1 = 1.0f;
map_y2 = 0.0f;
y = box_ymax;
}
if(T[tex_num] != NULL){
glBindTexture(GL_TEXTURE_2D, tex_name[tex_num]);
glBegin(GL_QUADS);
}
else return;
while(zpos<box_zmax)
{
if(flag)
{
while(xpos2 < box_xmax)
{
glTexCoord2f(1.0f, map_y1); glVertex3f(xpos ,y, zpos );
glTexCoord2f(1.0f, map_y2); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, map_y2); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, map_y1); glVertex3f(xpos2 ,y, zpos );
xpos += x_step;
xpos2 += x_step;
}
xpos2 = box_xmax;
glTexCoord2f(1.0f, map_y1); glVertex3f(xpos ,y, zpos );
glTexCoord2f(1.0f, map_y2); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, map_y2); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, map_y1); glVertex3f(xpos2 ,y, zpos );
zpos += z_step;
zpos2 += z_step;
flag = false;
}
else
{
glTexCoord2f(0.0f, map_y1); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, map_y2); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, map_y2); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, map_y1); glVertex3f(xpos ,y, zpos );
xpos2 = xpos + x_step;
do{
xpos -= x_step;
xpos2 -= x_step;
glTexCoord2f(0.0f, map_y1); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, map_y2); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, map_y2); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, map_y1); glVertex3f(xpos ,y, zpos );
}while(xpos > box_xmin);
zpos += z_step;
zpos2 += z_step;
flag = true;
}
if(zpos2 > box_zmax)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -