在 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如果我可以(避免延长汤,以及其他原因,我不会在这里来烦你。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top