openGL学习记录

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);

    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();//让程序不断循环执行自己所写的事件

猜你喜欢

转载自www.cnblogs.com/xiao-ma-running/p/9715776.html