网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC++6.0中使用OpenGL
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
wGLContext(hDC)==FALSE)
return 0;
   return 0;
}
----下 面 需 要 作 的 步 骤 就 是 建 立RC, 并 置 为 当 前RC。

----在 视 类 中 加 入 保 护 函 数 CreateViewGLContext(HDC hDC) 和 变 量HGLRC m_hGLContext:

BOOL COPView::CreateViewGLContext(HDC hDC)
{
m_hGLContext = wglCreateContext(hDC);
 if (m_hGLContext == NULL)
 {
   return FALSE;
  }
 if (wglMakeCurrent(hDC, m_hGLContext)==FALSE)
 {
   return FALSE;
   }
   return TRUE;
}
加 入 函 数OnDestroy 来 响 应WM_DESTROY:
void COPView::OnDestroy()
{
if(wglGetCurrentContext()!=NULL)
{
wglMakeCurrent(NULL, NULL) ;
}
if (m_hGLContext!=NULL)
{
wglDeleteContext(m_hGLContext);
m_hGLContext = NULL;
}
CView::OnDestroy();
}
----最 后, 编 辑 一 下COPView 类 构 造 函 数:

COPView::COPView()
{
m_hGLContext = NULL;
m_GLPixelIndex = 0;
}
----现 在, 我 们 就 可 以 进 行OpenGL 画 图 了, 虽 然 它 看 起 来 仍 然 像 一 个 典 型 的MFC 程 序。

----现 在 我 们 进 行 下 一 步 建 立 视 点 和 矩 阵 模 型, 用ClassWizard 在 视 类 中 加 入 函 数OnSize 响 应WM_SIZE。 如 下 所 示:

void COPView::OnSize(UINT nType, int cx, int cy)
 {
 CView::OnSize(nType, cx, cy);
 GLsizei width, height; GLdouble aspect;
 width = cx; height = cy;
 if (cy==0)
 aspect = (GLdouble)width;
 else
 aspect = (GLdouble)width/(GLdouble)height;
 glViewport(0, 0, width, height);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(45, aspect, 1, 10.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 }
加 入 函 数:void COPView::OnPaint()
  {
 CPaintDC dc(this); // device context for painting
 COPDoc * pDoc = GetDocument();
 pDoc ->RenderScene();
 }
----在 文 档 类 中 加 入 公 共 函 数RenderScene():

void COPDoc::RenderScene(void)
{ glClear(GL_COLOR_BUFFER_BIT); glFlush(); }
----现 在 程 序 运 行 后 仅 是 黑 黑 的 屏 幕, 我 们 需 要 加 进 些 东 西。

----在 文 档 类 中 加 一 个 枚 举 变 量 GLDisplayListNames:

enum GLDisplayListNames { ArmPart1,ArmPart2 };
----为 将 来 建 立 显 示 列 表 用。 编 辑 函 数 OnNewDocument(), 编 码 如 下:

BOOL COPDoc::OnNewDocument()
if (!CDocument::OnNewDocument())
return FALSE;
glNewList(ArmPart1, GL_COMPILE);
GLfloat RedSurface = { 1.0f, 0.0f, 0.0f, 1.0f};
GLfloat GreenSurface = { 0.0f, 1.0f, 0.0f, 1.0f};
GLfloat BlueSurface = { 0.0f, 0.0f, 1.0f, 1.0f};
GLfloat LightAmbient = { 0.1f, 0.1f, 0.1f, 0.1f };
GLfloat LightDiffuse = { 0.7f, 0.7f, 0.7f, 0.7f };
GLfloat LightSpecular = { 0.0f, 0.0f, 0.0f, 0.1f };
GLfloat LightPosition = { 5.0f, 5.0f, 5.0f, 0.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
 glEnable(GL_LIGHT0);
 glMaterialfv(GL_FRONT_AND_BACK,
GL_AMBIENT, RedSurface);
 glBegin(GL_POLYGON);
 glNormal3d( 1.0, 0.0, 0.0);
 glVertex3d( 1.0, 1.0, 1.0); glVertex3d(
1.0, -1.0, 1.0);
 glVertex3d( 1.0, -1.0, -1.0); glVertex3d
( 1.0, 1.0, -1.0); // 画 第 一 个 面
 glEnd();
 glBegin(GL_POLYGON);
 glNormal3d( -1.0, 0.0, 0.0);
 // 此 处 同 上 画 第 二 个 面。
立 方 体 的 中 心 为 坐 标 原 点。
 
  • 上一篇资讯: 关闭计算机就这几招
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号