【问题标题】:Basic approach to pupil constriction/dilation of eye model in OpenGLOpenGL中眼睛模型瞳孔收缩/扩张的基本方法
【发布时间】:2012-05-07 11:13:48
【问题描述】:
我是 OpenGL-ES 的新手,正在寻找创建逼真的眼睛模型的最佳方法,该眼睛的瞳孔可以扩张和收缩,因此我在学习教程时有一个计划。
我在搅拌机中制作了一个网格,它基本上是一个带孔的球体(“极点”或中心顶点已被移除,并且周围有几个圆形边缘)。
我计划将虹膜纹理直接添加到球体围绕孔的多边形。
要更改瞳孔大小,我是否只需要一个函数来重新定位孔的顶点以使孔扩大或收缩?
我将在 Objective-C 应用程序中使用 OpenGL。我有Jeff Lamarche's Objective C export script。仅从搅拌机中导出网格并稍后在 xcode 中在代码中添加纹理是标准的吗?还是先在搅拌机中设置网格上的纹理并将更多成品数据导出到 xcode 更容易/更好?
【问题讨论】:
标签:
animation
opengl-es
blender
3d-modelling
【解决方案1】:
你的问题有点老了,所以我不确定你取得了多少进步,但由于我自己一直在攀登学习曲线,所以我想我会尝试回答一下。
如果您想为模型的各个顶点设置动画,我相信您需要的方法是 Vertex Skinning。在这方面我不能说太多,因为我还没有理由尝试它,尽管它是一种仅在 OpenGL ES 2.0 中可用的技术。 (无论如何,这可能是您想要开始的地方,相比 1.1 增加的灵活性比任何额外的学习曲线倾斜都值得。)
您的纹理问题的答案有些复杂。您需要在 OpenGL 中实际应用纹理。但是 Blender 可以为您做的是确定纹理坐标。网格的每个顶点都有一个与之关联的纹理坐标。纹理坐标将是映射到纹理图像上某个位置的 X、Y 坐标。坐标在 0.0 到 1.0 的范围内——因此,由于您的图像纹理是一个矩形,纹理坐标 {0, 0} 映射到左下角; {1 , 1} 映射到右上角; {0.5, 0.5} 映射到图像的确切中心。
因此,在搅拌机中,您需要继续使用 UV 映射对对象进行纹理处理。导出时,虽然导出的网格不包含任何图像内容,但它会保留映射到图像内容的纹理坐标。这将允许您在 OpenGL 中应用纹理,以便纹理的应用方式与它在搅拌机中的显示方式相同。
我个人在让 Jeff Lamarche 的脚本吐出纹理坐标时遇到了一些麻烦,因为 Blender api 似乎在每个版本中都会发生显着变化。我使用 .obj 转换器取得了更大的成功。所以我一直从 blender 导出到 .obj,并使用命令行工具从 .obj 到 C 头文件。
如果您在使用 Lamarche 的脚本时遇到类似问题,这篇文章可能会帮助您解决:http://38leinad.wordpress.com/2012/05/29/blender-2-6-exporting-uv-texture-coordinates/
这是 .obj 到 .h 脚本的一个很好的资源:
http://heikobehrens.net/2009/08/27/obj2opengl/