我正在使用加载的高度图数据渲染基于点的地形,但是这些点根据相机位置的不同而变化纹理。为了展示这个 bug(以及这不是 z-buffering 问题造成的),我拍了一些截图,从略微不同的相机位置(相同的角度)下固定了点的大小为 5 像素,如下所示:
PS:如果您将它们拖到一个新标签中,则这些图像足够大,没有意识到 stack 会将它们缩小。
状态 1: 状态 2: 生成点的代码相对简单,所以我只是发布此帖子来排除选项- mapArray 是一个单维浮点数组,并且被复制到 VBO 中:
PS:如果您将它们拖到一个新标签中,则这些图像足够大,没有意识到 stack 会将它们缩小。
状态 1: 状态 2: 生成点的代码相对简单,所以我只是发布此帖子来排除选项- mapArray 是一个单维浮点数组,并且被复制到 VBO 中:
for(j = 0; j < mHeight; j++)
{
for(i = 0; i < mWidth; i++)
{
height = bitmapImage[k];
mapArray[k++] = 5 * i;
mapArray[k++] = height;
mapArray[k++] = 5 * j;
}
}
我认为更有可能是需要调整我的片段着色器,因为我对着色器不太熟悉,尽管我不确定在这样简单的代码中哪里出了问题,但我猜测它可能只是不适用于点渲染。下面是我的片段着色器:
in varying vec2 TexCoordA;
uniform sampler2D myTextureSampler;
void main(){
gl_FragColor = texture2D(myTextureSampler, TexCoordA.st) * gl_Color;
}
编辑(请求信息): OpenGL版本为4.4,未使用任何纹理标记。
TexCoordA直接从我的顶点着色器传递到着色器中,没有任何改变。使用以下自行计算的UV:
float* UVs = new float[mNumberPoints * 2];
k = 0;
for(j = 0; j < mHeight; j++)
{
for(i = 0; i < mWidth; i++)
{
UVs[k++] = (1.0f/(float)mWidth) * i;
UVs[k++] = (1.0f/(float)mHeight) * j;
}
}