回 帖 发 新 帖 刷新版面

主题:OpenGL入门学习——第三课

好了,现在开始放出第三课的内容。

先回顾一下我们都学习了些什么:

[url=http://www.programfan.com/club/showbbs.asp?id=184355]第一课,编写第一个OpenGL程序[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=184525]第二课,绘制几何图形[/url]
第三课,绘制几何图形的一些细节问题  ——→  [color=0000FF]本次课程的内容[/color]

在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处。例如:点太小,难以看清楚;直线也太细,不舒服;或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成。
这些问题将在本课中被解决。

下面就点、直线、多边形分别讨论。

=====================未完,请勿跟帖=====================

回复列表 (共26个回复)

11 楼

忘了说了~
在glBegin和glEnd之间,只能放与点直接相关的函数,例如:指定顶点、指定顶点颜色、指定顶点材质……,总之是与顶点直接有关的(当然,这里只讨论OpenGL中的函数,其他C语言函数和自己写的函数不算在内)。与点没有直接联系的glEnable,glLineWidth等,在glBegin和glEnd之间出现将被忽略。
而与点直接相关的函数在glBegin和glEnd之外也将被忽略。

查了资料,在glBegin和glEnd之间,只有以下函数是有效的,其它函数全部会被忽略。
glVertex*
glColor*
glIndex*
glSecondaryColor*
glNormal*
glMaterial*
glFogCood*
glTexCood*
glMultiTexCood*
glEdgeFlag*
glArrayElement*
glEvalCoord*
glEvalPoint*
glCallList
glCallLists

12 楼

就说怎么找不到第三课了呢!顶哈!

13 楼


void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    
    glEnable(GL_LINE_STIPPLE);    
    glLineStipple(1, 0XAAAA);    
    glLineWidth(100.0f);
    glBegin(GL_LINES);
    glVertex2f(-0.5f,-0.5f);
    glVertex2f(-0.5f,0.5f);
    glEnd();
    glFlush();
}

这样就可以了.

14 楼

MARK AGAIN!

15 楼

[quote]
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    
    glEnable(GL_LINE_STIPPLE);    
    glLineStipple(1, 0XAAAA);    
    glLineWidth(100.0f);
    glBegin(GL_LINES);
    glVertex2f(-0.5f,-0.5f);
    glVertex2f(-0.5f,0.5f);
    glEnd();
    glFlush();
}

这样就可以了.[/quote]
这样还是没有虚线的效果啊

16 楼

试着将glLineStipple(1, 0XAAAA);中的第一个参数修改为5或10,看看效果是否改变。

17 楼

[quote]比如说,虚线的设置,我这样写,没有效果
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINES);
    glEnable(GL_LINE_STIPPLE);    
    glLineStipple(1, 0XAAAA);    
    glLineWidth(100.0f);
    glVertex2f(-0.5f,-0.5f);
    glVertex2f(-0.5f,0.5f);
    glEnd();
    glFlush();
}[/quote]
你写的不对,你这样写试试看,肯定要变的
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_LINE_STIPPLE);
    glLineStipple(1, 0xAAAA);
    glLineWidth(100.0f);
    glBegin(GL_LINES);
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(-0.5f, 0.0f);
    glEnd();
    glFlush();
}

18 楼

[quote]试着将glLineStipple(1, 0XAAAA);中的第一个参数修改为5或10,看看效果是否改变。[/quote]
这样就可以了,我在VC6.0试过可以,不过建议改一下glLineWidth(100.0f);句子中的100.0,数值太大了,显示出来好像不是想要的效果了
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,1.0,1.0);    

    
    glEnable(GL_LINE_STIPPLE);    
    glLineStipple(5, 0XAAAA);    
    glLineWidth(100.0f);
    glBegin(GL_LINES);
    glVertex2f(-0.5f,-0.5f);
    glVertex2f(-0.5f,0.5f);
    glEnd();
    glFlush();
}
最好用函数glColor3f(1.0,1.0,1.0);设置绘制颜色

19 楼

问题:
  你这章的程序我编译后,那个显示图形的窗口一闪而过,以前都没有遇见过的,是什么原因?

   期待你的答复,感激不尽.

20 楼

不好意思,不是这课,是第四课的,那个在电脑上找MAS那个程序,为什么会一闪而过?

我来回复

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