LWJGL 3与Slick-util兼容版本的LWJGL 3无法正确渲染纹理。

问题描述 投票:0回答:1

我最近开始用LWJGL 3重写我的游戏,感觉太不一样了,我试着找了一下教程,这个人用了这个兼容LWJGL 3版本的slick-util,我按照教程看了差不多三遍30分钟的教程,也没弄明白是哪里出了问题,我查了一下它的github仓库,还是没弄明白为什么我的纹理不能正常加载。

下面是我的纹理与我的代码渲染后的效果。

这里是他的教程的github仓库。请在此输入链接描述

下面是教程视频 请在此输入链接描述

跳到时间戳。32:02

我真的需要帮助,我试了一整天,我不能让这个工作!让我知道,如果分享代码是必要的,因为也许你们中的一个人可能已经有这个错误,并且已经知道解决方案。

java opengl render game-engine lwjgl
1个回答
1
投票

顶点规范与着色器程序的属性索引不匹配。

pbo = storeData(positionBuffer, 0, 3);
// [...]
cbo = storeData(colorBuffer, 1, 3);
// [...]
tbo = storeData(textureBuffer, 2, 2);

你的顶点着色器

#version 460 core

in vec3 position;
in vec3 color;
in vec2 textureCoord;

out vec3 passColor;
out vec2 passTextureCoord;

void main() {
  gl_Position = vec4(position, 1.0);
  passColor = color;
  passTextureCoord = textureCoord;
}

你的片段着色器

#version 330 core

in vec3 passColor;
in vec2 passTextureCoord;

out vec4 outColor;

uniform sampler2D tex;

void main() {
  outColor = texture(tex, passTextureCoord);
}

属性指数不会自动列举(0,1,2,...)。属性 color 甚至没有得到一个属性索引,因为它不是一个活动的程序资源。color 被设置为接口变量 passColor但该变量不是 用过的 的碎片着色器中。因此,这个着色器程序只有2个活动属性,而且这个属性的属性指数没有指定。可能的情况是,这些属性的指数是0 position 和1 textureCoord 大多数硬件驱动程序都会这样做),但你不能确定这一点。

使用 布局限定器(GLSL) 对于 顶点着色器属性indeices:

#version 460 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color;
layout(location = 2) in vec2 textureCoord;

// [...]
© www.soinside.com 2019 - 2024. All rights reserved.