1

我想使用opengl纹理将位图图像放置到对象[1],然后将其固定到对象[2]:就像贴纸一样。

GL_EYE_LINEAR 模式很适合将我的对象移动到我的“贴纸”[1] 前面,但是我怎样才能在我的对象 [2] 上修复这个“贴纸”(在按钮事件或其他事件之后),然后我会继续进入 GL_OBJECT_LINEAR 模式...

我尝试在阶段 [1] 期间使用 GL_OBJECT_LINEAR 模式“模拟”GL_EYE_LINEAR,并根据 GL_MODELVIEW 矩阵的旋转/平移修改 GL_TEXTURE 矩阵,但仍然没有与 GL_EYE_LINEAR 模式相同的行为......

ps:我需要使用 GL_OBJECT_LINEAR 来检索我的贴纸纹理的 x,y,z 和 rot(x,y,z)。

4

1 回答 1

1

好吧,我可能是唯一一个试图用 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-然后用这个严格的顺序修改模型视图矩阵:旋转(CURRENT_POSITION) b. 翻译(CURRENT_POSITION) c. 翻译(-SAVE_POSITION)旋转(-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

于 2013-03-19T18:34:30.420 回答