下面 直接 上代码:
// helloOpenGL.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <gl/glut.h>
void init(){
glClearColor(0,0,0,1);//设置清除颜色
glColor3f(1.0,0,0);
//这三个 不太明白
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}
void disPlay(void){
glClear(GL_COLOR_BUFFER_BIT);//清除窗口
//绘制多边形..(顶点位置非常重要)
glBegin(GL_POLYGON);
glVertex3f(0.25,0.25,0);
glVertex3f(0.25,0.75,0);
glVertex3f(0.75,0.25,0);
glVertex3f(0.75,0.75,0);
glEnd();
//立马显示...
glFlush();
}
int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,(char **)argv);//init
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//RGB颜色模式 和 单缓冲模式
glutInitWindowSize(500,500);//设置窗口尺寸
glutInitWindowPosition(0,0);//设置窗口位置
glutCreateWindow("Hello OpenGl!");
init();//不要 将 只需调用一次的 设置 放进 disPlay 函数
glutDisplayFunc(disPlay);
glutMainLoop();//主循环,负责 一直 调用 disPlay
return 0;
}
并且 针对 不太了解的 opengl 函数 进行了 百度:
glMatrixMode函数:设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵.
2).产生顶点的语句,比如glutWireBox、glutSolidSphere等等,它们最终要与栈顶矩阵计算算出最终的顶点位置。但它们本身不会影响栈顶矩阵的值!
3).任何一个模型、视图变换,如translate、scale、lookAt等,计算后都会影响当前栈顶矩阵的值!若每次变换完毕后不去归位(glLoadIdentity),则下一次的顶点变换是建立在上一轮(一系列)变换的基础之上的!
4).根据矩阵变换本质的理解,glLoadIdentity并不是简单的理解为将坐标归为世界坐标的原点。而是每次建立顶点的时候,都是以当前物体的中心作为世界的原点的(换句话说,也就是上一轮物体变换之后,原点的位置作为新的物体的中心)。之后再进行各种变换而形成物体
的移动、缩放、旋转等效果。从本质上讲,glLoadIdentity并不会改变世界坐标的原点位置,而仅仅是让“栈顶矩阵归位”。但它导致了下一轮顶点变换时,感觉上是以新的物体中心为世界原点的效果!
http://anony3721.blog.163.com/blog/static/51197420113206471827/