我想使用opengl纹理将位图图像放置到对象[1],然后将其固定到对象[2]:就像贴纸一样。
GL_EYE_LINEAR模式很适合在我的'贴纸'[1]前面移动我的对象,但是如何在我的对象[2]上修复这个“贴纸”(只是在一个按钮事件或其他之后)然后我将继续进入GL_OBJECT_LINEAR模式...
我尝试在阶段[1]中使用GL_OBJECT_LINEAR模式“模拟”GL_EYE_LINEAR并修改GL_TEXTURE矩阵,根据GL_MODELVIEW矩阵的旋转/翻译,但仍然没有GL_EYE_LINEAR模式的相同行为......
ps:我需要使用GL_OBJECT_LINEAR来检索贴纸纹理的x,y,z和rot(x,y,z)。
答案 0 :(得分:1)
好吧我可能是唯一一个试图用GL_OBJECT_LINEAR模仿GL_EYE_LINEAR的人,但我终于找到了办法。
首先,目的是使用位图纹理粘贴在模型上,因此您必须保存当前旋转(rx,ry,rz)和平移(tx,ty,tz),您需要粘贴纹理/ bitmap,SAVE_POSITION =(rx_save,ry_save,rz_save,tx_save,ty_save,tz_save)。
然后您只需执行以下步骤:
0- gl.glMatrixMode(gl.GL_MODELVIEW),gl.glLoadIdentity()
1-然后用这个严格的序列修改de modelview矩阵: 一个。旋转(CURRENT_POSITION) 湾翻译(CURRENT_POSITION) C。翻译(-SAVE_POSITION) d。旋转(-SAVE_POSITION)
2-设置纹理生成(放置位图纹理):
gl.glTexGendv(gl.GL_S,gl.GL_EYE_PLANE,(self.TexSize,0,0,0))
gl.glTexGendv(gl.GL_T,gl.GL_EYE_PLANE,(0,self.TexSize,0,0))
gl.glTexGeni(gl.GL_S,gl.GL_TEXTURE_GEN_MODE,gl.GL_EYE_LINEAR)
gl.glTexGeni(gl.GL_T,gl.GL_TEXTURE_GEN_MODE,gl.GL_EYE_LINEAR)
gl.glEnable(gl.GL_TEXTURE_GEN_S)
gl.glEnable(gl.GL_TEXTURE_GEN_T)
3-重新加载MODELVIEW gl.glLoadIdentity()(或使用push / pop) 4-像往常一样旋转/平移到CURRENT_POSITION 5-绘制你的模型
希望它有所帮助。
但正如Jason所说,最好的方法是使用着色器而不是传统的opengl ...... 我在这里为python程序员找到了一些很好的教程: http://pyopengl.sourceforge.net/context/
的问候, -baco