首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用GL_OBJECT_LINEAR模拟GL_EYE_LINEAR

用GL_OBJECT_LINEAR模拟GL_EYE_LINEAR
EN

Stack Overflow用户
提问于 2013-03-13 04:46:18
回答 1查看 429关注 0票数 1

我想使用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)。

EN

回答 1

Stack Overflow用户

发布于 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-设置纹理生成(放置位图纹理):

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15371786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档