我想在OpenGL中画一条线,这条线经常会收到新的点。我想实现一个在其自身后面画一条线的对象:
那么我是否需要创建一个数组,并将所有新的点添加到其中(BufferData设置为GL_DYNAMIC_DRAW)。然后用glDrawArrays重新绘制线条。镶嵌+笔划宽度将在vertexshader内?还是有更好的办法?
BufferData
GL_DYNAMIC_DRAW
glDrawArrays
vertexshader
hpxqektj1#
其思想是在给定的延迟后绘制当前位置的一个点。时间延迟定义了实际线条的平滑程度。然后,您必须根据绘制的定位点计算两个新点,这两个点都乘以给定的宽度。对于这些图,还必须获取对象的移动方向以计算正确的法线。在OpenGl端,您必须初始化一个固定大小的顶点缓冲区
gl.glBufferData(gl.GL_ARRAY_BUFFER, 8 * self.maxPoints, None, gl.GL_DYNAMIC_DRAW) # 8 bytes 2 points = 1 plot # maxPoints amount of max plots
对象,您将在其中上载这2个点的每一帧(gl.glBufferSubData)。我的结果:
gl.glBufferSubData
结果(用wasd控制):
1条答案
按热度按时间hpxqektj1#
其思想是在给定的延迟后绘制当前位置的一个点。时间延迟定义了实际线条的平滑程度。然后,您必须根据绘制的定位点计算两个新点,这两个点都乘以给定的宽度。
对于这些图,还必须获取对象的移动方向以计算正确的法线。
在OpenGl端,您必须初始化一个固定大小的顶点缓冲区
对象,您将在其中上载这2个点的每一帧(
gl.glBufferSubData
)。我的结果:
结果(用wasd控制):