计算机图形学实验指导

合集下载

Bresenham椭圆算法

Bresenham椭圆算法

GIS专业实验报告(计算机图形学)实验3 使用Bresenham画椭圆算法,绘制一个椭圆一.实验目的及要求根据Bresenham画椭圆算法,掌握绘制椭圆的程序设计方法。

在绘制时应利用椭圆的对称性。

注意,不能使用语言库中的画圆函数。

二.理论基础1.Bresenham椭圆算法:中点Bresenham椭圆绘制算法的基本原理与中点Bresenham画圆算法类似,也是尽可能的迫近椭圆(多边形迫近法),推导出圆弧的增量算法的表达式,找到最接近椭圆圆弧的像素点。

三.算法设计与分析程序源码如下:#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <math.h>#include <stdio.h>void drawEllipse (int a, int b, int xLoc, int yLoc){glPushMatrix ();int x, y;float d1, d2, aa, bb;aa = a * a;bb = b * b;d1 = bb + aa * (-b + 0.25);glTranslatef ((GLfloat) xLoc, (GLfloat) yLoc, 0.0f);x = 0;y = b;glBegin (GL_POINTS);glVertex2i ( x, y);glVertex2i (-x, y);glVertex2i (-x, -y);glVertex2i ( x, -y);while (bb * (x + 1) < aa * (y - 0.5)){if (d1 <= -0.000001){d1 += bb * ((x << 1) + 3);}else{d1 += bb * ((x << 1) + 3) + aa * (2 - (y << 1));-- y;}++ x;glVertex2i ( x, y);glVertex2i (-x, y);glVertex2i (-x, -y);glVertex2i ( x, -y);}d2 = bb * (0.25 * x) + aa * (1 - (y << 1));while (y > 0){if (d2 <= -0.000001){++ x;d2 += bb * ((x + 1) << 1) + aa * (3 - (y << 1));}else{d2 += aa * (3 - (y << 1));}-- y;glVertex2i ( x, y);glVertex2i (-x, -y);glVertex2i (-x, y);glVertex2i ( x, -y);}glEnd ();glPopMatrix ();}void display (void){glClearColor(0.0,0.0,0.0,0.0);glClear (GL_COLOR_BUFFER_BIT);glLoadIdentity ();glColor3f (1.0f, 0.0f, 0.0f);drawEllipse (400, 300, 50, 50);glutSwapBuffers ();glFlush();}void reshape (int w, int h){glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();if (w <= h){gluOrtho2D (-600.0, 600.0, -600.0 * (GLfloat) h / (GLfloat) w, 600.0 * (GLfloat) h / (GLfloat) w);}else{gluOrtho2D (-600.0 * (GLfloat) w / (GLfloat) h,600.0 * (GLfloat) w / (GLfloat) h, -600.0, 600.0);}glMatrixMode (GL_MODELVIEW);glLoadIdentity ();}int main (int argc, char ** argv){glutInit (&argc, argv);glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize (450,450);glutCreateWindow ("Bresenham 椭圆");glClearColor(0.0,0.0,0.0,0.0);glutReshapeFunc (reshape);glutDisplayFunc (display);glutMainLoop ();}四.试及运行结果的自我分析与自我评价图1 椭圆运行结果五.实验心得及建议。

bezier曲线或b样条曲线的绘制

bezier曲线或b样条曲线的绘制

淮阴工学院计算机科学系实验报告书课程名:《计算机图形学》题目:实验4 BEZIER曲线或B样条曲线的绘制班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日1、实验内容或题目编程实现三次BEZIER或B样条曲线的绘制。

2、实验目的与要求(1) 通过实验,进一步理解和掌握生成BEZIER或B样条曲线的算法;(2) 掌握BEZIER或B样条曲线的基本生成过程;(3) 通过编程,会在TC环境下编程实现三次BEZIER或B样条曲线的绘制。

3、实验步骤与源程序错误!未找到引用源。

实验步骤1、算法、原理清晰,有详细的设计步骤;2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行特殊模式的运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。

错误!未找到引用源。

源代码#include "graphics.h"float px[4]={ 50,80,120,140 };float py[4]={100,230,230,160};void Bezier(){float a0,a1,a2,a3,b0,b1,b2,b3;int k,x,y;float i,t,n=4;setcolor(15);for(k=0;k<3;k++){moveto(px[k],py[k]);lineto(px[k+1],py[k+1]);}setcolor(4);a0=px[0];a1=-3*px[0]+3*px[1];a2=3*px[0]-6*px[1]+3*px[2];a3=-px[0]+3*px[1]-3*px[2]+px[3];b0=py[0];b1=-3*py[0]+3*py[1];b2=3*py[0]-6*py[1]+3*py[2];b3=-py[0]+3*py[1]-3*py[k+2]+py[3];for(i=0;i<n;i+=0.001){t=i;x=a0+a1*t+a2*t*t+a3*t*t*t;y=b0+b1*t+b2*t*t+b3*t*t*t;if(i==0)moveto(x,y);lineto(x,y);}}void main(){int driver,mode;driver=DETECT;initgraph(&driver,&mode,"..\\bgi");Bezier();}4、测试数据与实验结果5、结果分析与实验体会通过这次实验,我初步熟悉了turboc 的运行环境。

计算机图形学-3D图形绘制代码和截图

计算机图形学-3D图形绘制代码和截图

实验报告内容:
一、实验设备:
OpenGL 实用工具库文件 glut32.dll,glut.h,glut32.lib
安装 GLUT 库
Copy glut.h
=>VC/include/gl/
glut32.lib =>VC/lib/
glut32.dll =>windows/system32/
二、实验目的、要求: 1.理解 OpenGL 三维观察流水线 2.理解 3D 模式数据结构及绘制方法
②截图:
glMatrixMode(GL_PROJECTION); glLoadIdentity(); // gluPerspective(45.0, float(w) / h, 0.1, 100.0); glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0); glMatrixMode(GL_MODELVIEW); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glLoadIdentity();//设置当前矩阵为单位矩阵 gluLookAt(5.0,4.0,9.0,0.0,0.0,0.0,0.0,1.0,0.0); glScalef(2.0,1.0,1.0);//x 方向放大 2 倍 glutWireCube(1); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow("3D Cube"); init(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMainLoop(); }

江苏大学-计算机图形学实验1报告【范本模板】

江苏大学-计算机图形学实验1报告【范本模板】

实验报告的内容提纲实验报告应包括以下内容:(1)实验题目(2)实验内容(3)实验环境:本次上机实验所使用的平台和相关软件。

(4)问题分析:对所要解决的问题进行阐述和分析,提出解决方法,列出解决步骤。

(5)算法设计:用流程图或伪代码描述解决问题的算法。

(6)源代码(7)程序运行结果(8)总结1实验报告的格式规范(1)报告按以下内容次序编排:封面、成绩评定表、报告。

(2)用A4纸,通栏排版,页边距:上2。

2厘米,下2厘米,左2.7厘米,右2.3厘米;(3)行距一律用1.5倍行距;(4)中文一律用宋体,英文和数字一律用Times New Roman;(5)一级标题用四号粗体,段前段后不空行,二级标题用小四号粗体,左端不缩进,段前段后均不留多余空格;(6)正文用小四号,每段文字首行缩进2个字符.(7)关于正文中的“图”和“表”:➢图形下方标示图号与图名(见下面示例),图号与图名字体要求:中文宋体小五号,数字和英文Times New Roman,小五号;图1 学员报名信息管理模块➢表格上方标示表号与表名(见下面示例),表号与表名字体要求:中文宋体小五号, 数字和英文Times New Roman,小五号。

表1 科目表(tb_Subject)计算机科学与通信工程学院实验报告课程计算机图形学实验题目二维图形绘制学生姓名学号专业班级指导教师日期成绩评定表1. 实验内容绘制金刚石图案。

金刚石图案的成图规则是:把一个圆周等分成n份,然后每两点之间连线.当n取奇数时,该图案可一笔连续绘成,即用MoveTo函数确定一个当前点,然后连续用LineTo函数连点成线。

绘制下图所示的魔术三角形图案,采用三种可明显区分的颜色填充.绘制递归圆应用递归的方法绘制如下所示的图案2。

实验环境操作系统:Windows xp编译环境:Vc++6。

03. 问题分析1。

金刚石绘制本实验的核心是在圆的基础上绘制金刚石图案。

金刚石图案是一个二维图案,仅使用二维坐标(x,y)就可以绘制,本实验使用数组实现。

4上机实验报告3:图形裁剪算法的具体实现

4上机实验报告3:图形裁剪算法的具体实现

计算机图形学课程实验报告信息与计算科学(三)上机实验3:裁剪算法班级:姓名:学号:上机实验(3)的题目和要求一、实验目的掌握图形裁剪算法的基本思想,并能上机编程实现相应的算法。

二、实验要求(Direction)1.每个学生单独完成。

2.开发语言规定为C语言。

3.请在自己的实验报告上写明姓名、学号、班级。

4.每次交的实验报告内容包括:试验目的和意义、题目、程序制作步骤、主程序(包括源代码注释)。

三、实验题目实验题1:上机编一程序实现直线的中点裁剪算法。

具体要求如下说明:1 该程序能实现窗口屏幕上任意一条直线的裁剪;2 直线段要求可以随机输入;运行结果图:裁剪之前裁剪之后#define LE 2#define RI 4#define BO 6#define TO 10#define XLEFT 150#define XRIGHT 350#define YBOTTOM 150#define YTOP 300#include "math.h"#include "stdio.h"#include "graphics.h"void main(){int x1,y1,x2,y2,xx,yy,xxx,yyy;int graphdriver=DETECT,graphmode;initgraph(&graphdriver,&graphmode," ");setcolor(6);line(XLEFT,YTOP,XRIGHT,YTOP);line(XLEFT,YBOTTOM,XRIGHT,YBOTTOM);line(XLEFT,YTOP,XLEFT,YBOTTOM);line(XRIGHT,YTOP,XRIGHT,YBOTTOM);x1=50;y1=200;x2=400;y2=300;setcolor(1);line(x1,y1,x2,y2);xx=0;yy=0;xxx=0;yyy=0;draw_ett(x1,y1,x2,y2,&xx,&yy);draw_ett(x2,y2,xx,yy,&xxx,&yyy);setcolor(4);line(xx,yy,xxx,yyy);getch();closegraph();}int encode (int x, int y, int *code){ int c=0;if (x<XLEFT) c=c|LE;else if (x>XRIGHT) c=c|RI;if (y<YBOTTOM) c=c|BO;else if (y>YTOP) c=c|TO;*code=c;return code;}draw_ett(int x1, int y1, int x2, int y2, int *x, int *y) { int code1,code2,code;int xx,yy;float d,d1,d2;encode(x1,y1,&code1);encode(x2,y2,&code2);if (code2==0) { xx=x2;yy=y2; *x=xx; * y=yy;return;}if ((code1&code2)!=0) return;L1: xx=(x1+x2)/2;yy=(y1+y2)/2;encode(xx, yy, &code);d1=(yy-y1)*(yy-y1);d2=(xx-x1)*(xx-x1);d=sqrt(d1+d2);if (d<=1) { *x=xx;*y=yy; return;}if ((code&code1)!=0){ x1=xx; y1=yy; }else { x2=xx; y2=yy;}goto L1;}实验题2:实现Sutherland-Hodgeman多边形裁剪算法。

Bresenham直线算法

Bresenham直线算法

nidGIS专业实验报告(计算机图形学)实验.1 使用Bresenham画线算法,绘制一条直线段一.根据Bresenham画线算法,掌握绘制直线的程序设计方法。

注意,不能使用语言库中的画线函数。

二.理论基础1.中点Bresenham算法:在屏幕上建立平面直角坐标系,根据所给的坐标得出数学意义上的直线公式,然后在最大位移方向上依次选取最逼近直线的像素点,最终取所有像素点,得到的像素点尽可能的逼近直线,并填充颜色,显示出来。

三.算法设计与分析源码如下:#include<Gl/gl.h>#include<Gl/glu.h>#include<Gl/glut.h>void init(void){glClearColor(0.0,0.0,0.0,0.0);gluOrtho2D(0.0,50.0,.0,40.0);}int abs(int x){int y;if(x<=0)y=-x;elsey=x;return y;}void set_pixel(float x,float y){glPointSize(10);glBegin(GL_POINTS);glVertex2f(x,y);glEnd();}void voidline(int x1,int y1,int x2,int y2){int dx;int dy;int x;int y;int p;int const1;int const2;int inc;int tmp;dx=x2-x1;dy=y2-y1;if(dx*dy>=0)inc=1;elseinc=-1;if(abs(dx)>abs(dy)){if(dx<0){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;dx=-dx;dy=-dy;}p=2*dy-dx;const1=2*dy;const2=2*(dy-dx);x=x1;y=y1;set_pixel(x,y);while(x<x2){x++;if(p<0)p+=const1;else{y+=inc;p+=const2;}}}else{if(dy<0){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;dx=-dx;dy=-dy;}p=2*dx-dy;const1=2*dx;const2=2*(dx-dy);x=x1;y=y1;set_pixel(x,y);while(y<y2){y++;if(p<0)p+=const1;else{x+=inc;p+=const2;}set_pixel(x,y);}}}void display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(255,0.0,0.0);voidline(25,5,45,45);glPointSize(6.0);glFlush();}int main(int argc,char** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(450,450);glutInitWindowPosition(100,100);glutCreateWindow("Bresenham 直线");init();glutDisplayFunc(display);glutMainLoop();return 0;}四.程序调试及运行结果的自我分析与自我评价写出输入的起始点和终点坐标,截图运行结果类似于下面图,换成你自己的图图1 Bresenham画线算法运行结果图四.实验心得及建议。

计算机图形学 使用VC开发绘图程序的基本方法

计算机图形学  使用VC开发绘图程序的基本方法

七、思考题(尽量做,计入成绩) :
1、为什么要用 CDC 定义一个对象来作图? Windows 使用与设备无关的图形设备环境进行显示 。MFC 基础类库定义了设备环境对象类----CDC 类。 因为使用的是 mfc,如果是 sdk 的话就得用 dc,这个 cdc 想当是一个给设备画画的笔。 2、如果要绘制多条直线,应该如何编程?
4、 VC 中编程环境中,工程(project)是什么意义?为什么要用 project 的方式管理代码?
Project 文件的扩展名是 dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息, 每个工程都对应有一个 dsp 类型的文件。 clw 为扩展名的文件是用来存放应用程序中用到的类和资源的信 以 息的,这些信息是 VC 中的 ClassWizard 工具管理和使用类的信息来源。 因为用 project 的方式管理代码比较方便,可以看成是在一个文件夹下进行的。
3、 在 MyView.cpp 文件的 OnDraw 函数中加入如下代码。 pDC->MoveTo(100,100); pDC->LineTo(200,200); CPen *pOldPen; CPen dashPen; dashPen.CreatePen(PS_DASH,1,RGB(255,0,0)); pOldPen = pDC->SelectObject(&dashPen); pDC->LineTo(300,100); pDC->SelectObject(pOldPen); pDC->LineTo(400,200);
实验(No. 1
)题目:使用 VC 开发绘图程序的基本方法
实验目的及要求:
一、实验目的:
编写一个具有一定功能的 MFC 类库应用程序 (引入简单的视图/文档概念) 掌握 GDI 画图的基本方法, , 并调用系统函数画直线。

山东大学计算机图形学实验报告实验二

山东大学计算机图形学实验报告实验二
山东大学计算机科学与技术学院 计算机图形学课程实验报告
学号:2420430689 姓名: QQ
班级: 2014 级
实Байду номын сангаас题目:实现二维平面的基本变换
实验学时:4
实验日期: 2017 年 3 月 28 日
实验目的: 1. 掌握配置 OpenGL 环境的方法; 2. 熟悉 OpenGL 应用程序基本架构; 3. 学习 OpenGL 中的 gl、glu、glut 等库函数进行图形学算法编程和实现。
//填充右部 while (!judgeIfBoundary(x, y)) {
glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); glFlush(); x = x + 1; } int xright = x - 1;
//填充左部 x = savex - 1; while (!judgeIfBoundary(x, y)) {
#include <cmath> #include <stack> #include <glut.h>
using namespace std;
struct mypoint {
GLint x; GLint y;
mypoint(GLint _x, GLint _y) :x(_x), y(_y) {}; mypoint() {}; };
x = x + 1; } } } } } 最后效果
结论分析与体会: 这次实验总的来讲比较繁琐,尤其是在计算校徽坐标的时候,当时是从学校官网 上找了一个比较正规的校徽,用 Windows 的画图工具打开,找出点的坐标然后用 数学方法变换的。
return true; else
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验课程任务与要求 目的与任务: 计算机图形学实验教学是为了将学生的计算机操作能力、分析能力、工程设计能力与应用实践结合起来,引导学生由浅入深地掌握计算机图形学理论与算法,掌握交互构图能力,具备工程应用的图形学基础。 实验基本要求:(以软件设计为主要表现形式) (1) 上机前应准备好实验的程序设计算法描述与关键分析内容。 (2) 准备好程序测试数据和设备操作步骤,上机调试、运行。 (3) 完成每个实验后进行数据与程序对比分析。 (4) 写出实验报告(含实验题目,不同顺序或本次算法的比较与效果分析,给出运行结果。若实验未能通过,给出原因与今后改进措施)。

实验报告式样: 《计算机图形学》实验报告

实验题目 姓名 系别班级 学号 设计日期 指导教师 设计成绩

一.设计目的及要求 二.理论基础 三.算法设计与分析 四.程序调试及运行结果的自我分析与自我评价 五.设计心得及建议 实验一 VC++6.0+OpenGL绘图环境及简单图形的输出 学时安排:(2学时) 要求:(1)掌握VC++6.0+OpenGL绘图环境的设置; (2)利用OpenGL绘制简单图形并在设备上输出; (3)用 glut编C++程程序的方法。 实验指导: MFC编程 1. 开发环境的配置 (1) 将“glut32.dll”文件拷贝到操作系统对应的目录中。 (2) 将“glut32.h” 文件拷贝到VC++6.0的Include文件夹中。 (3) 将“glut32.lib”文件拷贝到VC++6.0的lib文件夹中。 2. 启动VC6.0,新建一个单文档应用程序,如名称MySDOpenGL。 3. 利用 MFC ClassWizard为CMySDOpenGLView类添加消息WM_CREATE ,

WM_DESTROY ,WM_SIZE,WM_TIMER的响应函数。 4. 如下所示在MySDOpenGLView.h中加入源代码。 public: //添加成员函数与成员变量 BOOL RenderScene(); BOOL SetupPixelFormat(void); void SetLogicalPalette(void); BOOL InitializeOpenGL(CDC* pDC); HGLRC m_hRC; //OpenGL绘制描述表 HPALETTE m_hPalette; //OpenGL调色板 CDC* m_pDC; //OpenGL设备描述表 5. 如下所示在MySDOpenGLView.cpp中加入源代码。 BOOL CMySDOpenGLView::PreCreateWindow(CREATESTRUCT& cs) { 。。。。。。 cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS; //设置窗口类型 。。。。。。 } void CMySDOpenGLView::OnDraw(CDC* pDC) { 。。。。。。 RenderScene(); //渲染场景 。。。。。。 } int CMySDOpenGLView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //初始化OpenGL和设置定时器 m_pDC = new CClientDC(this); SetTimer(1, 20, NULL); InitializeOpenGL(m_pDC); return 0; } void CMySDOpenGLView::OnDestroy() { CView::OnDestroy(); //删除调色板和渲染上下文、定时器 ::wglMakeCurrent(0,0); ::wglDeleteContext( m_hRC); if (m_hPalette) DeleteObject(m_hPalette); if ( m_pDC ) { delete m_pDC; } KillTimer(1); } void CMySDOpenGLView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); //添加窗口缩放时的图形变换函数 glViewport(0,0,cx,cy); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(60.0, (GLfloat) cx/(GLfloat) cy, 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void CMySDOpenGLView::OnTimer(UINT nIDEvent) {//添加定时器响应函数和场景更新函数 Invalidate(FALSE); //year = (year + 5) % 360;day = (day + 10) % 360; CView::OnTimer(nIDEvent); } void CMySDOpenGLView::SetLogicalPalette(void) //设置逻辑调色板 { struct{ WORD Version; WORD NumberOfEntries; PALETTEENTRY aEntries[256]; } logicalPalette = { 0x300, 256 }; BYTE reds[] = {0, 36, 72, 109, 145, 182, 218, 255}; BYTE greens[] = {0, 36, 72, 109, 145, 182, 218, 255}; BYTE blues[] = {0, 85, 170, 255}; for (int colorNum=0; colorNum<256; ++colorNum) { logicalPalette.aEntries[colorNum].peRed = reds[colorNum & 0x07]; logicalPalette.aEntries[colorNum].peGreen = greens[(colorNum >> 0x03) & 0x07]; logicalPalette.aEntries[colorNum].peBlue = blues[(colorNum >> 0x06) & 0x03]; logicalPalette.aEntries[colorNum].peFlags = 0; } m_hPalette = CreatePalette ((LOGPALETTE*)&logicalPalette); } BOOL CMySDOpenGLView::InitializeOpenGL(CDC* pDC) //初始化openGL场景 { m_pDC = pDC; SetupPixelFormat(); m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());//生成绘制描述表 ::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC); //置当前绘制描述表 return TRUE; } BOOL CMySDOpenGLView::SetupPixelFormat()//设置像素格式 { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图 PFD_SUPPORT_OPENGL | // 支持 OpenGL PFD_DOUBLEBUFFER, // 双缓存模式 PFD_TYPE_RGBA, // RGBA 颜色模式 24, // 24 位颜色深度 0, 0, 0, 0, 0, 0, // 忽略颜色位 0, // 没有非透明度缓存 0, // 忽略移位位 0, // 无累加缓存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度缓存 0, // 无模板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主层 0, // 保留 0, 0, 0 // 忽略层,可见性和损毁掩模 }; int pixelformat; pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//选择像素格式 ::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); //设置像素格式 if(pfd.dwFlags & PFD_NEED_PALETTE) SetLogicalPalette(); //设置逻辑调色板 return TRUE; } BOOL CMySDOpenGLView::RenderScene()//场景绘制与渲染 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /////////ADD Draw Code////////////////////////////////

////////////////////////////////////////////////////// ::SwapBuffers(m_pDC->GetSafeHdc()); //交互缓冲区 return TRUE; } 至此,VC++6.0与OpenGL就关联在一起,进行绘制图形。

6. 下面利用OpenGL绘制简单图形 BOOL CMySDOpenGLView::RenderScene() //场景绘制与渲染 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /////////ADD Draw Code//////////////////////////////// glBegin(GL_TRIANGLES);//绘制三角形 glColor3f (1.0, 0.0, 0.0);glVertex3f(0.0,1.0,0.0); glColor3f (0.0, 1.0, 0.0);glVertex3f(-1.0,-1.0,0.0); glColor3f (0.0, 0.0, 1.0);glVertex3f(1.0,-1.0,0.0); glEnd(); ////////////////////////////////////////////////////// ::SwapBuffers(m_pDC->GetSafeHdc()); //交互缓冲区 return TRUE; } 用 glut编C++程程序的方法 新建一 win32 console project,然后加入 下面的 tut1.cpp: #include void display() { } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA);

相关文档
最新文档