游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3414|回复: 6

关于glBegin()和glEnd()之间点较多的情况

[复制链接]

3

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2010-1-31 19:33:00 | 显示全部楼层 |阅读模式
比如:

glBegin(GL_POINTS);

for(i=0;i<600;i++)
{
     for(j=0;j<800;j++)
     {
        glVertex3f( point[j].x , point[j].y , point[j].z );
     }
}

glEnd();


这么做似乎会出错,但是如果 800 * 600 变成 400 * 300 就不会出错了,这是为什么?

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2010-1-31 22:23:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况

这个看显卡和驱动!

不过你这样点确实太多了

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2010-2-1 16:58:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况



for(i=0;i<600;i++)
{
     for(j=0;j<800;j++)
     {
        glBegin(GL_POINTS);
        glVertex3f( point[j].x , point[j].y , point[j].z );
        glEnd();
     }
}

不要问为什么

3

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2010-2-2 15:04:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况

先试试楼上的

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-2-5 22:00:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况

楼上的楼上就不要在这里误人子弟了。
你的这个方式是最底效率的。还不如用楼主的代码呢。

比较好的方法是把顶点数据放在一个顶点数组,双重循环先把数据写入这个数组。
再用glDrawArrays() 或 void glDrawElements() 来一次性发送数据到显卡并进行渲染。
“顶点数组”是一种比较灵活高效的解决方案,也是OpenGL推荐使用的。
你会发现在OpenGL|ES里甚至没有了glVertex3f()这个函数,因它的解很低效。

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-2-8 13:14:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况

同意楼上的
3楼那是最低效率

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2010-2-12 11:14:00 | 显示全部楼层

Re:关于glBegin()和glEnd()之间点较多的情况

效率最高的是VBO
我也知道这样效率最低
但是你们要注意,楼主要一次性渲染800*600=四十八万个顶点
打算用point填充窗口的每一个像素
至于顶点数组,估计楼主还需要一些时间才能搞明白
楼主现在需要的是能够成功运行程序来增强自信
效率只能以后慢慢通过实际经验来积累
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-14 13:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表