Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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++ 在OpenGL中使对象消失并显示 #include//此库用于标准输入和输出 #包括“glut.h”//此库用于OpenGL实用工具工具包中的glut #包括 //左正方形 空心图纸1(空心){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(82250); glVertex2f(82200); glVertex2f(140200); glVertex2f(140250); 格伦德(); } //右正方形 空图纸形状2(空){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(232,250); glVertex2f(232200); glVertex2f(290200); glVertex2f(290250); 格伦德(); } void initRendering(){ glEnable(GLU深度试验); } //调整窗口大小时调用 空心把手尺寸(内宽内高){ glViewport(0,0,w,h); glMatrixMode(GL_投影); glLoadIdentity(); 格洛托(0.0f,(浮子)w,0.0f,(浮子)h,-1.0f,1.0f); } 无效显示(){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glMatrixMode(GLU模型视图); glLoadIdentity(); drawShape1(); drawShape2(); glutSwapBuffers(); 再发现(); } //计时器代码 无效更新(int值){ //在这里添加代码 再发现(); glutTimerFunc(5,更新,0); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_双精度| GLUT_RGB | GLUT_深度); glutInitWindowSize(400400); 玻璃窗(“正方形”); initRendering(); glutDisplayFunc(显示器); GLUTEFUNC(handleResize); glutTimerFunc(5,更新,0); glutMainLoop(); 返回(0); } 我中间有两个正方形。一个正方形在左边,另一个正方形在右边(见下面的屏幕截图)。我正在尝试每5秒使左方形消失/出现一次。我已经添加了计时器代码,但是我正在努力使对象消失/出现_C++_Opengl_Glut - Fatal编程技术网

C++ 在OpenGL中使对象消失并显示 #include//此库用于标准输入和输出 #包括“glut.h”//此库用于OpenGL实用工具工具包中的glut #包括 //左正方形 空心图纸1(空心){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(82250); glVertex2f(82200); glVertex2f(140200); glVertex2f(140250); 格伦德(); } //右正方形 空图纸形状2(空){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(232,250); glVertex2f(232200); glVertex2f(290200); glVertex2f(290250); 格伦德(); } void initRendering(){ glEnable(GLU深度试验); } //调整窗口大小时调用 空心把手尺寸(内宽内高){ glViewport(0,0,w,h); glMatrixMode(GL_投影); glLoadIdentity(); 格洛托(0.0f,(浮子)w,0.0f,(浮子)h,-1.0f,1.0f); } 无效显示(){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glMatrixMode(GLU模型视图); glLoadIdentity(); drawShape1(); drawShape2(); glutSwapBuffers(); 再发现(); } //计时器代码 无效更新(int值){ //在这里添加代码 再发现(); glutTimerFunc(5,更新,0); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_双精度| GLUT_RGB | GLUT_深度); glutInitWindowSize(400400); 玻璃窗(“正方形”); initRendering(); glutDisplayFunc(显示器); GLUTEFUNC(handleResize); glutTimerFunc(5,更新,0); glutMainLoop(); 返回(0); } 我中间有两个正方形。一个正方形在左边,另一个正方形在右边(见下面的屏幕截图)。我正在尝试每5秒使左方形消失/出现一次。我已经添加了计时器代码,但是我正在努力使对象消失/出现

C++ 在OpenGL中使对象消失并显示 #include//此库用于标准输入和输出 #包括“glut.h”//此库用于OpenGL实用工具工具包中的glut #包括 //左正方形 空心图纸1(空心){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(82250); glVertex2f(82200); glVertex2f(140200); glVertex2f(140250); 格伦德(); } //右正方形 空图纸形状2(空){ glBegin(GL_多边形); GL3F(1.0,0.0,0.0); glVertex2f(232,250); glVertex2f(232200); glVertex2f(290200); glVertex2f(290250); 格伦德(); } void initRendering(){ glEnable(GLU深度试验); } //调整窗口大小时调用 空心把手尺寸(内宽内高){ glViewport(0,0,w,h); glMatrixMode(GL_投影); glLoadIdentity(); 格洛托(0.0f,(浮子)w,0.0f,(浮子)h,-1.0f,1.0f); } 无效显示(){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glMatrixMode(GLU模型视图); glLoadIdentity(); drawShape1(); drawShape2(); glutSwapBuffers(); 再发现(); } //计时器代码 无效更新(int值){ //在这里添加代码 再发现(); glutTimerFunc(5,更新,0); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_双精度| GLUT_RGB | GLUT_深度); glutInitWindowSize(400400); 玻璃窗(“正方形”); initRendering(); glutDisplayFunc(显示器); GLUTEFUNC(handleResize); glutTimerFunc(5,更新,0); glutMainLoop(); 返回(0); } 我中间有两个正方形。一个正方形在左边,另一个正方形在右边(见下面的屏幕截图)。我正在尝试每5秒使左方形消失/出现一次。我已经添加了计时器代码,但是我正在努力使对象消失/出现,c++,opengl,glut,C++,Opengl,Glut,预览: 第一个参数的单位是毫秒而不是秒。所以5秒等于5000 创建类型为bool的变量(square1\u visible),该变量说明左侧的正方形是否可见: bool square1_visible=true; 在定时器功能中每隔5秒更改变量的状态square1\u visible: void更新(int值){ glutTimerFunc(5000,更新,0); square1_可见=!square1_可见; } 根据变量的状态绘制左正方形square1\u visible: void d

预览:


第一个参数的单位是毫秒而不是秒。所以5秒等于5000

创建类型为
bool
的变量(
square1\u visible
),该变量说明左侧的正方形是否可见:

bool square1_visible=true;
在定时器功能中每隔5秒更改变量的状态
square1\u visible

void更新(int值){
glutTimerFunc(5000,更新,0);
square1_可见=!square1_可见;
}
根据变量的状态绘制左正方形
square1\u visible

void display(){
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GLU模型视图);
glLoadIdentity();
如果(平方1_可见)
drawShape1();
drawShape2();
glutSwapBuffers();
再发现();
}

您正在使用固定功能管道。使用混合来完成一些离题。请不要在2018年使用glBegin/glEnd。它完全是过时的遗留API。如果您开始学习加速图形编程,请至少从带缓冲区对象的OpenGL 3.0开始。如果您不想渲染左正方形,请不要调用
drawShape1
?使用全局标志指示是否应绘制正方形,并在计时器刻度事件中设置它。gluttimerfunc将ms作为其第一个参数。5毫秒和5秒是非常不同的。你的意思是你想让它淡入淡出吗?
#include <stdio.h> // this library is for standard input and output
#include "glut.h" // this library is for glut the OpenGL Utility Toolkit
#include <math.h>

// left square
void drawShape1(void) {
    glBegin(GL_POLYGON);
    glColor3f(1.0, 0.0, 0.0);
    glVertex2f(82, 250);
    glVertex2f(82, 200);
    glVertex2f(140, 200);
    glVertex2f(140, 250);
    glEnd();
}

// right square
void drawShape2(void) {
    glBegin(GL_POLYGON);
    glColor3f(1.0, 0.0, 0.0);
    glVertex2f(232, 250);
    glVertex2f(232, 200);
    glVertex2f(290, 200);
    glVertex2f(290, 250);
    glEnd();
}

void initRendering() {
    glEnable(GL_DEPTH_TEST);
}

// called when the window is resized
void handleResize(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0f, (float)w, 0.0f, (float)h, -1.0f, 1.0f);
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    drawShape1();
    drawShape2();
    glutSwapBuffers();
    glutPostRedisplay();
}

// the timer code
void update(int value) {
    // add code here

    glutPostRedisplay();
    glutTimerFunc(5, update, 0);
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(400, 400);
    glutCreateWindow("Squares");
    initRendering();
    glutDisplayFunc(display);
    glutReshapeFunc(handleResize);
    glutTimerFunc(5, update, 0);
    glutMainLoop();
    return(0);
}