网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
利用OpenGL实现三维绘图
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
和范围。由于我们是三维绘图,所以采用不同的视点和观察范围,就会产生不同的观察效果。由于计算机只能显示二维图形,所以在表示真实世界中的三维图形时,需将三维视景转换成二维视景。这是产生三维立体效果的关键。OpenGL提供了两种将3D图形转换成2D图形的方式。正投影(Orthographic Projection)和透视投影(Perspective Projection)。其中,正投影指投影后物体的大小与视点的远近无关,通常用于CAD设计;而透视投影则符合人的心理习惯,离视点近的物体大,离视点远的物体小。此外,在OpenGL中还要定义投影范围,只有在该范围中的物体才会被投射到计算机屏幕上,投影范围外的物体将被裁减掉。
  定义投影范围(不同的投影方式对应不同函数):

  void glOrtho(
    GLdouble left, GLdouble right,  // (left,bottom,near)及(right,top,far)分别给出正射投
    GLdouble bottom, GLdouble top,  // 影投影范围的左下角和右上角的坐标。
    GLdouble near,GLdouble far);

2、定义与Windows接口的系统函数

  2.1 定义绘图窗口的位置

  // (x,y)给出窗口左上角坐标
  // width及heigh给出窗口的宽高
  void auxInitPosition(GLint x,GLint y,GLsizei width, GLsizei heigh);

  2.2 定义绘图窗口的标题

  // STR表示窗口标题字串
  void auxInitWindow(GLbyte* STR);

  2.3 定义绘图窗口改变时的窗口刷新函数

  // 当窗口改变形状时调指定的回调函数
  // NAME表示回调函数名称
  void auxReshapeFunc(NAME);

  2.4 定义空闲状态的空闲状态函数以实现动画

  // 当系统空闲时调用指定的回调函数
  // NAME表示回调函数名称
  void auxIdleFunc(NAME);

  2.5 定义场景绘制函数(当窗口更新或场景改变时调用)

  // 当窗口需要更新或场景变化时调用
  // NAME表示回调函数名称
  void auxMainLoop(NAME);

3、在VC下实现程序编译
  在VC编辑器下键入下述代码后,保存为后缀是.cpp的C++文件。开始编译,在“The build command requires an active project workspace”。“Would you like to create a default project workspace”? 的提示后,选择“是(Y)”。进入“Project”菜单,选择“Setting”项,弹出“Project Setting”对话框,选择“Link”项,在“Libaray”栏目中加入OpenGL提供的函数库:“opengl32.lib glu32.lib glaux.lib”。(注意:在执行程序时,Windows的system目录下要包含opengl32.dll及glu32.dll两个动态连接库)。附源程序代码:
#include "windows.h"
#include "gl/gl.h"
#include "gl/glaux.h"
#include "gl/glu.h"
#include "math.h"
void myinit()
{
glClearColor(1,1,0,0);
GLfloat ambient={.5,.5,.5,0};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
GLfloat mat_ambient={.8,.8,.8,1.0};
GLfloat mat_diffuse={.8,.0,.8,1.0};
GLfloat mat_specular={1.0,.0,1.0,1.0};
GLfloat mat_shininess={50.0};
GLfloat light_diffuse={0,0,.5,1};
GLfloat light_position={0,0,1.0,0};
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
}

void CALLBACK display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_B

网学推荐

免费论文

原创论文

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