Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加鼠标事件以更改简单圆的颜色_C++_Opengl_Glut - Fatal编程技术网

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;i
GLFW
提供了一些您需要的回调函数,例如
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