回 帖 发 新 帖 刷新版面

主题:[原创]OpenGL入门学习——第二课

大家好,这里是OpenGL入门教室。在正式开始前,我想罗嗦几句。

我的课程是写一章就上传一章的,因此不能保证上传时间的稳定性,这几天我辛苦一些,争取前面的课程可以写快一点。但大家也不能太心急,毕竟OpenGL是一个很大的课题,后面的内容会很多。对于我本人而言,随着学习的进行,制作课程的难度也会逐渐增大,相应的,制作时间也会增加。
大家等不及的话,学习时也可以找其他教材来看。

现在开始进行第二课。
需要看第一课的朋友,可以[url=http://www.programfan.com/club/showbbs.asp?id=184355]点这里[/url]

回复列表 (共53个回复)

41 楼


     除了感谢只有感谢!!

42 楼


glVertex2f()是指定一个点.如果是glVertex3f()是指定三维坐标的点吗?

43 楼

[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);

44 楼

拜帖收藏!

45 楼

如果那样 ,那现在不是可以画 三维图象了...我去试一下

46 楼

呵呵,可以画三维的图象的,但是需要注意一点,就是深度测试。
比如你画两个正方形,要知道哪个离观察者更近,这样才能确定哪个正方形可以遮住另一个。

最简单的做法就是在绘制前加上
glEnable(GL_DEPTH_TEST);
另外将
glClear(GL_COLOR_BUFFER_BIT);
换成
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

47 楼

楼主好人啊

48 楼


请问楼主,这个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 楼

sin(x)的值域是[-1, 1]
若直接把sin(x)作为y坐标,则会观察到较大的波动。

50 楼

谢谢楼主~最近再做毕设...用OPENGL做一个画板........其中一步是...要画曲线....有点像windows自带画图程序那种...请问这个是怎么实现的啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册