OPENGL程序结构与基本图形的绘制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
gluOrtho2D(-0.0, 1.0, -0.0, 1.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char* argv[]) { /* glutInit( &argc, argv); glutInitWindowPosition( 200, 100); glutCreateWindow( "Green Triangle"); glutDisplayFunc( display); init(); glutMainLoop(); return 0; */ /* glutInit( &argc, argv); glutInitWindowSize( 400, 400); glutInitWindowPosition( 200, 100); glutCreateWindow( "Green Triangle"); glutDisplayFunc( display); init(); glutMainLoop(); return 0; */ glutInit( &argc, argv); glutInitWindowPosition( 200, 100); glutCreateWindow( "Green Triangle"); glutDisplayFunc( display); init(); glutMainLoop(); return 0; }
的取景模式和取景框位置大小;第三部分是 OpenGL 的主要部分,使用 OpenGL
的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变
换、光照处理等等。在使用函数时,每个函数的功能是不同的,可能使用一些函
数,大家绘制出来的图形都基本差不多,但是,计算机在实际操作时,起点和终
点就不同了,打个比方,用书写汉子来说,可能大家都在写同一个字,但是书写
glClearColor( 0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char* argv[]) { glutInit( &argc, argv); glutInitWindowPosition( 200, 100); glutCreateWindow( "Green Triangle"); glutDisplayFunc( display); init(); glutMainLoop(); return 0; }
init();
glutMainLoop(); return 0;
4.修改 display 函数,实现三角形,多边形及圆等基本图形的绘制。 三角形的绘制: #include "stdafx.h" #include "gl/glut.h" void display() {
glClear( GL_COLOR_BUFFER_BIT); glColor3f( 0.0, 1.0, 0.0); glBegin( GL_POLYGON); glVertex2f( -0.7, -0.7); glVertex2f( 0.7, -0.7); glVertex2f( 0, 0.7); glEnd(); glFlush(); } void init() {
用多边形去逼近圆的绘制:(程序代码见最后附件)
5.按照课件上给出的步骤,绘制人头图形。 程序代码见最后附件。
四、结果与讨论:
说明程序的基本结构,谈谈你对上述函数使用的感受。
OpenGL 程序的基本结构可分为三个部分:第一部分是初始化部分。主要是
设置一些 OpenGL 的状态开关,如颜色模式的选择;第二部分设置观察坐标系下
t = i * 2.0 * 3.14159 / n; glVertex2f( cos(t), sin(t) ); } glEnd(); glFlush(); */ glClear( GL_COLOR_BUFFER_BIT); glColor3f( 1.0, 0.0, 0.0); glBegin( GL_POLYGON); //Draw the mouth 画嘴 glVertex2f( 0.53, 0.16); glVertex2f( 0.67, 0.17); glVertex2f( 0.72, 0.25); glVertex2f( 0.45, 0.22); glEnd(); glBegin( GL_TRIANGLES); //Draw the nose 画鼻子 glColor3f( 1.0, 1.0, 0.0); glVertex2f( 0.58, 0.52); glVertex2f( 0.5, 0.3); glVertex2f( 0.66, 0.3); glEnd(); glBegin(GL_TRIANGLE_FAN); //Draw the hear 画头发
glClear( GL_COLOR_BUFFER_BIT); // Clear the frame buffer
glColor3f( 0.0, 1.0, 0.0); // Set current color to green
} void init() {
glClearColor( 0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); } 并把原 main 函数中的内容用以下代码替换: glutInit( &argc, argv); glutInitWindowSize( 400, 400); glutInitWindowPosition( 200, 100); glutCreateWindow( "Green Triangle"); glutDisplayFunc( display);
的笔画先后有别。另外,我们用 OpenGL 绘图,是在固定的模板上添加要用到的
或删除不必要的,这样,操作起来就方便简单易行,也就是依葫画瓢的思想。在
绘制人头图像时,我们可以根据自己的要求,对人头图像的不同部分,选择不同
的自己喜欢的颜色,联想到电视原理与现代电视系统中的三基色原理,颜色选择
例举如下:
Black:
setColor( 0.0, 0.0, 0.0);
Red:
s源自文库tColor( 1.0, 0.0, 0.0);
Green: setColor( 0.0, 1.0, 0.0);
Blue:
setColor( 0.0, 0.0, 1.0);
Yellow: setColor( 1.0, 1.0, 0.0);
Magenta: setColor( 1.0, 0.0, 1.0);
实验名称 OpenGL 程序结构与基本图形的绘制 一、实验目的
学习基于 OpenGL 的图形学编程,掌握程序设计的基本过程与程序的基本结构。
二、实验内容
在 VC6.0 下生成基于控制台的应用程序,把 OpenGL 的基本头文件包含进应用 程序中,并设置好相应的环境参数,编写基于 OpenGL 的应用程序,实现基本图 形的绘制。
glColor3f( 0.0, 1.0, 0.0); glBegin( GL_POLYGON); glVertex2f( -0.7, -0.7); glVertex2f( 0.7, -0.7); glVertex2f( 0, 0.7); glEnd(); glFlush(); */ /* glClear( GL_COLOR_BUFFER_BIT); glColor3f( 0.0, 1.0, 0.0); glBegin( GL_LINE_LOOP); int n = 10; double t; for (int i=0; i < n; ++i) {
Cyan: setColor( 0.0, 1.0, 1.0);
White: setColor( 1.0, 1.0, 1.0);
附件:程序代码:
// yudazhao.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "gl/glut.h" #include "math.h" void display() { /* glClear( GL_COLOR_BUFFER_BIT);
三、实验步骤
1.在 VC6.0 环境下生成一基于控制台的应用程序(win32 console),选择存储目录 为桌面,名字为学号或者姓名的拼音。如下图:
2.在创建的应用程序中选择创建一个“hello world”的应用程序。
3.把以下代码加入到应用程序的 CPP 文件中。 void display() {
glColor3f( 0.4, 0.2, 0.1); glVertex2f( 0.7, 0.95); glVertex2f( 0.3, 0.9); glVertex2f(0.15, 0.65); glVertex2f( 0.55, 0.75); glVertex2f( 0.6, 0.6); glVertex2f( 0.8, 0.75); glVertex2f( 0.99, 0.7); glEnd(); glBegin(GL_LINE_STRIP ); //Draw the face 画脸 glColor3f( 0.5,0.5, 0.5); glVertex2f( 0.25, 0.68); glVertex2f( 0.30, 0.23); glVertex2f( 0.6,0.05); glVertex2f( 0.85,0.23); glVertex2f(0.89,0.72); glEnd(); glBegin( GL_LINES);//Draw the eyebrow 画眉毛 glColor3f( 0.0, 1.0, 1.0); glBegin( GL_LINES); glVertex2f( 0.35, 0.60); glVertex2f( 0.50, 0.55); glVertex2f( 0.65, 0.55); glVertex2f( 0.8, 0.60); glEnd(); glPointSize(7.0); //Draw the eyes 画眼 glColor3f( 0.0, 1.0, 1.0); glBegin(GL_POINTS); //glBegin(GL_POINT_SMOOTH); glVertex2f( 0.42,0.50); glVertex2f( 0.73,0.51); glEnd(); glFlush(); } void init() { /* glClearColor( 0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW);*/ glClearColor( 0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity();