本文整理汇总了Python中OpenGL.GL.glVertexAttribPointer方法的典型用法代码示例。如果您正苦于以下问题:Python GL.glVertexAttribPointer方法的具体用法?Python GL.glVertexAttribPointer怎么用?Python GL.glVertexAttribPointer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenGL.GL
的用法示例。
在下文中一共展示了GL.glVertexAttribPointer方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: paintGL
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def paintGL(self):
self.makeCurrent()
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
self.program.bind()
self.program.enableAttributeArray("position")
self.vbo.bind()
gl.glVertexAttribPointer(self.program.attributeLocation("position"), 2, gl.GL_FLOAT, gl.GL_FALSE, 0, self.vbo)
self.program.enableAttributeArray("normal")
self.vbo_cols.bind()
gl.glVertexAttribPointer(self.program.attributeLocation("normal"), 3, gl.GL_FLOAT, gl.GL_FALSE, 0, self.vbo_cols)
gl.glDrawArrays(gl.GL_TRIANGLES, 0, len(self.data))
print(self.context().format().majorVersion())
print(self.context().format().minorVersion())
print(gl.glGetString(gl.GL_VERSION));
示例2: _init_shaders
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def _init_shaders(self):
"""Initializes the shaders used to render the textures fullscreen quad."""
vs = shaders.compileShader(_VERTEX_SHADER, GL.GL_VERTEX_SHADER)
fs = shaders.compileShader(_FRAGMENT_SHADER, GL.GL_FRAGMENT_SHADER)
self._shader = shaders.compileProgram(vs, fs)
stride = _FLOATS_PER_VERTEX * _SIZE_OF_FLOAT
var_position = GL.glGetAttribLocation(self._shader, _VAR_POSITION)
GL.glVertexAttribPointer(
var_position, 2, GL.GL_FLOAT, GL.GL_FALSE, stride, None)
GL.glEnableVertexAttribArray(var_position)
var_uv = GL.glGetAttribLocation(self._shader, _VAR_UV)
uv_offset = ctypes.c_void_p(_FLOATS_PER_XY * _SIZE_OF_FLOAT)
GL.glVertexAttribPointer(
var_uv, 2, GL.GL_FLOAT, GL.GL_FALSE, stride, uv_offset)
GL.glEnableVertexAttribArray(var_uv)
self._var_texture_sampler = GL.glGetUniformLocation(
self._shader, _VAR_TEXTURE_SAMPLER)
示例3: bindAttributeArray
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def bindAttributeArray(self, shader, name, data, count):
location = gl.glGetAttribLocation(shader.handle, name)
if location != -1:
gl.glVertexAttribPointer(location, count, gl.GL_FLOAT, False, 0, data)
gl.glEnableVertexAttribArray(location)
示例4: paintGL
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def paintGL(self):
self.makeCurrent()
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
self.program.bind()
self.program.enableAttributeArray("position")
self.vbo.bind()
gl.glVertexAttribPointer(self.program.attributeLocation("position"), 2, gl.GL_FLOAT, gl.GL_FALSE, 0, self.vbo)
self.program.enableAttributeArray("color")
self.vbo_cols.bind()
gl.glVertexAttribPointer(self.program.attributeLocation("color"), 3, gl.GL_FLOAT, gl.GL_FALSE, 0, self.vbo_cols)
self.vbo_index.bind()
#gl.glDrawArrays(gl.GL_TRIANGLES, 0, len(self.data))
gl.glDrawElements(gl.GL_TRIANGLES, len(self.index), gl.GL_UNSIGNED_INT, None)
print(self.context().format().majorVersion())
print(self.context().format().minorVersion())
print(gl.glGetString(gl.GL_VERSION));
示例5: bind_attrib
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def bind_attrib(self, attrib_id, size, data, storagetype=gl.GL_STATIC_DRAW, instance_divisor=0, datatype=gl.GL_FLOAT, stride=0, offset=None, normalize=False):
if RenderObject.bound_vao is not self.vao_id:
gl.glBindVertexArray(self.vao_id)
RenderObject.bound_vao = self.vao_id
# Keep track of max instance divisor
self.max_instance_divisor = max(instance_divisor, self.max_instance_divisor)
# If the input is an array create a new GL buffer, otherwise assume the buffer already exists and a buffer ID is passed
if type(data) is np.ndarray:
# Get an index to one new buffer in GPU mem, bind it, and copy the array data to it
buf_id = gl.glGenBuffers(1)
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, buf_id)
gl.glBufferData(gl.GL_ARRAY_BUFFER, data.nbytes, data, storagetype)
else:
# Assume that a GLuint is passed which means that the buffer is already in GPU memory
buf_id = data
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, buf_id)
# Assign this buffer to one of the attributes in the shader
gl.glEnableVertexAttribArray(attrib_id)
gl.glVertexAttribPointer(attrib_id, size, datatype, normalize, stride, offset)
# For instanced data, indicate per how many instances we move a step in the buffer (1=per instance)
if instance_divisor > 0:
gl.glVertexAttribDivisor(attrib_id, instance_divisor)
# Clean up
gl.glDisableVertexAttribArray(attrib_id)
self.enabled_attributes[attrib_id] = [size, buf_id, instance_divisor, datatype]
return buf_id
示例6: set_up_scene
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def set_up_scene(self):
self.vertex_data = []
v = self.scene_volume_init
s = self.scale_spacing
scale = 0.3
mat_scale = numpy.diag(numpy.array([scale, scale, scale, 1], dtype=numpy.float32))
t = -0.5 * v * s
mat_translate = translate(t, t, t)
mat = mat_translate @ mat_scale
for z in range(v):
for y in range(v):
for x in range(v):
self.add_cube_to_scene(mat)
mat = translate(s, 0, 0) @ mat
mat = translate(-v * s, s, 0) @ mat
mat = translate(0, -v * s, s) @ mat
vertex_data = numpy.array(self.vertex_data, dtype=numpy.float32).flatten()
self.vert_count = len(vertex_data) / 5
self.scene_vao = GL.glGenVertexArrays(1)
GL.glBindVertexArray(self.scene_vao)
self.scene_vert_buffer = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_ARRAY_BUFFER, self.scene_vert_buffer)
GL.glBufferData(GL.GL_ARRAY_BUFFER, vertex_data, GL.GL_STATIC_DRAW)
f_size = sizeof(c_float)
stride = 5 * f_size
GL.glEnableVertexAttribArray(0)
GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, False, stride, cast(0 * f_size, c_void_p))
GL.glEnableVertexAttribArray(1)
GL.glVertexAttribPointer(1, 2, GL.GL_FLOAT, False, stride, cast(3 * f_size, c_void_p))
GL.glBindVertexArray(0)
GL.glDisableVertexAttribArray(0)
GL.glDisableVertexAttribArray(1)
示例7: set_up_companion_window
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def set_up_companion_window(self):
if not self.hmd:
return
verts = list()
# left eye verts
verts.append(((-1, -1), (0, 0)))
verts.append(((0, -1), (1, 0)))
verts.append(((-1, 1), (0, 1)))
verts.append(((0, 1), (1, 1)))
# right eye verts
verts.append(((0, -1), (0, 0)))
verts.append(((1, -1), (1, 0)))
verts.append(((0, 1), (0, 1)))
verts.append(((1, 1), (1, 1)))
vIndices = numpy.array([0, 1, 3, 0, 3, 2, 4, 5, 7, 4, 7, 6], dtype=numpy.uint16)
self.companion_window_index_size = len(vIndices)
self.companion_window_vao = GL.glGenVertexArrays(1)
GL.glBindVertexArray(self.companion_window_vao)
#
self.companion_window_id_vert_buffer = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_ARRAY_BUFFER, self.companion_window_id_vert_buffer)
vVerts = numpy.array(verts, dtype=numpy.float32).flatten()
GL.glBufferData(GL.GL_ARRAY_BUFFER, vVerts, GL.GL_STATIC_DRAW)
#
self.companion_window_id_index_buffer = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, self.companion_window_id_index_buffer)
GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, vIndices, GL.GL_STATIC_DRAW)
#
f_size = sizeof(c_float)
GL.glEnableVertexAttribArray(0)
GL.glVertexAttribPointer(0, 2, GL.GL_FLOAT, False, 4 * f_size, cast(0 * f_size, c_void_p))
#
GL.glEnableVertexAttribArray(1)
GL.glVertexAttribPointer(1, 2, GL.GL_FLOAT, False, 4 * f_size, cast(2 * f_size, c_void_p))
#
GL.glBindVertexArray(0)
GL.glDisableVertexAttribArray(0)
GL.glDisableVertexAttribArray(1)
GL.glBindBuffer(GL.GL_ARRAY_BUFFER, 0)
GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0)
示例8: _create_device_objects
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def _create_device_objects(self):
# save state
last_texture = gl.glGetIntegerv(gl.GL_TEXTURE_BINDING_2D)
last_array_buffer = gl.glGetIntegerv(gl.GL_ARRAY_BUFFER_BINDING)
last_vertex_array = gl.glGetIntegerv(gl.GL_VERTEX_ARRAY_BINDING)
self._shader_handle = gl.glCreateProgram()
# note: no need to store shader parts handles after linking
vertex_shader = gl.glCreateShader(gl.GL_VERTEX_SHADER)
fragment_shader = gl.glCreateShader(gl.GL_FRAGMENT_SHADER)
gl.glShaderSource(vertex_shader, self.VERTEX_SHADER_SRC)
gl.glShaderSource(fragment_shader, self.FRAGMENT_SHADER_SRC)
gl.glCompileShader(vertex_shader)
gl.glCompileShader(fragment_shader)
gl.glAttachShader(self._shader_handle, vertex_shader)
gl.glAttachShader(self._shader_handle, fragment_shader)
gl.glLinkProgram(self._shader_handle)
# note: after linking shaders can be removed
gl.glDeleteShader(vertex_shader)
gl.glDeleteShader(fragment_shader)
self._attrib_location_tex = gl.glGetUniformLocation(self._shader_handle, "Texture")
self._attrib_proj_mtx = gl.glGetUniformLocation(self._shader_handle, "ProjMtx")
self._attrib_location_position = gl.glGetAttribLocation(self._shader_handle, "Position")
self._attrib_location_uv = gl.glGetAttribLocation(self._shader_handle, "UV")
self._attrib_location_color = gl.glGetAttribLocation(self._shader_handle, "Color")
self._vbo_handle = gl.glGenBuffers(1)
self._elements_handle = gl.glGenBuffers(1)
self._vao_handle = gl.glGenVertexArrays(1)
gl.glBindVertexArray(self._vao_handle)
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self._vbo_handle)
gl.glEnableVertexAttribArray(self._attrib_location_position)
gl.glEnableVertexAttribArray(self._attrib_location_uv)
gl.glEnableVertexAttribArray(self._attrib_location_color)
gl.glVertexAttribPointer(self._attrib_location_position, 2, gl.GL_FLOAT, gl.GL_FALSE, imgui.VERTEX_SIZE, ctypes.c_void_p(imgui.VERTEX_BUFFER_POS_OFFSET))
gl.glVertexAttribPointer(self._attrib_location_uv, 2, gl.GL_FLOAT, gl.GL_FALSE, imgui.VERTEX_SIZE, ctypes.c_void_p(imgui.VERTEX_BUFFER_UV_OFFSET))
gl.glVertexAttribPointer(self._attrib_location_color, 4, gl.GL_UNSIGNED_BYTE, gl.GL_TRUE, imgui.VERTEX_SIZE, ctypes.c_void_p(imgui.VERTEX_BUFFER_COL_OFFSET))
# restore state
gl.glBindTexture(gl.GL_TEXTURE_2D, last_texture)
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, last_array_buffer)
gl.glBindVertexArray(last_vertex_array)
示例9: _try_load_model
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def _try_load_model(self):
try:
model = openvr.VRRenderModels().loadRenderModel_Async(self.model_name)
except openvr.error_code.RenderModelError_Loading:
return
vertices0 = list()
indices0 = list()
if model is not None:
for v in range(model.unVertexCount):
vd = model.rVertexData[v]
vertices0.append(float(vd.vPosition.v[0])) # position X
vertices0.append(float(vd.vPosition.v[1])) # position Y
vertices0.append(float(vd.vPosition.v[2])) # position Z
vertices0.append(float(vd.vNormal.v[0])) # normal X
vertices0.append(float(vd.vNormal.v[1])) # normal Y
vertices0.append(float(vd.vNormal.v[2])) # normal Z
vertices0.append(float(vd.rfTextureCoord[0])) # texture coordinate U
vertices0.append(float(vd.rfTextureCoord[1])) # texture coordinate V
for i in range(model.unTriangleCount * 3):
index = model.rIndexData[i]
indices0.append(int(index))
vertices0 = numpy.array(vertices0, dtype=numpy.float32)
indices0 = numpy.array(indices0, dtype=numpy.uint32)
#
self.vertexPositions = vbo.VBO(vertices0)
self.indexPositions = vbo.VBO(indices0, target=GL.GL_ELEMENT_ARRAY_BUFFER)
# http://stackoverflow.com/questions/14365484/how-to-draw-with-vertex-array-objects-and-gldrawelements-in-pyopengl
self.vao = GL.glGenVertexArrays(1)
GL.glBindVertexArray(self.vao)
self.vertexPositions.bind()
self.indexPositions.bind()
# Vertices
GL.glEnableVertexAttribArray(0)
fsize = sizeof(c_float)
GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, False, 8 * fsize, cast(0 * fsize, c_void_p))
# Normals
GL.glEnableVertexAttribArray(1)
GL.glVertexAttribPointer(1, 3, GL.GL_FLOAT, False, 8 * fsize, cast(3 * fsize, c_void_p))
# Texture coordinates
GL.glEnableVertexAttribArray(2)
GL.glVertexAttribPointer(2, 2, GL.GL_FLOAT, False, 8 * fsize, cast(6 * fsize, c_void_p))
GL.glBindVertexArray(0)
self.model = model
self.model_is_loaded = True
self._try_load_texture()
示例10: __init__
# 需要导入模块: from OpenGL import GL [as 别名]
# 或者: from OpenGL.GL import glVertexAttribPointer [as 别名]
def __init__(self, name, vr_model, vr_diffuse_texture):
self.name = name
# create and bind a VAO to hold state for this model
self.vertex_array = GL.glGenVertexArrays(1)
GL.glBindVertexArray(self.vertex_array)
# Populate a vertex buffer
self.vertex_buffer = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_ARRAY_BUFFER, self.vertex_buffer)
GL.glBufferData(GL.GL_ARRAY_BUFFER,
sizeof(openvr.RenderModel_Vertex_t) * vr_model.unVertexCount,
vr_model.rVertexData, GL.GL_STATIC_DRAW)
# Identify the components in the vertex buffer
GL.glEnableVertexAttribArray(0)
hv3sz = sizeof(openvr.HmdVector3_t)
GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, False, sizeof(openvr.RenderModel_Vertex_t),
cast(0 * hv3sz, c_void_p))
GL.glEnableVertexAttribArray(1)
GL.glVertexAttribPointer(1, 3, GL.GL_FLOAT, False, sizeof(openvr.RenderModel_Vertex_t),
cast(1 * hv3sz, c_void_p))
GL.glEnableVertexAttribArray(2)
GL.glVertexAttribPointer(2, 2, GL.GL_FLOAT, False, sizeof(openvr.RenderModel_Vertex_t),
cast(2 * hv3sz, c_void_p))
# Create and populate the index buffer
self.index_buffer = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, self.index_buffer)
GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER,
sizeof(c_uint16) * vr_model.unTriangleCount * 3,
vr_model.rIndexData, GL.GL_STATIC_DRAW)
GL.glBindVertexArray(0)
# create and populate the texture
self.texture = GL.glGenTextures(1)
GL.glBindTexture(GL.GL_TEXTURE_2D, self.texture)
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, vr_diffuse_texture.unWidth, vr_diffuse_texture.unHeight,
0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, vr_diffuse_texture.rubTextureMapData)
# If this renders black ask McJohn what's wrong.
GL.glGenerateMipmap(GL.GL_TEXTURE_2D)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_EDGE)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_LINEAR)
f_largest = GL.glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT)
GL.glTexParameterf(GL.GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, f_largest)
GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
self.vertex_count = vr_model.unTriangleCount * 3