如何在 OpenGL 中将像素作为纹理绘制到多边形?
题
在 C++ OpenGL 中,我想手动将每个像素(作为我假设的纹理)绘制到一个简单的正方形基元上,或者实际上是形成一个正方形的 2 个多边形上。
我不知道从哪里开始,也不知道要寻找什么短语。我是在寻找纹理映射还是创建纹理?大多数示例都是从文件加载,但我不想这样做。
我尝试阅读我的《OpenGL 编程指南》一书,但它只是一个迷宫,因为我对 OpenGL 还很陌生。请帮忙。
解决方案
采取在glTexImage2D密切关注。这是加载图像在OpenGL用于2D纹理呼叫。
glTexImage2D其实需要原始指针到图像中的像素数据。您可以自己分配内存,并直接设置图像数据(不过你想要的),然后调用此功能可将图像传递给OpenGL的。
一旦你创建的纹理,你可以将它绑定到状态,这样你的三角形使用质地。
有什么在OpenGL直接需要用作纹理的图像从文件加载。用于纹理的一个很好的资源可以是找到。
其他提示
如果您要绘制的正方形是二维且未旋转,您可能正在寻找 glDrawPixels. 。它允许您直接将像素的矩形区域绘制到缓冲区,而无需使用任何多边形。
如果你是新的话,我会建议从一个教程上开始从讷河。
请注意,虽然glTexImage2D()
采用指向像素加载,它并不关心调用之后的任何数据的更改。也就是说,该数据确实来自指定的内存区域加载,和OpenGL创建自己的副本。
这意味着,如果数据发生变化,你要么需要重新做glTexImage2D()调用,或者使用类似glTexSubImage2D()
做了部分更新。我会建议测试和分析,看看子质感更新快,不知道司机是如何实际优化这种情况。
感谢里德·科普塞指着我对 glTexImage2D
。原来,这是非常简单的;只是通过GLubyte到glTexImage2D
功能的阵列(以及所有纹理结合所需要的功能等)。没有尝试过的代码,这个确切的片断,但它应该工作的罚款。阵列元素表示的行,列和信道的序列版本。
int pixelIndex = 0;
GLubyte pixels[400];
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; x++)
{
for (int channel = 0; channel < 4; channel++)
{
// 0 = black, 255 = white
pixels[pixelIndex++] = 255;
}
}
}
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
GL_RGBA, GL_UNSIGNED_BYTE, pixels);
我读过的书的OpenGL可用于单色图像的二维数组,所以我想你可以使用一个3D阵列也。
您在找什么通常被称为“渲染到纹理”。
http://developer.nvidia.com/object/gdc_oglrtt.html
这教程是很老。我猜想,一些扩展名实际上不在OGL的较新版本的扩展。对不起,我不能更多的帮助。我不图形API的多了直接的工作,如果我这样做我会使用D3D如果我可以(避免延长汤,以及其他原因,我不会在这里来烦你。)