如何应用始终保持其原始比例的重复纹理(纹理中的1个像素=屏幕上的1个像素),而不管其应用的顶点数据如何.
我意识到这不是最常见的任务,但可以轻松设置opengl来做到这一点,还是我需要将某种掩模应用于尊重其原始外观的顶点数据?
编辑:在我的具体情况下,我试图绘制不同大小的2D椭圆,具有相同的像素模式.椭圆形由三角形扇形成,我很难在其上绘制任何类型的重复纹理.我希望有一些opengl配置组合可以很容易地做到这一点.此外,现在我意识到重要的是要提到我正在使用opengles,因为iPhone不可用.
创建有问题的3D对象,而不显示它.
您可以使用gluProject获取对象的边界作为像素位置(以获取表示对象边缘的像素.
然后,您可以使用gluUnProject将插入的像素映射到对象的坐标.然后,您开始绘制,并映射一个自定义(即时)纹理在同一个对象上并显示它.
不知道你为什么要这样做,但这应该是一个很好的起点.
编辑:
我的意思是自定义,如果是界限您的对象(在一个维度上)是-3.0到1.0,第一个像素行是从-3.0到-2.0,您的纹理贴图将指示25%的自定义纹理映射到该点,并创建这一切都与您想要在那里显示的像素的颜色.
在思考完之后,我意识到你可以在投影屏幕坐标的顶部绘制一个纹理(使用2D绘图工具.)
我认为这可以得到你的想法的主旨.我不认为它会在交互式3D演示中运行良好,如果"对象"靠近并移开,如果纹理似乎没有放大和缩小.但你没有说你实际在做什么.
编辑2:
OpenGL 2D投影:
小心
小心功能名称,例如,opengles 1.1有glOrthox和glOrthof.确保检查gl.h头文件中的可用内容.
const XSize = 640, YSize = 480 glMatrixMode (GL_PROJECTION) glLoadIdentity () glOrtho (0, XSize, YSize, 0, 0, 1) glMatrixMode (GL_MODELVIEW) glDisable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT) // Now draw with 2i or 2f vertices instead of the normal vertex3f functions. // And for ES, of course set up your data structures and call drawarrays ofr drawelements. SwapBuffers()
这将允许您在OpenGL中绘制2D形状(比使用3D投影更简单.)要混合两者,例如,在3D中绘制然后在2D中绘制,请按照第二个链接.
这是关于2D绘图的优秀教程:
http://basic4gl.wikispaces.com/2D+Drawing+in+OpenGL
以下是混合两者的基础知识:
http://www.gamedev.net/community/forums/topic.asp ?topic_id = 96440
我希望这就是你想要的.我从你的帖子中偷偷地怀疑你在将纹理映射到三角形点以使其显示为"笔直"时遇到了麻烦.您可能想要查看NeHe上的基本纹理映射:http://www.gamedev.net/community/forums/topic.asp?topic_id = 96440
例如,gltexcoord2f根据映射到下一个绘制顶点的纹理的宽度和高度百分比来指定纹理内的点(0.0-1.0).使用三角形扇形,您可以使用一些数学条件来确定使用顶点指定的整个对象的宽度和高度的百分比.
例如,带有纹理贴图的球体(地球的墨卡托投影)最好通过计算纬度线作为基础三角形扇形顶点值的基础进行映射,因为它可以简化纹理坐标的计算.使多边形近似简单的几何形状允许您使用三角函数更轻松地计算纹理坐标.
我希望这是有帮助的.
Hehere,我将退出继续使用桌面示例,你必须修改.这是一个OpenGLES示例,可以进行正确的3D纹理映射.你可以使用我上面所说的,这个例子来做2D纹理映射.
http://www.zeuscmd.com/tutorials/opengles/17-TextureMapping.php