我需要使用纹理在OpenGL显示2D图像。结果 图像尺寸不一定2.点击权力 我想创建较大的纹理和限制所述显示的第一部分是用,但将与OpenCV的要共享的图像数据,所以我不想要的像素一次复制数据到一个更大的纹理。

编辑 - 事实证明,甚至在Windows下板图形的最简单的英特尔支持无功率为2的纹理

EDIT2 - 即使你没有套利纹理大小,然后使你的形象更小,重新缩放窗口尺寸速度非常快,甚至在低端硬件

有帮助吗?

解决方案

一对夫妇GL扩展的浮现在脑海中。看看 GL_ARB_texture_rectangle (如果你不需要纹理映射)或 GL_ARB_texture_non_power_of_two (如果这样做)。

其他提示

一个缺陷,以避免的是,由于某种原因,一些视频卡需要GL_UNPACK_ALIGNMENT被设置为1(glPixelStorei(GL_UNPACK_ALIGNMENT,1))。对于非功率的两到正确装入纹理

如果我可以再补充穿过这人来在未来 - 你最了解的OpenGL在网络上找到的文档和教程/例子是多年过时的,包括nehe.gamedev的东西,而且会导致你相信类似的事情非幂的两个纹理大小是一个问题,当他们实际都没有,还是建议您使用长以来弃用OpenGL函数,或者说没有更新了十年库。

首先,大多数现代VIDEOCARDS实际上支持纹理维度都是非正方形和非功率的二尺寸。但最大的兼容性,可能是建议仅使用两个纹理的功率。

通过确定两个最接近的功率是针对每个图像的尺寸(宽度和高度)以及创建尺寸的纹理的较大的开始。 然后,你有两个选择。第一个是做像素数据的软件调整大小以适应图像,然后按照原来的纵横比大小的四,当你需要显示它。或者,您可以只需填写纹理的一部分与图像数据,并把透明像素的其余部分。

如果你想使用功率的2个纹理,创建一个可以拿你的图像中最小的一个,并计算正确的纹理坐标,只显示包含图像纹理的一部分。例如。如果您的图像为400x300,你会使用一个512x512的纹理,由线那边行复制你的形象,你的权利纹理坐标将是400.0 / 512.0,下一个300.0 / 512.0。这会看起来比软件缩放更好。

我完全按照你描述,复制到电源的-2的纹理和调整我的紫外线的相应。扩展将是很好的,但你不能保证他们是支持的任意计算机上。

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