- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下图中,左侧纹理是 POT 纹理——如果纹理坐标超出 [0,1],则边缘像素重复。这就是我所期望的。
但是在渲染 NPOT 纹理时相同的确切代码不会仅扩展右边缘的边缘像素。
为什么他们的行为不同?
[编辑]
为了确保我没有犯其他错误,我用简单的测试代码替换了渲染代码。
GLboolean glEnable2d = 0;
GLboolean glEnableRect = 0;
glGetBooleanv(GL_TEXTURE_2D, &glEnable2d);
glGetBooleanv(GL_TEXTURE_RECTANGLE_ARB, &glEnableRect);
if (texWidth == 1.0 && texHeight == 1.0) {
if (glEnableRect) {
printf("GL_TEXTURE_RECTANGLE_ARB is ENABLED!\n");
}
printf("TEX 2D: width = %.3f, height = %.3f\n", texWidth, texHeight);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
} else {
if (glEnable2d) {
printf("GL_TEXTURE_2D is on!\n");
}
printf("TEX RECT: width = %.3f, height = %.3f\n", texWidth, texHeight);
glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
glBegin(GL_QUADS);
if (drawBeyondEdge) {
glTexCoord2f(0.0 * texWidth, 1.0 * texHeight);
glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0 * texWidth, 1.0 * texHeight);
glVertex3f(+1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0 * texWidth, 0.0 * texHeight);
glVertex3f(+1.0f, +1.0f, 0.0f);
glTexCoord2f(0.0 * texWidth, 0.0 * texHeight);
glVertex3f(-1.0f, +1.0f, 0.0f);
} else {
glTexCoord2f(-1.0 * texWidth, 2.0 * texHeight);
glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(2.0 * texWidth, 2.0 * texHeight);
glVertex3f(+1.0f, -1.0f, 0.0f);
glTexCoord2f(2.0 * texWidth, -1.0 * texHeight);
glVertex3f(+1.0f, +1.0f, 0.0f);
glTexCoord2f(-1.0 * texWidth, -1.0 * texHeight);
glVertex3f(-1.0f, +1.0f, 0.0f);
}
glEnd();
最佳答案
好的。我已经回答了我自己的问题。我正在使用 Apple Client Storage,因为我正在将实时视频上传到此纹理。正如 Apple Client Storage Recommendations 所推荐的我将纹理的宽度四舍五入为 32 字节的倍数,用黑色填充右侧的额外位。 NPOT 纹理不会出现此问题,因为如果它们的宽度至少为 8 像素,则它们始终是 32 字节的倍数。
关于opengl - 为什么 POT 和 NPOT 纹理的 GL_CLAMP_TO_EDGE 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209842/
我该如何解决这个问题?我已经包含了 gl/gl.h 和 gl/glu.h,那有什么用呢? 最佳答案 “它是 OpenGL 1.2 的一部分,这就是为什么它不在 Microsoft 的 OpenGL 1
我有两张图片: PNG (sRGB) 64x64(从网络下载) PNG (sRGB),从 fla 移植到 png,然后从 png 移植到 sRGB 的 jpg,最后移植到 PNG (sRGB)。 我正
在下图中,左侧纹理是 POT 纹理——如果纹理坐标超出 [0,1],则边缘像素重复。这就是我所期望的。 但是在渲染 NPOT 纹理时相同的确切代码不会仅扩展右边缘的边缘像素。 为什么他们的行为不同?
我是一名优秀的程序员,十分优秀!