小编Mat*_*s F的帖子

LWJGL 顶点着色器 gl_PointSize 不起作用

我正在尝试更改 LWJGL 中顶点着色器中点的大小,但无法使其正常工作。如果我尝试从着色器更改点大小,则点大小始终为 1px。

顶点着色器:

void main(){
   gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
   gl_PointSize = 10.0;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

void main(){
   gl_FrontColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)

绘制代码:

glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, p_vbo);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, c_vbo);
glColorPointer(4, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POINTS, 0, particles_num);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)

我的目标是动态更改点大小,但我无法从着色器更改点大小。如果我调用此代码:

glPointSize(10.0f);
Run Code Online (Sandbox Code Playgroud)

从 java 开始,大小发生了变化,但我希望能够为每个点做到这一点。我已经启用了我的着色器来改变点的大小:

glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
Run Code Online (Sandbox Code Playgroud)

澄清一下:我可以渲染我的所有点,并且一切正常,但点大小始终为 1px。我也没有使用平滑点。

编辑:glGetFloat(GL_POINT_SIZE_RANGE) 返回 1.0,这应该表明我的硬件不支持 1.0 以外的其他点大小。但如果我修改我的绘制代码:

glDrawArrays(GL_POINTS, 0, particles_num);
Run Code Online (Sandbox Code Playgroud)

到:

for (int i = 0; i < particles_num; i++) {
   glPointSize(massBuff.get(i));
   glDrawArrays(GL_POINTS, i, 1);
}
Run Code Online (Sandbox Code Playgroud)

在 massBuff 包含值为 1f - 10f …

java opengl shader lwjgl glpointsize

5
推荐指数
1
解决办法
2018
查看次数

标签 统计

glpointsize ×1

java ×1

lwjgl ×1

opengl ×1

shader ×1