在无头模式下运行时,我遇到了 Moderngl 最新版本的一个非常奇怪的问题。下面的代码应该给我一个三角形,它在右侧和顶部接触视口的边缘,但右侧和顶部的顶点在视口之外延伸了 1.98 左右的一些奇数因子。将 x 和 y 值更改为 0.5 不会改变输出。这在 OSX 和 Linux 上是一样的。有谁知道这里发生了什么?
import moderngl
from pyrr import Matrix44
import numpy as np
import cv2
vertex_shader_source = """
#version 330
in vec3 local_vertex;
uniform mat4 modelview_matrix;
uniform mat4 projection_matrix;
void main(){
gl_Position = projection_matrix * modelview_matrix * vec4( local_vertex, 1.0 );
}
"""
fragment_shader_source = """
#version 330
out vec4 out_color;
void main() {
out_color = vec4(1.0, 1.0, 1.0, 1.0);
}
"""
context = moderngl.create_standalone_context()
prog = context.program(vertex_shader=vertex_shader_source, fragment_shader=fragment_shader_source)
vertices = np.array([[ 0.0, 0.0, 0.0],
[ 1.0, 0.0, 0.0],
[ 1.0, 1.0, 0.0]])
vbo = context.buffer(vertices.tobytes())
vao = context.simple_vertex_array(prog, vbo, "local_vertex")
color_renderbuffer = context.renderbuffer((128, 128))
fbo_regular = context.framebuffer(color_attachments=(color_renderbuffer))
modelview_matrix = Matrix44.look_at(np.array([0.0, 0.0, 10.0]), np.array([0.0, 0.0, 0.0]), np.array([0.0, 1.0, 0.0]))
projection_matrix = Matrix44.orthogonal_projection(-1.0, 1.0, -1.0, 1.0, 1.0, 100.0)
prog["projection_matrix"].write(projection_matrix.astype("f4").tobytes())
prog["modelview_matrix"].write(modelview_matrix.astype("f4").tobytes())
fbo_regular.use()
context.clear(1.0, 0.0, 0.0)
vao.render()
data = fbo_regular.read(components=3, alignment=1, dtype='f4')
data_array = np.frombuffer(data, dtype=np.float32).reshape(128,128,3)
cv2.imwrite("output0.png",(data_array[::-1]) * 255.0)
输出是:

更新:显然,当我使用“结构”模块时,问题就消失了。
self.vbo = self.ctx.buffer(struct.pack('9f', 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0))
是什么赋予了??