include
void myDisplay(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);// 设置清空屏幕时的颜色为黑色
glClear(GL_COLOR_BUFFER_BIT);// 清除颜色缓冲区,以便重新绘制
glColor3f(1.0f, 1.0f, 1.0f);// 设置绘制颜色为白色
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);//绘制一个填充的矩形,范围从(-0.5, -0.5) 到(0.5, 0.5)
glBegin(GL_TRIANGLES);//大三角
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);//x 坐标:0.0f 表示这个点在 x 轴上位于原点(中心线)。y 坐标:1.0f 表示这个点在 y 轴上位于正方向的 1 处。视口范围是从 - 1 到 1
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.8f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.8f, -0.5f);
glEnd();
glPointSize(3);//设置绘制点的大小为 3
glBegin(GL_POINTS);
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.4f, -0.4f);
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.4f, 0.4f);
glEnd();
// 计算中点
float Ax = 0.0f, Ay = 1.0f; // A
float Bx = 0.8f, By = -0.5f; // B
float Cx = -0.8f, Cy = -0.5f; // C
float ABx = (Ax + Bx) / 2; // AB 中点
float ABy = (Ay + By) / 2;
float BCx = (Bx + Cx) / 2;
float BCy = (By + Cy) / 2;
float CAx = (Cx + Ax) / 2;
float CAy = (Cy + Ay) / 2;
// 绘制小三角形
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 0.0f); // 选择颜色
glVertex2f(ABx, ABy); // 中点 AB
glVertex2f(BCx, BCy);
glVertex2f(CAx, CAy);
glEnd();
// 计算
float ABx2 = (ABx + BCx) / 2; // 小三角形 AB 中点
float ABy2 = (ABy + BCy) / 2;
float BCx2 = (BCx + CAx) / 2;
float BCy2 = (BCy + CAy) / 2;
float CAx2 = (CAx + ABx) / 2;
float CAy2 = (CAy + ABy) / 2;
// 绘制小小三角形
glBegin(GL_TRIANGLES);
glColor3f(0.0f, 1.0f, 1.0f); // 选择颜色
glVertex2f(ABx2, ABy2); // 中点 AB
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(BCx2, BCy2);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(CAx2, CAy2);
glEnd();
glFlush();
}
int main(int argc, char* argv[]) // 主函数
{
glutInit(&argc, argv); // 初始化 GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); // 设置显示模式为 RGB 和单缓冲
glutInitWindowPosition(100, 100); // 设置窗口初始位置
glutInitWindowSize(400, 400); // 设置窗口大小为 400x400 像素
glutCreateWindow("Hello World!"); // 创建窗口并设置标题
glutDisplayFunc(&myDisplay); // 注册显示回调函数
glutMainLoop(); // 进入 GLUT 事件处理循环
return 0; // 返回 0,程序结束
}