OpenGL学习笔记【1】 - 绘制三角形

绘制一个三角形。

// OpenGLTest3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <GLTools.h>
#include <GLShaderManager.h>//导入GLTools着色管理器
#ifdef _APPLE_
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC //添加处理宏
#include <GL/glut.h>
#endif
//着色管理器
GLShaderManager shaderManager;
GLBatch triangleBatch;
//在改变窗口大小时,接受新的宽高
void ChangeSize(int w,int h)
{
 glViewport(0,0,w,h);//修改从目的坐标系到屏幕坐标系上的映射
}
void SetupRC()
{
 //清理窗口颜色(设置背景颜色)
 glClearColor(0,0,1,1);
 shaderManager.InitializeStockShaders();
 GLfloat vVerts[] = {-0.5f,0.0f,0.0f,
      0.5f,0.0f,0.0f,
      0.0f,0.5f,0.0f};
 //对三角形顶点批次进行封装
 triangleBatch.Begin(GL_TRIANGLES,3);
 triangleBatch.CopyVertexData3f(vVerts);
 triangleBatch.End();
}
void RenderScene(void)
{
 //清除缓冲区
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 GLfloat vRed[] = {1.0,0.0f,0.0f,1.0f};
 shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
 triangleBatch.Draw();
 // 执行缓冲区交换回显示缓冲区
 glutSwapBuffers();
}
int _tmain(int argc, char* argv[])
{
 //设置当前工作目录,Windows中不起作用,mac中,将目录改为程序绑定目录
 gltSetWorkingDirectory(argv[0]);
 //初始化GLUI库
 glutInit(&argc,argv);
 /*
 设置创建窗口时使用的显示方式
 GLUT_DOUBLE:使用双缓冲窗口
 GLUT_RGBA:使用RGBA颜色模式
 GLUT_DEPTH:标志一个深缓冲区分配为显示的一部分
 GLUT_STENCIL:确保有一个可用的模版缓冲区
 */
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
 //设置窗口大小
 glutInitWindowSize(800,600);
 //设置窗口标题
 glutCreateWindow("三角形");
 //消息循环,调用不同时间的回调函数
 glutReshapeFunc(ChangeSize);
 glutDisplayFunc(RenderScene);
 //进行渲染前,判断初始化过程中是否出错
 GLenum err = glewInit();
 if(GLEW_OK != err)
 {
  fprintf(stderr,"初始化错误:%sn",glewGetErrorString(err));
 }
 //设置渲染环境
 SetupRC();
 //开始主消息循环
 glutMainLoop();//在主窗口被关闭之前,不会返回,一个应用只需调用一次。负责处理系统特定消息、按键动作等。
 return 0;
}

 

本文链接:

https://www.bobsong.net/75.html
1 + 9 =
快来做第一个评论的人吧~