def generate_textures(self): num_text = len(self.ply['material']) self.textures = glGenTextures(num_text) if (num_text == 1): self.textures = [self.textures] else: self.textures = list(self.textures) for i in xrange(num_text): text_id = self.textures[i] text_path = self.ply['material'][i]['texture_map'].strip() if (not len(text_path)): self.textures[i] = None continue glBindTexture(GL_TEXTURE_2D, text_id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) img = QImage(text_path) img = QGLWidget.convertToGLFormat(img) glTexImage2D(GL_TEXTURE_2D, 0, 3, img.width(), img.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits().asstring(img.numBytes())) glBindTexture(GL_TEXTURE_2D, 0) if (not any(self.textures)): self.textures = None
def loadFromFile(cls, path, internalFormat=GL_RGBA): image = QImage(path) image = QGLWidget.convertToGLFormat(image) dataFormat = { QImage.Format_ARGB32: GL_RGBA }.get(image.format(), None) dataType = GL_UNSIGNED_BYTE data = [0] * image.numBytes() bits = image.constBits() bits.setsize(image.numBytes()) for i in range(image.numBytes()): data[i] = bits[i][0] return Texture2D(image.width(), image.height(), internalFormat, dataFormat, dataType, data)
def generate_textures(self): num_text = len(self.ply["material"]) self.textures = glGenTextures(num_text) if num_text == 1: self.textures = [self.textures] else: self.textures = list(self.textures) for i in xrange(num_text): text_id = self.textures[i] text_path = self.ply["material"][i]["texture_map"].strip() if not len(text_path): self.textures[i] = None continue glBindTexture(GL_TEXTURE_2D, text_id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) img = QImage(text_path) img = QGLWidget.convertToGLFormat(img) glTexImage2D( GL_TEXTURE_2D, 0, 3, img.width(), img.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits().asstring(img.numBytes()), ) glBindTexture(GL_TEXTURE_2D, 0) if not any(self.textures): self.textures = None
def setup_skybox(self, image_path): self.skybox_textures = glGenTextures(6) sides = ('front','left','back','right','top','bottom') for (tex_id, side) in zip(self.skybox_textures, sides): glBindTexture(GL_TEXTURE_2D, tex_id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) img = QImage(image_path+'-'+side+'.png') img = QGLWidget.convertToGLFormat(img) glTexImage2D(GL_TEXTURE_2D, 0, 3, img.width(), img.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits().asstring(img.numBytes())) glBindTexture(GL_TEXTURE_2D, 0) self.sky_angles = [uniform(-180.,180.) for i in xrange(3)] self.sky_angles_vel = [uniform(-0.5,0.5) for i in xrange(3)]
def setup_skybox(self, image_path): self.skybox_textures = glGenTextures(6) sides = ('front', 'left', 'back', 'right', 'top', 'bottom') for (tex_id, side) in zip(self.skybox_textures, sides): glBindTexture(GL_TEXTURE_2D, tex_id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) img = QImage(image_path + '-' + side + '.png') img = QGLWidget.convertToGLFormat(img) glTexImage2D(GL_TEXTURE_2D, 0, 3, img.width(), img.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits().asstring(img.numBytes())) glBindTexture(GL_TEXTURE_2D, 0) self.sky_angles = [uniform(-180., 180.) for i in xrange(3)] self.sky_angles_vel = [uniform(-0.5, 0.5) for i in xrange(3)]