m_hRC=NULL;
右击属性 消息按钮 选择WM_SIZE 添加
void COpenGLPlatView::OnSize(UINT nType, int cx, int cy) 函数中添加代码 //添加新的代码开始 CClientDC dc(this);
wglMakeCurrent(dc.m_hDC,m_hRC); glLoadIdentity(); double d=10; double n=100;
glOrtho(-cx/n,cx/n,-cy/n,cy/n,-d,d); glMatrixMode(GL_MODELVIEW); glViewport(0,0,cx,cy); wglMakeCurrent(NULL,NULL); glMatrixMode(GL_PROJECTION);
5.在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:
void CMy1View::OnDraw(CDC* pDC) // 把 ”/*pDC*/” 改成 pDC {
SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL,NULL);
// TODO: 在此处为本机数据添加绘制代码 wglMakeCurrent(pDC->m_hDC,m_hRC); glClearColor(1.0f,1.0f,1.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glColor3f(1.0f,0.0f,0.0f);
glRotated(60.0,1.0,1.0,1.0); //茶壶 auxWireTeapot(3.0);
COpenGLPlatDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc)
return;
五:实验结果
实验二OpenGL基本图形元素和模型变换
一:实验目的
1. 掌握二次曲面的绘制函数及其应用方法。 2. 掌握基本实体模型的绘制函数及其应用方法。
二:实验内容
1. 学习二次曲面的绘制函数及其应用方法。 2. 学习基本实体模型的绘制函数及其应用方法。
三:实验背景知识
OpenGL提供了二次曲面和基本实体模型的绘制函数及其应用方法。这些二次曲面和基本实体模型在OpenGL内部实现中实际上也是将它们离散分割成为大量的多边形,然后通过绘制多边形的方法实现对这些二次曲面和基本实体模型的绘制。
四:实验程序
实验步骤1~4与上述实验1相同
5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:
wglMakeCurrent(pDC->m_hDC,m_hRC); glMatrixMode(GL_MODELVIEW);
//二次曲面
glColor3f(1.0f,0.0f,0.0f);
GLUquadric* qd=gluNewQuadric();//创建二次曲面对象
gluQuadricDrawStyle(qd,GLU_FILL);//设置二次曲面对象绘制模式GLU_LINE;GLU_SILHOUETTE;GLU_POINT
glLoadIdentity();
glRotated(-105.0,1.0,0.0,0.0); glTranslated(-6.0,0.0,-2.0);
gluCylinder(qd,2.0,1.0,4.0,30,4);//(圆台,下底面半径,上底面半径,圆台高度,绕z轴分割瓣数,绕z轴方向层数)
glLoadIdentity();
glTranslated(6.0,0.0,-2.0);
gluDisk(qd,1.0,2.0,30,4);//平面圆盘(,内圆半径,外圆半径,扇形瓣数,环的个数) //...
gluPartialDisk(qd,1.0,2.0,10,4,0,75);//拱状图形(,内圆半径,外圆半径,扇形瓣数,环的个数,起始角,图形张开的角度) //...
//gluSphere(qd,2.0,30,6);//球(,球的半径,分割的瓣数,分割的层次)
//auxSolidTetrahedron(4.0);//实体模型auxWireTeapot(4.0);auxSolidTeapot(4.0);
//auxWireSphere(3.0);auxSolidSphere(3.0); //auxWireCube(4.0);auxSolidCube(4.0);
//auxWireBox(3.0,4.0,5.0);auxSolidBox(3.0,4.0,5.0); //auxWireTorus(1.0,3.0);//圆环auxSolidTorus(1.0,3.0); //auxWireCylinder(2.0,4.0);auxSolidCylinder(2.0,4.0);
//auxWireIcosahedron(4.0);auxSolidIcosahedron(4.0);//二十面体
//auxWireOctahedron(4.0);auxSolidOctahedron(4.0);//八面体 //auxWireTetrahedron(4.0);auxSolidTetrahedron(4.0);//四面体 //auxWireDodecahedron(4.0);auxSolidDodecahedron(4.0);//十二面体 //auxWireCone(2.0,4.0);auxSolidCone(2.0,4.0);//圆锥体
SwapBuffers(pDC->m_hDC); //双缓冲
wglMakeCurrent(NULL,NULL);
实验三 光照与材质
一:实验目的:
1. 掌握利用OpenGL编写绘制具有真实感效果的图形方法。 2. 掌握添加光源和设置颜色材料属性的方法。
二:实验内容:
1. 掌握添加光源的实现方法。 2. 掌握设置颜色和材料属性的方法。
三:实验要求
通过本实验,掌握添加光源和设置颜色材料属性的方法,利用OpenGL编写绘制具有真实感效果的图形。
四:实验程序
实验步骤1~4与上述实验1相同
5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:
wglMakeCurrent(pDC->m_hDC,m_hRC);
glClearColor(1.0f,1.0f,1.0f,1.0f); glClearDepth(1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);
//设置模型变换矩阵
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
GLfloat light_position[]={1.0f,1.0f,1.0f,0.0f}; GLfloat light_ambient[]={0.2f,0.2f,0.2f,0.2f}; GLfloat light_diffuse[]={0.5f,0.5f,0.2f,0.2f}; GLfloat light_specular[]={0.5f,0.5f,0.5f,0.2f};
//设置光源参数