我想使用opengl纹理将位图图像放置到对象1上,然后将其固定在对象2上:就像贴纸一样。
GL_EYE_LINEAR模式很适合将我的对象移动到我的'sticker‘1前面,但是我如何将这个'sticker’固定在我的object 2上,然后我将继续进入GL_OBJECT_LINEAR模式……
我尝试在第一阶段用GL_OBJECT_LINEAR模式“模拟”GL_EYE_LINEAR,通过修改GL_TEXTURE矩阵,符合GL_MODELVIEW矩阵的旋转/平移,但仍然不具有GL_EYE_LINEAR模式的相同行为...
ps:我需要使用GL_OBJECT_LINEAR来检索我的贴纸纹理的x,y,z和rot(x,y,z)。
发布于 2013-03-20 02:34:30
好吧,我可能是唯一一个试图用GL_OBJECT_LINEAR模拟GL_EYE_LINEAR的人,但我最终找到了一种方法。
首先,目标是使用位图纹理粘贴到模型上,因此必须保存当前旋转(rx,ry,rz)和平移(tx,ty,tz),其中需要粘贴纹理/位图,SAVE_POSITION= (rx_save,ry_save,rz_save,tx_save,ty_save,tz_save)。
然后,您只需执行以下步骤:
0- gl.glMatrixMode(gl.GL_MODELVIEW),gl.glLoadIdentity()
1-然后用这个严格的序列修改de模型视图矩阵: a.旋转(CURRENT_POSITION) b.平移(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() (或使用推送/弹出) 4-照常旋转/平移到CURRENT_POSITION 5-绘制模型
希望这能帮助到别人。
但正如Jason所说,最好的方法是使用着色器,而不是遗留的opengl...我在这里找到了一些适合python程序员的很好的教程:http://pyopengl.sourceforge.net/context/
致敬,-baco
https://stackoverflow.com/questions/15371786
复制相似问题