C++ 使用鼠标移动在OpenGL中绘制圆的程序

C++ 使用鼠标移动在OpenGL中绘制圆的程序

本文的任务是使用单个鼠标单击在OpenGL中绘制圆形。

OpenGL: OpenGL是一个跨语言、跨平台的API,用于渲染2D和3D矢量图形。使用它可以制作许多设计和动画。

  • 使用单击左键在控制台上任何位置创建一个圆,圆的中心坐标取决于您的单击位置。
  • 要更改圆的颜色,只需使用鼠标右键。
  • 在执行所有操作后,按键盘上的Esc键退出程序。

方法: 使用以下内置函数在OpenGL中使用单个单击绘制圆的思路:

  • glMatrixMode(GL_PROJECTION): 此函数将当前矩阵设置为投影矩阵。
  • glLoadIdentity(): 该函数用于将当前矩阵乘以单位矩阵。
  • gluOrtho2D(0.0,800.0,0.0,600.0): 设置全帧缓冲区的平行(正交)投影。
  • glutCreateWindow(“Circle Creation on mouse click”): 创建由用户指定的窗口。
  • glClearColor(0,0,0,0): 设置背景颜色。
  • glClear(GL_COLOR_BUFFER_BIT): 清除帧缓冲区并设置在glClearColor()函数调用中定义的值。
  • glutDisplayFunc(display): 将显示事件与显示事件处理程序(display)相关联。
  • glutMouseFunc(mouse): 鼠标事件处理程序。
  • glutKeyboardFunc(keyboard): 键盘事件处理程序。
  • glutMainLoop(): 此函数循环当前事件。

下面是实现OpenGL中单击功能的C++程序:

// C++程序来实现OpenGL的单击onClick功能
//绘制一个圆
#include <GL/glut.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#define xpix 500
#include <cstring>
using namespace std;
 
float r, g, b, x, y;
bool flag = true;
int counter = 0;
 
//当鼠标单击时工作的函数
void mouse(int button, int state,
           int mousex, int mousey)
{
    if (button == GLUT_LEFT_BUTTON
        && state == GLUT_DOWN) {
        flag = true;
        x = mousex;
        y = 600 - mousey;
    }
 
    // 更改圆的颜色
    else if (button == GLUT_RIGHT_BUTTON
             && state == GLUT_DOWN) {
        if (counter > 4) {
            counter = 0;
        }
 
        counter++;
 
        // 重新显示
        glutPostRedisplay();
    }
}
 
//退出程序的函数
void keyboard(unsigned char key,
              int x, int y)
{
    switch (key) {
    case 27:
        glutHideWindow();
    }
}
 
//绘制圆的函数
void display(void)
{
    float angle_theta;
    if (counter == 1) {
        glColor3f(1, 0, 0);
    }
    else if (counter == 2) {
        glColor3f(0, 1, 0);
    }
    else if (counter == 3) {
        glColor3f(0, 1, 1);
    }
    else if (counter == 4) {
        glColor3f(0.5, 0, 1);
    }
    else if (counter == 5) {
 
        glColor3f(0, 0.5, 1);
    }
 
    // 矩阵模式
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
 
    //给定坐标
    gluOrtho2D(0.0, 800.0,
               0.0, 600.0);
 
    // 如果标志为真
    if (flag) {
 
        // 开始指针
        glBegin(GL_POLYGON);
 
        // 迭代所有度数
        for (int i = 0; i < 360; i++) {
 
            // 找到角度
            angle_theta = i * 3.142 / 180;
            glVertex2f(x + 50 * cos(angle_theta),
                       y + 50 * sin(angle_theta));
        }
 
        // 设置顶点
        glEnd();
    }
 
    // 刷新帧缓冲区到屏幕
    glFlush();
}
 
// 驱动器代码
int main(int argc, char** argv)
{
 
    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitWindowPosition(100, 100);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 
    //根据用户创建窗口
    glutCreateWindow("Circle Creation "
                     "on mouse click");
 
    // 设置背景颜色
    glClearColor(0, 0, 0, 0);
 
    // 清除帧缓冲区
    glClear(GL_COLOR_BUFFER_BIT);
 
    // 将显示事件与显示事件处理程序(display)链接起来
    glutDisplayFunc(display);
 
    // 鼠标事件处理程序
    glutMouseFunc(mouse);
 
    // 键盘事件处理程序
    glutKeyboardFunc(keyboard);
 
    // 循环当前事件
    glutMainLoop();
}  

输出:

C++ 使用鼠标移动在OpenGL中绘制圆的程序

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例