主题:[原创]OpenGL入门学习——第二课
eastcowboy
[专家分:25370] 发布于 2006-07-31 15:58:00
大家好,这里是OpenGL入门教室。在正式开始前,我想罗嗦几句。
我的课程是写一章就上传一章的,因此不能保证上传时间的稳定性,这几天我辛苦一些,争取前面的课程可以写快一点。但大家也不能太心急,毕竟OpenGL是一个很大的课题,后面的内容会很多。对于我本人而言,随着学习的进行,制作课程的难度也会逐渐增大,相应的,制作时间也会增加。
大家等不及的话,学习时也可以找其他教材来看。
现在开始进行第二课。
需要看第一课的朋友,可以[url=http://www.programfan.com/club/showbbs.asp?id=184355]点这里[/url]
回复列表 (共53个回复)
41 楼
B-FaMiLy [专家分:0] 发布于 2008-04-06 08:15:00
除了感谢只有感谢!!
42 楼
TopWay [专家分:20] 发布于 2008-05-20 22:38:00
glVertex2f()是指定一个点.如果是glVertex3f()是指定三维坐标的点吗?
43 楼
eastcowboy [专家分:25370] 发布于 2008-05-21 08:32:00
[quote]glVertex2f()是指定一个点.如果是glVertex3f()是指定三维坐标的点吗?[/quote]
是的。
而且还可以有glVertex4f,指定齐次坐标。
glVertex4f(x, y, z, w);
glVertex3f(x/w, y/w, z/w);
以上两者是等价的。
OpenGL内部以齐次坐标进行运算,也就是说需要四个值。如果指定的值少了,OpenGL会自动补充。x, y, z自动补充为0.0,w自动补充为1.0。因此有下面的转换:
glVertex2f(x, y); --> glVertex4f(x, y, 0.0f, 1.0f);
glVertex3f(x, y, z); --> glVertex4f(x, y, z, 1.0f);
45 楼
TopWay [专家分:20] 发布于 2008-05-21 10:57:00
如果那样 ,那现在不是可以画 三维图象了...我去试一下
46 楼
eastcowboy [专家分:25370] 发布于 2008-05-21 12:32:00
呵呵,可以画三维的图象的,但是需要注意一点,就是深度测试。
比如你画两个正方形,要知道哪个离观察者更近,这样才能确定哪个正方形可以遮住另一个。
最简单的做法就是在绘制前加上
glEnable(GL_DEPTH_TEST);
另外将
glClear(GL_COLOR_BUFFER_BIT);
换成
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
48 楼
wangcshe [专家分:0] 发布于 2009-02-22 16:00:00
请问楼主,这个sin(x)的函数为什么是这样写的?
glBegin(GL_LINE_STRIP);
for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)
{
glVertex2f(x*factor, sin(x)*factor);
}
glEnd();
为什么这么写就不行呢
for(x=-10.0f; x<10.0f; x+=0.01f)
{
glVertex2f(x, sin(x));
}
谢谢。
49 楼
eastcowboy [专家分:25370] 发布于 2009-02-22 23:56:00
sin(x)的值域是[-1, 1]
若直接把sin(x)作为y坐标,则会观察到较大的波动。
50 楼
heeyu [专家分:0] 发布于 2009-03-18 14:54:00
谢谢楼主~最近再做毕设...用OPENGL做一个画板........其中一步是...要画曲线....有点像windows自带画图程序那种...请问这个是怎么实现的啊
我来回复