请问OpenGL如何高效贴图 我现在往一个模型上(10^4点数级别的网格文件)贴图,通过使用OpenGL中二维纹理映射的方法。贴图的过程是实时与动态的,模型也可以通过鼠标等交互方式变换。模型显示的方法是使用显示列表的方法,因为显示列表中包含对面的判断,如果该面有纹理,则要纹理映射,否则不用。所以当再一次贴图时,显示列表中的内容需要重新建立,这样的时间花费有3~4s左右(目测),这样有点过慢了,不知道有什么解决办法没?还是本来就不应该这样实现?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for(i = 0; i < face.size(); i++){ if(HasTexture[i]) glTexCoord2f(...); glVertex3f(...);}这是显示表里的主要内容,HasTexture数组用来标记第i个面是否有纹理,而这个数组时可以动态更新的,也就是说不仅仅是对显示列表进行读的操作,也要有写的操作。 区区一万个点,如果没有用shader之类的复杂技术的话,性能方面不应该有任何问题。如果数据频繁修改的话,不要用显示列表。其实现在显示列表已经较少有人用了,虽然号称性能最大化,但其灵活性则是最小化,不好用。对于OpenGL 1.1以上版本,考虑使用顶点数组(Vertex Array)。对于OpenGL 1.5以上版本,考虑使用顶点缓冲(Vertex Buffer Object)。如果没有达到对应版本,也可以考虑等效的ARB扩展。例如Intel早些年的显卡,支持OpenGL 1.4,但实际上也可以通过ARB扩展来使用顶点缓冲。楼主可以搜索相关的资料。P.S. 检查一下硬件加速是否真的开启了?printf("%s\n", glGetString(GL_RENDERER));如果输出的不是你的显卡型号或者显卡驱动版本,那可能就是没有开启硬件加速。此时应该下载最新驱动。 io完成端口发送数据问题! WM_PAINT 图画闪烁 控制其他程序的视图翻转Rotate 服务器突然断网造成客户机长时间死机的情况应该如何解决? 能不能在网格中,带CheckBox选择框~该用何种网格, 88分求答案,同时也祝各位高手都发发,谢谢! 请问哪位有《windows核心编程指南》的源码!? 100分求以前在csdn上发的文章里的c++代码 高程考砸了,郁闷,散分 请大家介绍个在windowsxp下使用的不破坏数据的分区工具 菜鸟提问:怎么样让状态栏的一个窗格响应鼠标的双击 请教高手,代码写在 b.dll 中,使b.dll能够得到自己所在的路径 "d:\b.dll"
{
if(HasTexture[i]) glTexCoord2f(...);
glVertex3f(...);
}
这是显示表里的主要内容,HasTexture数组用来标记第i个面是否有纹理,而这个数组时可以动态更新的,也就是说不仅仅是对显示列表进行读的操作,也要有写的操作。
如果数据频繁修改的话,不要用显示列表。其实现在显示列表已经较少有人用了,虽然号称性能最大化,但其灵活性则是最小化,不好用。
对于OpenGL 1.1以上版本,考虑使用顶点数组(Vertex Array)。
对于OpenGL 1.5以上版本,考虑使用顶点缓冲(Vertex Buffer Object)。
如果没有达到对应版本,也可以考虑等效的ARB扩展。例如Intel早些年的显卡,支持OpenGL 1.4,但实际上也可以通过ARB扩展来使用顶点缓冲。楼主可以搜索相关的资料。P.S. 检查一下硬件加速是否真的开启了?
printf("%s\n", glGetString(GL_RENDERER));
如果输出的不是你的显卡型号或者显卡驱动版本,那可能就是没有开启硬件加速。此时应该下载最新驱动。