Opengl 用GL\u对象\u线性模拟GL\u眼睛\u线性

Opengl 用GL\u对象\u线性模拟GL\u眼睛\u线性,opengl,Opengl,我想使用opengl纹理将位图图像放置到对象[1],然后将其固定到对象[2]:就像贴纸一样 GL_EYE_线性模式很好地将我的对象移动到我的“贴纸”[1]前面,但是我如何将此“贴纸”固定在我的对象[2](在按钮事件或其他事件之后)上,然后我将继续进入GL_object_线性模式 在第[1]阶段,我尝试通过修改GL_纹理矩阵,根据GL_MODELVIEW矩阵的旋转/平移,使用GL_OBJECT_LINEAR模式“模拟”GL_EYE_LINEAR,但仍然没有与GL_EYE_LINEAR模式相同的行为

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

GL_EYE_线性模式很好地将我的对象移动到我的“贴纸”[1]前面,但是我如何将此“贴纸”固定在我的对象[2](在按钮事件或其他事件之后)上,然后我将继续进入GL_object_线性模式

在第[1]阶段,我尝试通过修改GL_纹理矩阵,根据GL_MODELVIEW矩阵的旋转/平移,使用GL_OBJECT_LINEAR模式“模拟”GL_EYE_LINEAR,但仍然没有与GL_EYE_LINEAR模式相同的行为


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

好的,我可能是唯一一个试图用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 modelview矩阵: A.旋转(当前位置) B翻译(当前职位) C翻译(-SAVE_位置) D旋转(-SAVE_位置)

2-设置纹理生成(以放置位图纹理):

3-重新加载MODELVIEW gl.glLoadIdentity()(或使用push/pop) 4-像往常一样旋转/平移到当前位置 5-画你的模型

希望它能帮助别人

但正如Jason所说,最好的方法是使用着色器,而不是传统的opengl。。。 我在这里找到了一些适合python程序员的好教程:

问候,,
-baco

好的,我可能是唯一一个试图用GL\u OBJECT\u LINEAR来模拟GL\u EYE\u 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 modelview矩阵: A.旋转(当前位置) B翻译(当前职位) C翻译(-SAVE_位置) D旋转(-SAVE_位置)

2-设置纹理生成(以放置位图纹理):

3-重新加载MODELVIEW gl.glLoadIdentity()(或使用push/pop) 4-像往常一样旋转/平移到当前位置 5-画你的模型

希望它能帮助别人

但正如Jason所说,最好的方法是使用着色器,而不是传统的opengl。。。 我在这里找到了一些适合python程序员的好教程:

问候,,
-baco

将所有不推荐使用的东西扔进垃圾箱,并导出自己的纹理坐标。然后你可以随心所欲地工作。是的,你(可能)是对的。。。但是我需要修改一个python项目(工业软件,没有动画,没有复杂的着色器…),而我现在没有一个月的时间来重建OpenGL部分。。。不管怎样,你有一个很好的网络教程来为像我这样的老时尚人士学习“现代”OpenGL吗?在OpenGL标签的信息和常见问题解答中列出了一些资源。把所有不推荐的东西都扔进垃圾箱,然后导出你自己的纹理坐标。然后你可以随心所欲地工作。是的,你(可能)是对的。。。但是我需要修改一个python项目(工业软件,没有动画,没有复杂的着色器…),而我现在没有一个月的时间来重建OpenGL部分。。。不管怎样,你有一个很好的网络教程来为像我这样的老时尚人士学习“现代”OpenGL吗?在OpenGL标签的信息和常见问题解答中列出了一些资源。
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)