C++程序 使用OpenGL绘制小屋
在这篇文章中,我们将讨论如何使用OpenGL中的两个基本形状(即三角形和矩形)创建小屋的正面视图。
方法: 按照下面的步骤解决问题:
- 使用函数 **glutInit( &argc,argv) ** 初始化工具包。
- 使用函数 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) 设置显示模式并指定颜色方案。
- 使用函数 glutInitWindowSize(1200, 740) 指定窗口大小。
- 使用函数 glutInitWindowPosition(0, 0) 设置窗口的起始位置。
- 使用函数 glutCreateWindow(“Basic hut like structure”) 初始化窗口并设置标题。
- 初始化函数 myInit() 并执行以下步骤:
- 使用函数 glClearColor(1.0, 0.5, 0.0, 1.0) 将背景颜色设置为橙色。
- 使用函数 gluOrtho2D(0.0, 400.0, 0.0, 400.0) 指定显示区域。
- 初始化函数 myDisplay() 并执行以下步骤:
- 使用函数 glClear(GL_COLOR_BUFFER_BIT) 清除屏幕。
- 可以使用函数 glPointSize(4.0) 绘制小屋的矩形部分。
- 将绘图颜色设置为 glColor3f(0.5f, 0.5f, 0.5f) 。
- 使用多边形命令创建2个窗户、门、顶部三角形和主矩形,并使用函数设置它们的顶点:
- glBegin(GL_POLYGON);
- glVertex2i ( x,y );
- 使用函数 glColor3f(R, G, B) 将多边形着色。
下面是上述方法的实现:
// C++程序,用于上述方法
#include <GL\glut.h>
#include <iostream>
#include <windows.h>
using namespace std;
// 初始化驱动程序的函数
void myInit(void)
{
// 清除所有的屏幕颜色
glClearColor(1.0, 0.5, 0.0, 1.0);
// 将背景颜色设置为橙色
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 指定显示区域
gluOrtho2D(0.0, 400.0, 0.0, 400.0);
}
// 在控制台上显示类似小屋的结构的函数
void myDisplay(void)
{
// 清除屏幕缓冲区
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(4.0);
// 小屋的长方形部分
glColor3f(0.5f, 0.5f, 0.5f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 绘制多边形
glVertex2i(40, 40);
glVertex2i(320, 40);
glVertex2i(40, 200);
glVertex2i(320, 200);
glVertex2i(40, 200);
glVertex2i(40, 40);
glVertex2i(320, 200);
glVertex2i(320, 40);
glEnd();
// 右边的窗户更新
glColor3f(1.0f, 0.0f, 0.0f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 绘制多边形
glVertex2i(220, 60);
glVertex2i(300, 60);
glVertex2i(220, 150);
glVertex2i(300, 150);
glVertex2i(220, 60);
glVertex2i(220, 150);
glVertex2i(300, 150);
glVertex2i(300, 60);
glEnd();
// 右边窗户更新部分2
glColor3f(1.0f, 0.0f, 0.0f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 绘制多边形
glVertex2i(220, 170);
glVertex2i(300, 170);
glVertex2i(220, 190);
glVertex2i(300, 190);
glVertex2i(220, 170);
glVertex2i(220, 190);
glVertex2i(300, 190);
glVertex2i(300, 170);
glEnd();
// 门
glColor3f(0.60f, 0.42f, 0.16f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 绘制多边形
glVertex2i(130, 40);
glVertex2i(130, 160);
glVertex2i(130, 160);
glVertex2i(180, 160);
glVertex2i(180, 100);
glVertex2i(180, 40);
glVertex2i(120, 40);
glVertex2i(170, 40);
glEnd();
// 创建门的第二部分
glColor3f(0.60f, 0.42f, 0.16f);
//开始绘制多边形
// 绘制多边形
glVertex2i(130, 170);
glVertex2i(130, 180);
glVertex2i(130, 180);
glVertex2i(180, 180);
glVertex2i(180, 170);
glVertex2i(180, 180);
glVertex2i(130, 170);
glVertex2i(180, 170);
glEnd();
// 小屋的上三角形部分
glColor3f(1.0f, 0.0f, 1.0f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 绘制多边形
glVertex2i(10, 200);
glVertex2i(340, 200);
glVertex2i(200, 390);
glVertex2i(10, 200);
glVertex2i(200, 390);
glEnd();
// 发送所有输出到屏幕
glFlush();
}
// 主代码
int main(int argc, char** argv)
{
// 初始化init函数
glutInit(&argc, argv);
// 初始化工具箱;
glutInitDisplayMode(
GLUT_SINGLE | GLUT_RGB);
// 设置显示模式并指定颜色方案
glutInitWindowSize(1200, 740);
// 指定窗口大小
glutInitWindowPosition(0, 0);
// 设置窗口的起始位置
glutCreateWindow("基本的类似小屋的结构");
// 创建窗口并设置标题
glutDisplayFunc(myDisplay);
myInit();
// 额外初始化
glutMainLoop();
// 进入循环直到事件发生
return 0;
}
输出: