Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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)在进行什么? 我从OpenGL和C++开始,我想知道为什么我在窗口上什么也看不见。这是我的密码: #include <GLUT/GLUT.h> #include <stdlib.h> void init() { glClearColor(0, 0, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -10); } void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3i(-0.5, -0.5, 0); glVertex3i(0, 0.5, 0); glVertex3i(0.5, -0.5, 0); glEnd(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE| GLUT_RGBA); glutInitWindowPosition(200, 200); glutInitWindowSize(400, 400); glutCreateWindow("Window"); init(); glutDisplayFunc(display); glutMainLoop(); } #包括 #包括 void init(){ glClearColor(0,0,1,0); glMatrixMode(GL_投影); glLoadIdentity(); gluPerspective(60.0,1.0,1.0,100.0); glMatrixMode(GLU模型视图); glLoadIdentity(); glTranslatef(0,0,-10); } 无效显示(){ glClear(GLU颜色缓冲位); glBegin(GL_三角形); glVertex3i(-0.5,-0.5,0); glVertex3i(0,0.5,0); glVertex3i(0.5,-0.5,0); 格伦德(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 位置(200200); glutInitWindowSize(400400); 创建窗口(“窗口”); init(); glutDisplayFunc(显示器); glutMainLoop(); }_C++_Opengl_Camera_Glut - Fatal编程技术网

什么';我的程序(c+;+;中的openGL)在进行什么? 我从OpenGL和C++开始,我想知道为什么我在窗口上什么也看不见。这是我的密码: #include <GLUT/GLUT.h> #include <stdlib.h> void init() { glClearColor(0, 0, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -10); } void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3i(-0.5, -0.5, 0); glVertex3i(0, 0.5, 0); glVertex3i(0.5, -0.5, 0); glEnd(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE| GLUT_RGBA); glutInitWindowPosition(200, 200); glutInitWindowSize(400, 400); glutCreateWindow("Window"); init(); glutDisplayFunc(display); glutMainLoop(); } #包括 #包括 void init(){ glClearColor(0,0,1,0); glMatrixMode(GL_投影); glLoadIdentity(); gluPerspective(60.0,1.0,1.0,100.0); glMatrixMode(GLU模型视图); glLoadIdentity(); glTranslatef(0,0,-10); } 无效显示(){ glClear(GLU颜色缓冲位); glBegin(GL_三角形); glVertex3i(-0.5,-0.5,0); glVertex3i(0,0.5,0); glVertex3i(0.5,-0.5,0); 格伦德(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 位置(200200); glutInitWindowSize(400400); 创建窗口(“窗口”); init(); glutDisplayFunc(显示器); glutMainLoop(); }

什么';我的程序(c+;+;中的openGL)在进行什么? 我从OpenGL和C++开始,我想知道为什么我在窗口上什么也看不见。这是我的密码: #include <GLUT/GLUT.h> #include <stdlib.h> void init() { glClearColor(0, 0, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -10); } void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3i(-0.5, -0.5, 0); glVertex3i(0, 0.5, 0); glVertex3i(0.5, -0.5, 0); glEnd(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE| GLUT_RGBA); glutInitWindowPosition(200, 200); glutInitWindowSize(400, 400); glutCreateWindow("Window"); init(); glutDisplayFunc(display); glutMainLoop(); } #包括 #包括 void init(){ glClearColor(0,0,1,0); glMatrixMode(GL_投影); glLoadIdentity(); gluPerspective(60.0,1.0,1.0,100.0); glMatrixMode(GLU模型视图); glLoadIdentity(); glTranslatef(0,0,-10); } 无效显示(){ glClear(GLU颜色缓冲位); glBegin(GL_三角形); glVertex3i(-0.5,-0.5,0); glVertex3i(0,0.5,0); glVertex3i(0.5,-0.5,0); 格伦德(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 位置(200200); glutInitWindowSize(400400); 创建窗口(“窗口”); init(); glutDisplayFunc(显示器); glutMainLoop(); },c++,opengl,camera,glut,C++,Opengl,Camera,Glut,我有几个问题: 如果我像这样运行程序,我看到的只是一个白色窗口。。。我不是把颜色调成蓝色了吗 当我在display函数的末尾执行glutSwapBuffers()并运行程序时,我会看到没有三角形的蓝色窗口。所以,我认为glutSwapBuffers()函数只适用于双缓冲 最重要的是,我的三角形到底在哪里?O.O我不是用gltranslatef()函数将相机在z轴上平移到-10吗?如果您想知道我为什么使用gluOrtho2D(),我必须说我正在尝试新事物,但如果我使用gluOrtho2D(),两者

我有几个问题:

  • 如果我像这样运行程序,我看到的只是一个白色窗口。。。我不是把颜色调成蓝色了吗

  • 当我在display函数的末尾执行
    glutSwapBuffers()
    并运行程序时,我会看到没有三角形的蓝色窗口。所以,我认为
    glutSwapBuffers()
    函数只适用于双缓冲

  • 最重要的是,我的三角形到底在哪里?O.O我不是用
    gltranslatef()
    函数将相机在z轴上平移到-10吗?如果您想知道我为什么使用gluOrtho2D(),我必须说我正在尝试新事物,但如果我使用gluOrtho2D(),两者都不起作用

  • 我不知道我是否遗漏了什么。也许我需要搜索更多关于这方面的信息,但我认为大部分代码都是正确的

    1&2)使用单个缓冲区时,不必调用
    glutSwapBuffers()
    。但是您必须调用
    glFlush()
    ,因此绘图命令在GPU上执行

    3) 我注意到您正在使用双坐标创建顶点,但您正在调用glVertex**函数的整数版本(小数部分将被截断)-这意味着您将绘制零大小的三角形

    使用
    glVertex3d()
    glVertex3f()
    代替
    glVertex3i()


    小提示:最新的OpenGL不推荐使用中间模式。

    一个非常好的主意是使用不同的问题标题。好的,这回答了第三个问题!谢谢但我只有在使用“glutSwapBuffers()”时才能看到三角形,即使我使用的是单个缓冲区。。。知道为什么吗?像魔术一样工作!但你能解释一下,如果我使用单缓冲区,为什么glutSwapBuffers()会工作吗?它在内部调用glFlush()@约翰尼:很可能你使用的是一个使用合成图形系统的操作系统。他们已经成为标准超过6年了。使用合成器,所有内容都会被强制双缓冲。合成器需要某种唤醒,通知它图片已准备好呈现,这本质上是复制缓冲区交换;这是通过BufferSwap调用完成的。长话短说:现在单缓冲操作已经变得相当无用了。所以不用麻烦使用它。