C++ 添加鼠标事件以更改简单圆的颜色
我画了一个圆圈,并试图添加鼠标事件,这改变了圆圈的颜色,我找不到好的来源 以下是全部代码:C++ 添加鼠标事件以更改简单圆的颜色,c++,opengl,glut,C++,Opengl,Glut,我画了一个圆圈,并试图添加鼠标事件,这改变了圆圈的颜色,我找不到好的来源 以下是全部代码: #include <stdio.h> #include <stdlib.h> #include <math.h> #define window_width 1080 #define window_height 720 void drawFilledSun() { //static float angle; glClear(GL_COLOR_BUF
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define window_width 1080
#define window_height 720
void drawFilledSun() {
//static float angle;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0, 0, -10);
int i, x, y;
double radius = 0.30;
//glColor3ub(253, 184, 19);
glColor3ub(255, 0, 0);
double twicePi = 2.0 * 3.142;
x = 0, y = 0;
glBegin(GL_TRIANGLE_FAN); //BEGIN CIRCLE
glVertex2f(x, y); // center of circle
for (i = 0; i <= 20; i++) {
glVertex2f(
(x + (radius * cos(i * twicePi / 20))), (y + (radius * sin(i * twicePi / 20)))
);
}
glEnd(); //END
}
void main_loop_function() {
int c;
drawFilledSun();
glutSwapBuffers();
c = getchar();
}
void GL_Setup(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glEnable(GL_DEPTH_TEST);
gluPerspective(45, (float)width / height, .1, 100);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitWindowSize(window_width, window_height);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("GLUT Example!!!");
glutIdleFunc(main_loop_function);
GL_Setup(window_width, window_height);
glutMainLoop();
}
#包括
#包括
#包括
#定义窗口宽度1080
#定义窗高720
void drawFilledSun(){
//静态浮动角;
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glLoadIdentity();
glTranslatef(0,0,-10);
int i,x,y;
双半径=0.30;
//GL3UB(253184,19);
glColor3ub(255,0,0);
双twicePi=2.0*3.142;
x=0,y=0;
glBegin(GL_三角形_扇形);//开始圆
glVertex2f(x,y);//圆心
对于(i=0;iGLFW
提供了一些您需要的回调函数,例如glfwSetCursorPosCallback
在这种情况下,您可以在绘图时通过if
分支检查代码中的main\u loop\u函数
。剩下的工作是关于C/C++的,有很多途径可以达到它,例如kbhit
顺便说一句,使用几种命名样式并不优雅。为太阳的红、绿、蓝颜色分量添加一个数组和一个颜色索引:
int color\u i=0;
GLubyte color[][3]={{255,0,0},{253,184,19};
使用颜色数组设置颜色属性
void drawFilledSun(){
// [...]
glColor3ubv(颜色[color_i]);
在main\u loop\u函数
中去掉getchar
,它会阻止窗口响应。但是需要持续更新窗口:
void主循环函数(){
drawFilledSun();
glutSwapBuffers();
再发现();
}
使用而不是并添加回调:
int main(int argc,char**argv){
// [...]
glutDisplayFunc(主循环函数);
glutMouseFunc(mouseFunc);
更改鼠标回调中的颜色索引:
void mouseFunc(int按钮、int状态、int x、int y)
{
如果(按钮==GLUT\U LEFT\U按钮和状态==GLUT\U DOWN){
颜色i=(颜色i==0)?1:0;
}
}
请参见示例:
#包括
#包括
#包括
#定义窗口宽度1080
#定义窗高720
int color_i=0;
GLubyte color[][3]={{255,0,0},{253,184,19};
void drawFilledSun(){
//静态浮动角;
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glLoadIdentity();
glTranslatef(0,0,-10);
int i,x,y;
双半径=0.30;
glColor3ubv(颜色[color_i]);
双twicePi=2.0*3.142;
x=0,y=0;
glBegin(GL_三角形_扇形);//开始圆
glVertex2f(x,y);//圆心
对于(i=0;i此代码不起作用的是什么?问题是什么?你是在问如何编写鼠标按钮/运动回调吗?找出你想问的问题并将其编辑到问题中。我可以用两种方法制作圆,此代码起作用我想添加功能以添加鼠标事件,这会更改圆的颜色我找不到方法请详细说明你想在问题中做什么。如果你能帮助我,我也有这个问题。我很感激@genpfault