openGL是当前主流的图形API,与C语言紧密结合,有强大的可移植性,高性能的图形渲染等优势。
我将记录这几周学习成果。
一个简单的OpenGL程序
// 001.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "math.h" #include<iostream> #include <GL/glut.h> void SetRC() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); //绘制图元 // glLoadIdentity(); // glTranslatef(0,0,-10); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); //执行OpenGL绘制 glFlush(); } void myReshape(int w, int h) { GLfloat nRange = 1.0f; //w = 100; //std::cout << w << " " << h << std::endl; glViewport(0, 0, w, h); //glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei); //参数x,y指定了视见区域的左下角在窗口的位置,一般情况下为(0,0) //width和weight指定了视见区域的高度和宽度 glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* gluPerspective(60,GLfloat(w)/h,0.1,1000); */ if (w <= h) //建立裁剪区域(左右下上近远) glOrtho(-nRange, nRange, -nRange * h / w, nRange*h / w, -100, 100); else glOrtho(-nRange * w / h, nRange*w / h, -nRange, nRange, -100, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个OpenGL程序"); glutDisplayFunc(&myDisplay); glutReshapeFunc(&myReshape); SetRC(); glutMainLoop(); return 0; }
运行结果:
初始化openGL环境
glutInit(&argc, argv);
扫描二维码关注公众号,回复:
3383610 查看本文章
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
创建窗口
glutInitWindowPosition(100, 100);//设置窗口位置
glutInitWindowSize(400, 400);//设置窗口大小
glutCreateWindow("第一个OpenGL程序");//创建窗口并赋予其名字
设置相关回调函数
glutReshapeFunc(&myReshape);//窗口大小改变回调
//其原型为void glutReshapeFunc(void (*func)(int w, int h))
myReshape(int w,int h)//这两个参数直接由窗口大小400 400传参
glutDisplayFunc(&myDisplay);//执行绘制回调,窗口刷新会调用的函数
进入消息循环
glutMainLoop();//让程序不断循环执行自己所写的事件