我目前正在用 Python 编写一个基于 glumpy 的渲染器。
我正在使用 glumpys OpenGL 功能来渲染一堆点和线。我的点实际上是一张图,所以线是边,多条边可以有一个共享点。
我实现了一个选择器,它使我能够绘制一个特定的子图。
我在每个顶点的缓冲区中存储了一个 alpha 值。当我单击时,alpha 值会发生变化,因此只有选定子图的点以 alpha = 1 绘制。着色器被调用两次:
# Draw Points
self.program_points.draw(gl.GL_POINTS)
# Draw Lines
self.program_points.draw(gl.GL_LINES, self.edge_buffer)
我的问题是: alpha 值设置正确,两个点 alpha = 1 的边缘也正确渲染,但一个点 alpha = 1 和一个点 alpha = 0 的边缘淡出。
我根本不想给褪色的边缘上色。有没有办法检查边缘的两个节点并始终选择较低的 alpha 值或同样有用的东西。
我的顶点着色器:
uniform vec2 resolution;
attribute vec3 position;
attribute float radius;
attribute float color;
attribute float color_alpha;
attribute float id;
// for AA
varying vec4 v_position;
varying float v_radius;
varying float v_color_alpha;
varying vec4 v_id;
varying float v_color;
void main (void)
{
// this is for the picker!
v_id = vec4 (mod(floor(id / (256*256)), 256) / 255.0,
mod(floor(id / (256)), 256) / 255.0,
mod(floor(id / (1)), 256) / 255.0,
1.0 );
// values to the fragment shader
v_color = color;
v_color_alpha = color_alpha;
v_radius = radius;
//two pixel for AA
gl_PointSize = 2.0+ ceil(2.0*radius);
// hook for the Cameramovement
v_position = <transform(position)>;
gl_Position = v_position;
} ```