回 帖 发 新 帖 刷新版面

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

现在即将放出的是第十六课的内容。

首先还是以前课程的连接:
[url=http://www.programfan.com/club/showbbs.asp?id=184355]第一课,编写第一个OpenGL程序[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=184525]第二课,绘制几何图形[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=184769]第三课,绘制几何图形的一些细节问题[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=185032]第四课,颜色的选择[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=196017]第五课,三维的空间变换[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=196231]第六课,动画的制作[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=218828]第七课,使用光照来表现立体感[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=219518]第八课,使用显示列表[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=224877]第九课,使用混合来实现半透明效果[/url]
[url=http://www.programfan.com/club/post-227694.html]第十课,BMP文件与像素操作[/url]
[url=http://www.programfan.com/club/post-244703.html]第十一课,纹理的使用入门[/url]
[url=http://bbs.pfan.cn/post-252901.html]第十二课,OpenGL片断测试[/url]
[url=http://bbs.pfan.cn/post-275218.html]第十三课,OpenGL是一个状态机[/url]
[url=http://bbs.pfan.cn/post-275219.html]第十四课,OpenGL版本和OpenGL扩展[/url]
[url=http://bbs.pfan.cn/post-275223.html]第十五课,从“绘制一个立方体”来看OpenGL的进化过程[/url]
第十六课,在Windows系统中显示文字  ——→  [color=0000FF]本次课程的内容[/color]

内容超多的一课!不过我想精彩的程度也一定不会让大家失望。大家不妨先浏览一下课程里的图片:)。

[color=FF0000]2008-06-10 修改了附件[/color]
增加了两个文件,showline.c, showtext.c。分别为第二个和第三个示例程序的main函数相关部分。
在ctbuf.h和textarea.h最开头部分增加了一句#include <stdlib.h>
附件中一共有三个示例程序:
第一个,飘动的“曹”字旗。代码为:flag.c, GLee.c, GLee.h
第二个,带缓冲的显示文字。代码为:showline.c, ctbuf.c, ctbuf.h, GLee.c, GLee.h
第三个,显示歌词。代码为:showtext.c, ctbuf.c, ctbuf.h, textarea.c, textarea.h, GLee.c, GLee.h
其中,GLee.h和GLee.c可以[url=http://www.opengl.org/sdk/libs/GLee/GLee5_21.zip]从网上下载[/url],因此这里并没有放到附件中。在编译的时候应该将这两个文件和其它代码文件一起编译。

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

回复列表 (共106个回复)

41 楼


太赞了,lx辛苦了

入门学习中,感谢~~[em2]

42 楼

顶一个,顶顶

43 楼

学习了,不过我想请问一下我用隐藏面消隐总是出错是为什么,在网上似乎找不到跟我一样出错的例子。。。。
比如以下程序:

#define WindowWidth  800
#define WindowHeight 800
#define WindowTitle  "test"

#include <gl/glut.h>
#include <stdio.h>
#include <malloc.h>

void display(void)
{
    glClearColor(1.0,1.0,1.0,1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(130,1,0,2500);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(50,50,50,50,100,50,0,0,1);

    glColor3f(0.0,1.0,0.0);
    glBegin(GL_QUADS);
    glVertex3f(0,100,0);
    glVertex3f(100,100,0);
    glVertex3f(100,100,75);
    glVertex3f(0,100,75);
    glEnd();

    glColor3f(0.0,0.0,1.0);
    glBegin(GL_QUADS);
    glVertex3f(0,150,50);
    glVertex3f(100,150,50);
    glVertex3f(100,150,150);
    glVertex3f(0,150,150);
    glEnd();

    glColor3f(1.0,0.0,0.0);
    glBegin(GL_QUADS);
    glVertex3f(0,0,0);
    glVertex3f(100,0,0);
    glVertex3f(100,150,0);
    glVertex3f(0,150,0);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(WindowWidth, WindowHeight);
    glutCreateWindow(WindowTitle);
    glutDisplayFunc(&display);
//    glEnable(GL_DEPTH_TEST);
    glutMainLoop();
    return 0;
}
只要开启glEnable(GL_DEPTH_TEST);这句,就直接导致什么都没了,辛苦您了。。。

44 楼

赞一个

45 楼

to kingkin1989(43楼):
这应该是gluPerspective使用不当而造成的问题。注意这个函数的后两个参数都应该是正数。
我将gluPerspective(130,1,0,2500);修改为gluPerspective(130,1,1,2500);之后,可以看到绘制出彩色的图形。

在不影响显示效果的前提下,应该尽可能的把gluPerspective的第三个参数设置为较大,而把第四个参数设置为较小。这样可以有效的利用深度缓冲的精度。

46 楼


受教了。。楼主辛苦了

47 楼

支持楼主,感谢你的辛勤工作,学习了。

48 楼

看完了,谢谢楼主了!

49 楼

楼主写得通俗易懂。非常好。顶了。。。

50 楼

请问,如果要用Open GL实现等值线的绘制,该如何实现???

我来回复

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