【发布时间】:2017-04-19 14:38:08
【问题描述】:
背景
我正在使用 python/pyglet 创建程序生成的地形。 我正在用 pyglet 对屏幕上的每个 x 和 y 坐标运行一个 lambda 函数,然后用我想要的颜色绘制该像素。
这不是很理想。
我怀疑有一种方法可以创建一个矩形对象并告诉 GL 引擎在其上渲染纹理,给 GL 引擎一个 lambda 函数,该函数将返回颜色以换取 x 和 y 坐标.
伪 pyglet 示例
def get_color(pos):
x, y = pos
color = x * y % 255
return [color, color, color]
width = 1680
height = 1024
win = window.Window(fullscreen=False, vsync=True, width=width, height=height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, win.width, 0, win.height)
glTextureMapper(get_color)
win.clear()
points = [0, 0, width, 0, width, height, 0, height]
pyglet.graphics.draw(int(len(points) / 2), GL_QUADS, ('v2f', points))
TLDR 问题
如何使用 lambda 函数为多边形着色?这是着色器吗?
Pyglet 示例是首选,但欢迎使用任何语言的示例
【问题讨论】:
-
OpenGL 不使用多边形,只使用三角形(以及线和点)。像素的颜色在定义图元(三角形、线或点)的顶点之间进行插值。如果您想要每个像素的功能,那么最好使用着色器。如果您已经计算了每个像素的颜色,那么纹理可能很有用。我最好的建议是遵循一些关于现代 OpenGL (ver >= 3.x) 的教程或书籍
标签: python opengl textures shader pyglet