OpenGL:绘制到纹理

那么我只是有点卡住想知道如何绘制一个项目的纹理。

编辑:很不幸,我的显卡不支持FrameBuffer对象:/。 所以我一直在尝试从backbuffer方法中获取副本内容。

编辑:所以我一直在尝试几个小时的最好的部分来得到这个东西的工作。 不幸的是,我仍然得到的是一个白色的广场。

这是我设置的小testing代码。 它应该做的是画一个100,100的红色方块。但是即使这样做对我也不起作用。

glViewport(0 , 0, 512, 512); glPushAttrib(GL_CURRENT_BIT); glColor4ub(255, 0, 0, 255); glBindTexture(GL_TEXTURE_2D, Texture); glBegin(GL_QUADS); // Top-left vertex (corner) glTexCoord2i(0, 0); glVertex2i(100, 100); // Bottom-left vertex (corner) glTexCoord2i(1, 0); glVertex2i( 100 + 200, 100); // Bottom-right vertex (corner) glTexCoord2i(1, 1); glVertex2i( 100 + 200, 100 + 200); // Top-right vertex (corner) glTexCoord2i(0, 1); glVertex2i(100, 100 + 200); glEnd(); glPopAttrib(); glLoadIdentity(); //Copy Our ViewPort To The Texture glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 0, 0, 512, 512, 0); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); //Reset Viewport glViewport(0, 0, 768, 480); glBindTexture (GL_TEXTURE_2D, Texture); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); // Top-left vertex (corner) glTexCoord2i(0, 0); glVertex2i(0, 0); // Bottom-left vertex (corner) glTexCoord2i(1, 0); glVertex2i( 0 + 512, 0); // Bottom-right vertex (corner) glTexCoord2i(1, 1); glVertex2i( 0 + 512, 0 + 512); // Top-right vertex (corner) glTexCoord2i(0, 1); glVertex2i(0, 0 + 512); glEnd(); glDisable(GL_TEXTURE_2D); 

当前输出的屏幕截图: 在这里输入图像说明

任何帮助是极大的赞赏!

这很可能不是你想调用这个函数的方式! 第一个索引是相对于顶点数据源的偏移量。 最有可能的是,你想要:

 glDrawArrays(GL_LINE_STRIP, 0, indices.size()); 

至于你的实际问题,使用framebuffer对象: http : //www.opengl.org/wiki/Framebuffer_Object – 或者,你也可以简单地绘制到后台缓冲区,并通过glCopyTextureX复制到纹理

我明白,你想实际“渲染到纹理”,换言之,渲染的东西,而不是在屏幕上显示它存储为纹理。

如果是这种情况,你应该阅读关于帧缓冲区对象(FBO)和“承租人到纹理”技术,基本上是将纹理附加到FBO。

我建议你阅读这个 ,它解释了几乎所有你需要的东西,并包含一个梦幻般的演示,在这个演示中,他们渲染一个茶壶并用它来构造一个立方体。 在这里你有另一个教程。