在本文中,任务是在OpenGL中单击鼠标即可绘制圆。
OpenGL: OpenGL是一种跨语言,跨平台的API,用于渲染2D和3D矢量图形。它将使用该工具进行大量的设计和动画制作。
- 使用鼠标左键单击在控制台上的任何位置创建一个圆,创建的圆的中心的坐标取决于您单击的位置。
- 要更改圆圈的颜色,只需右键单击鼠标。
- 完成所有操作后,只需按键盘上的Esc键即可跳出程序。
方法:想法是使用以下内置函数在OpenGL中通过单击来绘制圆:
- glMatrixMode(GL_PROJECTION):此函数将当前矩阵设置为投影。
- glLoadIdentity():该函数用于将当前矩阵乘以恒等矩阵。
- gluOrtho2D(0.0,800.0,0.0,600.0):设置整个帧缓冲区的平行(正交)投影。
- glutCreateWindow(“在单击鼠标时创建圆”):如上由用户指定创建窗口。
- glClearColor(0,0,0,0):设置背景色。
- glClear(GL_COLOR_BUFFER_BIT):清除帧缓冲区并设置glClearColor()函数调用中定义的值。
- glutDisplayFunc(display):将显示事件与显示事件处理程序(display)链接在一起。
- glutMouseFunc(mouse):鼠标事件处理程序。
- glutKeyboardFunc(keyboard):键盘事件处理程序。
- glutMainLoop():此函数循环当前事件。
以下是在OpenGL中实现onClick功能的C++程序:
C++
// C++ program to implement onClick
// functionality in OpenGL to draw
// a circle
#include
#include
#include
#include
#define xpix 500
#include
using namespace std;
float r, g, b, x, y;
bool flag = true;
int counter = 0;
// Function works on mouse click
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;
}
// Change color of circle
else if (button == GLUT_RIGHT_BUTTON
&& state == GLUT_DOWN) {
if (counter > 4) {
counter = 0;
}
counter++;
// Redisplay
glutPostRedisplay();
}
}
// Function that exits from program
void keyboard(unsigned char key,
int x, int y)
{
switch (key) {
case 27:
glutHideWindow();
}
}
// Function to draw the circle
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);
}
// Matrix mode
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Given the coordinates
gluOrtho2D(0.0, 800.0,
0.0, 600.0);
// If the flag is true
if (flag) {
// Begin the pointer
glBegin(GL_POLYGON);
// Iterate through all the
// 360 degres
for (int i = 0; i < 360; i++) {
// Find the angle
angle_theta = i * 3.142 / 180;
glVertex2f(x + 50 * cos(angle_theta),
y + 50 * sin(angle_theta));
}
// Sets vertex
glEnd();
}
// Flushes the frame buffer
// to the screen
glFlush();
}
// Driver Code
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
// Creates the window as
// specified by the user
glutCreateWindow("Circle Creation "
"on mouse click");
// Sets the background color
glClearColor(0, 0, 0, 0);
// Clears the frame buffer
glClear(GL_COLOR_BUFFER_BIT);
// Links display event with the
// display event handler(display)
glutDisplayFunc(display);
// Mouse event handler
glutMouseFunc(mouse);
// Keyboard event handler
glutKeyboardFunc(keyboard);
// Loops the current event
glutMainLoop();
}
输出:
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。