背景
我正在python/pyglet中创建一个程序生成的地形。 我用pyglet通过为屏幕上的每个x和y坐标运行一个lambda函数,然后以我想要的颜色绘制该像素来对其进行可视化。程序GL纹理
这不是非常优化的。
我有一个偷偷摸摸的怀疑,有一种方法来创建一个矩形对象,并告诉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)的书 – Ripi2