Opengl学习笔记1

一:环境配置

 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的 。这里我VC++ 6.0作为学习OpenGL的环境。(本来俺是在苹果下工作的,可惜我没自己的苹果电脑) 第二步:安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k)

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的 Windows环境下安装GLUT的步骤

: 1、将下载的压缩包解开,将得到5个文件 2、以我的安装目录为例: (1)“d:/Program

Files/Microsoft Visual Studio/VC98/include/GL文件夹”。把解压得到的glut.h放到这个GL文件夹里。没有

GL文件夹可以自己建一个,一般都有的。 (2)“d:/Program Files/Microsoft Visual Studio/VC98/lib文件

夹”。把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹,即lib文件夹。 (3)把解压得到的

glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:

C:/Windows/System32)这是非常重要的动态链接库设置! 第三步,创建工程,其步骤如下: (1)创建

一个Win32 Console Application。(以我创建的为例,工程名为simpleGL) (2)链接OpenGL libraries:

在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前

面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib 。 (3)单击Project Settings中的C/C++标签,将

Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。

 

//简单例子 Opengl超级宝典上面的

#include "stdafx.h"
#include <gl/glut.h>
void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glFlush();
}


void SetupRC(void)
{
 glClearColor(0.0f,0.0f,1.0f,1.0f);
}

int main(int argc, char* argv[])
{
 //单缓冲 RGB模式
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 //创建窗口
 glutCreateWindow("Simple");
 //显示回调函数 第一次创建 大小改变 移去窗口上的覆盖
 glutDisplayFunc(RenderScene);
 //初始化 在渲染前面
 SetupRC();
 //让GLUT框架开始运行 出来操作系统的消息
 glutMainLoop();

 return 0;
}

 

二:绘制简单矩形

// GLRect.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <gl/glut.h>

void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);//清除缓冲

 glColor3f(1.0f,0.0f,0.0f); //设置绘制的颜色
 glRectf(100.0f,150.0f,150.0f,100.0f);//画一个矩形
 glFlush();//清空缓冲队列  一系列的绘图指令
}


void SetupRC(void)
{
 glClearColor(0.0f,1.0f,1.0f,1.0f);//设置窗口背景的颜色
}
//窗口改变的回调函数
void ChangeSize(GLsizei w, GLsizei h)
{
 if(h==0)
  h=1;

  glViewport(0,0,w,h);//根据窗口的变化重绘
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();//拥有在进行任何矩阵处理前的 “复位” 坐标

  if(w<=h)
   glOrtho(0.0f,300.0f,0.0f,300.0f*h/w,1.0,-1.0);//正影投射 还不是太明白
  else
   glOrtho(0.0f,300.0f*w/h,0.0f,300.0f,1.0,-1.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

int main(int argc, char* argv[])
{
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutCreateWindow("GLRect");
 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 SetupRC();
 glutMainLoop();

 return 0;
}

 

三简单动画:

// Bounce.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <gl/glut.h>

GLfloat x1=100.0f;
GLfloat y1=150.0f;
GLsizei rsize=50;

GLfloat xstep=0.2f;
GLfloat ystep=0.2f;

GLfloat windowWidth;
GLfloat windowHeight;


void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0f,0.0f,0.0f);
 glRectf(x1,y1,x1+rsize,y1+rsize);
 glutSwapBuffers();//这里不再使用 glutFlush,当我们执行缓冲区交换时候,其实已经执行了刷新操作
 //glFlush();
}

//定时器 Opengl这个定时器只能一次使用,所以写成递归的形式
void TimerFunction(int value)
{
 if(x1>windowWidth-rsize||x1<0)
  xstep=-xstep;
 if(y1>windowHeight-rsize||y1<0)
  ystep=-ystep;

 if(x1>windowWidth-rsize)
  x1=windowWidth-rsize-1;
 if(y1>windowHeight-rsize)
  y1=windowHeight-rsize-1;

 x1+=xstep;
 y1+=ystep;
 glutPostRedisplay();//重绘
 //参数分别是 毫秒数,回调指针,区别值 区分是哪个定时器
 glutTimerFunc(33,TimerFunction,1);

}


void SetupRC(void)
{
 glClearColor(0.0f,0.0f,1.0f,1.0f);
}

void ChangeSize(GLsizei w, GLsizei h)
{
 if(h==0)
  h=1;
 glViewport(0,0,w,h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();

 if(w<=h)
 {
  windowHeight=250.0f*h/w;
  windowWidth=250.0f;
 }
 else
 {
  windowHeight=250.0f;
  windowWidth=250.0f*w/h;
 }

 glOrtho(0.0f,windowWidth,0.0f,windowHeight,1.0f,-1.0f);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

int main(int argc, char* argv[])
{

// glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);//双缓冲
 glutCreateWindow("Bounce");
 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 glutTimerFunc(33,TimerFunction,1);
 SetupRC();
 glutMainLoop();
 //printf("Hello World!/n");
 return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值