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

----要 学 习OpenGL 编 程, 希 望 读 者 具 备 基 本 的 图 形 知 识。 本 文 使 用 基 于Visual C + + 消 息 驱 动 编 程, 对 于 没 学 过 VC 的 读 者 也 有 一 定 的 帮 助。 我 们 的 第 一 个 程 序 将 明 建 立 一 个 视 窗 程 序 显 示OpenGL 图 形 的 最 小 需 求。 为 成 这 一 任 务 我 们 将 分 如 下5 步 来 进 行:

----1 设 置 窗 口 像 素 的 格 式;2 建 立RC;3 使 RC 设 为 当 前;4 创 建 视 口 和 矩 阵 模 型;5 画 一 个 立 方 体 和 一 个 茶 壶。

----现 在 你 可 以 打 开 你 的Visual C + +, 建 立 一 个 单 文 档 的 项 目。 首 先 我 们 在 该 项 目 中 加 进 所 有 必 需 的OpenGL 文 件 和 库, 在 菜 单 中 选 择Build Settings, 然 后 点 击LINK 按 钮( 或 者 按 Ctrl +Tab 键 来 移 动 到 那 儿)。 在Object/Library 栏 中 键 入OpenGL32.lib GLu32.lib glaux.lib,并 确 定。 打 开 文 件stdafx.h 插 入 如 下 行:

#include < gl\gl.h >
#include < gl\glu.h >
#include < gl\glaux.h >
----OpenGL 仅 能 在 具 有WS_CLIPCHILDREN 和 WS_CLIPSIBLINGS 类 型 的 窗 口 显 示 图 形, 我 们 需 要 编 辑OnPreCreate 函 数, 指 定 一 下 窗 口 类 型。

BOOL COPView::PreCreateWindow(CREATESTRUCT & cs)
{cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
return CView::PreCreateWindow(cs);
}
----下 面 我 们 要 定 义 窗 口 的 像 素 格 式, 这 一 点 对 建 立RC 很 重 要。 首 先 我 们 需 要 建 立 一 个 受 保 护 的 成 员 函 数 BOOL SetWindowPixelFormat(HDC hDC)。 如 下 所 示:

BOOL COPView::SetWindowPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pixelDesc;
pixelDesc.nSize = sizeof(PIXELFORMATDESCRIP 
TOR);
pixelDesc.nVersion = 1;
pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL |
PFD_SUPPORT_GDI |PFD_STEREO_DONTCARE;
pixelDesc.iPixelType = PFD_TYPE_RGBA;
pixelDesc.cColorBits = 32;
pixelDesc.cRedBits = 8;
pixelDesc.cRedShift = 16;
pixelDesc.cGreenBits = 8;
pixelDesc.cGreenShift = 8;
pixelDesc.cBlueBits = 8;
pixelDesc.cBlueShift = 0;
pixelDesc.cAlphaBits = 0;
pixelDesc.cAlphaShift = 0;
pixelDesc.cAccumBits= 64;
pixelDesc.cAccumRedBits = 16;
pixelDesc.cAccumGreenBits = 16;
pixelDesc.cAccumBlueBits = 16;
pixelDesc.cAccumAlphaBits= 0;
pixelDesc.cDepthBits = 32;
pixelDesc.cStencilBits= 8;
pixelDesc.cAuxBuffers = 0;
pixelDesc.iLayerType= PFD_MAIN_PLANE;
pixelDesc.bReserved = 0;
pixelDesc.dwLayerMask= 0;
pixelDesc.dwVisibleMask= 0;
pixelDesc.dwDamageMask= 0;
m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);
if (m_GLPixelIndex==0) // Let''s choose a default index.
{
m_GLPixelIndex = 1;
if (DescribePixelFormat(hDC, m_GLPixelIndex, sizeof
(PIXELFORMATDESCRIPTOR), &pixelDesc)==0)
{
return FALSE;
}
}
if (SetPixelFormat( hDC, m_GLPixelIndex,
&pixelDesc)==FALSE)
{
return FALSE;
}
return TRUE;
}
----加 入 一 个 成 员 变 量 到 视 类 中:

int m_GLPixelIndex; // protected
----最 后, 在ClassWizard 中 加 入 函 数OnCreate 来 响 应 消 息WM_CREATE, 函 数 如 下:

int COPView::OnCreate
(LPCREATESTRUCT lpCreateStruct)
{
 if (CView::OnCreate(lpCreateStruct) == -1)
 return -1;
 HWND hWnd = GetSafeHwnd();
 HDC hDC = ::GetDC(hWnd);
 if (SetWindowPixelFormat(hDC)==FALSE)
   return 0;
 if (CreateVie
  • 上一篇资讯: 关闭计算机就这几招
  • 网学推荐

    免费论文

    原创论文

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