📄 draw_funcs.h
字号:
zpos2 = box_zmax;
}
glEnd();
}
void draw_box(d3_gl_window* d3_gl_win, gl_window* gl_win)
{
if(texturing_box){
glEnable(GL_TEXTURE_2D);
draw_front_back(FRONT , true);
draw_front_back(BACK , false);
draw_left_right(LEFT , true);
draw_left_right(RIGHT , false);
draw_bottom_top(TOP , true);
draw_bottom_top(BOTTOM , false);
glDisable(GL_TEXTURE_2D);
}
if(box_filling){
box_fill_color();
glBegin(GL_QUADS);
// left
glVertex3f(box_xmin,box_ymin,box_zmin);
glVertex3f(box_xmin,box_ymin,box_zmax);
glVertex3f(box_xmin,box_ymax,box_zmax);
glVertex3f(box_xmin,box_ymax,box_zmin);
// right
glVertex3f(box_xmax,box_ymin,box_zmin);
glVertex3f(box_xmax,box_ymin,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmin);
// bottom
glVertex3f(box_xmin,box_ymin,box_zmin);
glVertex3f(box_xmin,box_ymin,box_zmax);
glVertex3f(box_xmax,box_ymin,box_zmax);
glVertex3f(box_xmax,box_ymin,box_zmin);
// top
glVertex3f(box_xmin,box_ymax,box_zmin);
glVertex3f(box_xmin,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmin);
// front
glVertex3f(box_xmin,box_ymin,box_zmax);
glVertex3f(box_xmin,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymin,box_zmax);
// back
glVertex3f(box_xmin,box_ymin,box_zmin);
glVertex3f(box_xmin,box_ymax,box_zmin);
glVertex3f(box_xmax,box_ymax,box_zmin);
glVertex3f(box_xmax,box_ymin,box_zmin);
glEnd();
}
if(box_inlines){
box_line_color();
glLineWidth(box_line_width);
glBegin(GL_LINES);
//---------------------------------------
double params[7];
params[0] = 0.0;
params[1] = box_zmin;
params[2] = box_zmax;
params[3] = d3gl_win->get_z_grid_dist();
params[4] = box_ymin;
params[5] = box_xmin;
params[6] = box_xmax;
draw_x_parallels(params,4,0);
params[0] = 0.0;
params[4] = box_ymax;
draw_x_parallels(params,4,0);
params[0] = 0.0;
params[1] = box_ymin;
params[2] = box_ymax;
params[3] = d3gl_win->get_y_grid_dist();
params[4] = box_zmin;
draw_x_parallels(params,0,4);
params[0] = 0.0;
params[4] = box_zmax;
draw_x_parallels(params,0,4);
//----------------------------------------
params[0] = 0.0;
params[1] = box_xmin;
params[2] = box_xmax;
params[3] = d3gl_win->get_x_grid_dist();
params[4] = box_zmin;
params[5] = box_ymin;
params[6] = box_ymax;
draw_y_parallels(params,4,0);
params[0] = 0.0;
params[4] = box_zmax;
draw_y_parallels(params,4,0);
params[0] = 0.0;
params[1] = box_zmin;
params[2] = box_zmax;
params[3] = d3gl_win->get_z_grid_dist();
params[4] = box_xmin;
params[5] = box_ymin;
params[6] = box_ymax;
draw_y_parallels(params,0,4);
params[0] = 0.0;
params[4] = box_xmax;
draw_y_parallels(params,0,4);
//----------------------------------------
params[0] = 0.0;
params[1] = box_xmin;
params[2] = box_xmax;
params[3] = d3gl_win->get_x_grid_dist();
params[4] = box_ymin;
params[5] = box_zmin;
params[6] = box_zmax;
draw_z_parallels(params,4,0);
params[0] = 0.0;
params[4] = box_ymax;
draw_z_parallels(params,4,0);
params[0] = 0.0;
params[1] = box_ymin;
params[2] = box_ymax;
params[3] = d3gl_win->get_y_grid_dist();
params[4] = box_xmin;
params[5] = box_zmin;
params[6] = box_zmax;
draw_z_parallels(params,0,4);
params[0] = 0.0;
params[4] = box_xmax;
draw_z_parallels(params,0,4);
glEnd();
}
if(box_outlines){
box_line_color();
glLineWidth(box_line_width);
glBegin(GL_LINE_LOOP);
glVertex3f(box_xmin,box_ymin,box_zmin);
glVertex3f(box_xmin,box_ymin,box_zmax);
glVertex3f(box_xmin,box_ymax,box_zmax);
glVertex3f(box_xmin,box_ymax,box_zmin);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(box_xmax,box_ymin,box_zmin);
glVertex3f(box_xmax,box_ymin,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmax);
glVertex3f(box_xmax,box_ymax,box_zmin);
glEnd();
glBegin(GL_LINES);
glVertex3f(box_xmin,box_ymax,box_zmin); glVertex3f(box_xmax,box_ymax,box_zmin);
glVertex3f(box_xmin,box_ymax,box_zmax); glVertex3f(box_xmax,box_ymax,box_zmax);
glVertex3f(box_xmin,box_ymin,box_zmin); glVertex3f(box_xmax,box_ymin,box_zmin);
glVertex3f(box_xmin,box_ymin,box_zmax); glVertex3f(box_xmax,box_ymin,box_zmax);
glEnd();
}
}
void texture_plane(const unsigned int& tex_num)
{
float x_step = tex_width[tex_num];
float z_step = tex_height[tex_num];
if(x_step > plane_xmax ) x_step = plane_xmax;
if(z_step > - plane_zmin ) z_step = - plane_zmin;
float zpos = 0.0f;
float zpos2 = - z_step;
float xpos = 0.0f;
float xpos2 = x_step;
float y = plane_height;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex_name[tex_num]);
glBegin(GL_QUADS);
// right-top
while(zpos > plane_zmin){
while(xpos2 < plane_xmax) {
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos );
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
xpos += x_step;
xpos2 += x_step;
}
xpos2 = plane_xmax;
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos );
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
xpos = 0.0f;
xpos2 = x_step;
zpos -= z_step;
zpos2 -= z_step;
if(zpos2 < plane_zmin)
zpos2 = plane_zmin;
}
zpos = 0.0f;
zpos2 = z_step;
// right-down
while(zpos < plane_zmax){
while(xpos2 < plane_xmax) {
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos );
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
xpos += x_step;
xpos2 += x_step;
}
xpos2 = plane_xmax;
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos );
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
xpos = 0.0f;
xpos2 = x_step;
zpos += z_step;
zpos2 += z_step;
if(zpos2 > plane_zmax)
zpos2 = plane_zmax;
}
zpos = 0.0f;
zpos2 = - z_step;
xpos = 0.0f;
xpos2 = - x_step;
// left-top
while(zpos > plane_zmin){
while(xpos2 > plane_xmin) {
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos ,y, zpos );
xpos -= x_step;
xpos2 -= x_step;
}
xpos2 = plane_xmin;
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos );
xpos = 0.0f;
xpos2 = - x_step;
zpos -= z_step;
zpos2 -= z_step;
if(zpos2 < plane_zmin)
zpos2 = plane_zmin;
}
zpos = 0.0f;
zpos2 = z_step;
// left-down
while(zpos < plane_zmax){
while(xpos2 > plane_xmin) {
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos ,y, zpos );
xpos -= x_step;
xpos2 -= x_step;
}
xpos2 = plane_xmin;
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos ,y, zpos2);
glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos ,y, zpos );
xpos = 0.0f;
xpos2 = - x_step;
zpos += z_step;
zpos2 += z_step;
if(zpos2 > plane_zmax)
zpos2 = plane_zmax;
}
glEnd();
glDisable(GL_TEXTURE_2D);
}
void draw_plane(d3_gl_window* d3_gl_win, gl_window* gl_win)
{
if(texturing_plane && T[6] != NULL){
texture_plane(6);
}
if(plane_filling){
plane_fill_color();
glBegin(GL_POLYGON);
glVertex3d(plane_xmin,plane_height,plane_zmin);
glVertex3d(plane_xmax,plane_height,plane_zmin);
glVertex3d(plane_xmax,plane_height,plane_zmax);
glVertex3d(plane_xmin,plane_height,plane_zmax);
glEnd();
}
if(plane_x_parallels){
plane_line_color();
glLineWidth(plane_line_width);
double params[7];
params[0] = 0.0;
params[1] = plane_zmin;
params[2] = plane_zmax;
params[3] = d3gl_win->get_z_grid_dist();
params[4] = plane_height;
params[5] = plane_xmin;
params[6] = plane_xmax;
glBegin(GL_LINES);
draw_x_parallels(params,4,0);
glEnd();
}
if(plane_z_parallels){
plane_line_color();
glLineWidth(plane_line_width);
double params[7];
params[0] = 0.0;
params[1] = plane_xmin;
params[2] = plane_xmax;
params[3] = d3gl_win->get_x_grid_dist();
params[4] = plane_height;
params[5] = plane_zmin;
params[6] = plane_zmax;
glBegin(GL_LINES);
draw_z_parallels(params,4,0);
glEnd();
}
if(plane_outlines){
plane_line_color();
glLineWidth(plane_line_width);
glBegin(GL_LINE_LOOP);
glVertex3d(plane_xmin,plane_height,plane_zmin);
glVertex3d(plane_xmax,plane_height,plane_zmin);
glVertex3d(plane_xmax,plane_height,plane_zmax);
glVertex3d(plane_xmin,plane_height,plane_zmax);
glEnd();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -