gpt4 book ai didi

c++ - 为什么这个 OpenGL-es 纹理绑定(bind)到 cocos2d 2.0 中的山丘?

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:29 25 4
gpt4 key购买 nike

这个问题与Repeating OpenGL-es texture bound to hills in cocos2d 2.0有关

在阅读了上面帖子中的答案后,我使用了以下代码来计算顶点和纹理坐标:

    CGPoint pt0,pt1;

float ymid = (p0.y + p1.y) / 2;
float ampl = (p0.y - p1.y) / 2;
pt0 = p0;
float U_Off = floor(pt0.x / 512);

for (int j=1; j<_segments+1; j++)
{
pt1.x = p0.x + j*_dx;
pt1.y = ymid + ampl * cosf(_da*j);
float xTex0 = pt0.x/512 - U_Off;

_vertices[vertices++]=CGPointMake(pt0.x, 0);
_vertices[vertices++]=CGPointMake(pt0.x, pt0.y);

_texCoords[texCoords++]=CGPointMake(xTex0, 1.0f);
_texCoords[texCoords++]=CGPointMake(xTex0, 0);

pt0 = pt1;
}
p0 = p1;

但不幸的是,我的纹理仍然出现撕裂/错位(黄色圆圈):

Screenshot

我附上了 vertices 数组的转储和 texcoords我是 OpenGl 的新手,不知道哪里算错了。如何防止线条(图中黄色圆圈)出现?

编辑:我的纹理是 1024x512 或 512x512,具体取决于设备。我使用以下纹理参数:

ccTexParams tp2 = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_CLAMP_TO_EDGE};

最佳答案

最有可能的原因是在不连续的纹理坐标中。在 texcoords 转储中,您具有以下坐标:

(CGPoint) 0x34b0b28 = (x=1.00390625, y=0)
(CGPoint) 0x34b0b30 = (x=0.005859375, y=1)

这意味着在这两点之间,纹理从 1 映射到 0(反向)。你应该在 1.00390625 => 1.005859375 => 之后继续 texcoords => ... 此外,你的纹理必须具有二次方大小并且必须设置为重复模式。

如果你的贴图在图集中,你不能设置REPEAT模式,你可以尝试将texcoords钳位到[0; 1] 将 x=1x=0 的两个边缘点放在同一位置。

最后,如果您的纹理在 x 轴上没有变化,您可以为所有点设置 x = 0.5

关于c++ - 为什么这个 OpenGL-es 纹理绑定(bind)到 cocos2d 2.0 中的山丘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com