openGl超级宝典学习笔记 (1)第一个三角形
2016-01-04 21:44
246 查看
执行效果
代码及解析:
// // Triangle.cpp // Triangle // // Created by fengsser on 15/6/20. // Copyright (c) 2015年 fengsser. All rights reserved. // #include <GLTools.h>//用作掩盖不同平台的差异,建立窗体等工作 #include <GLShaderManager.h> #ifdef __APPLE__ #include <glut/glut.h> #else #define FREEGLUT_STATIC #endif GLBatch triangleBatch; GLShaderManager shaderManager; //窗体大小改变时接受新的宽度和高度,參数单位为象数 void ChangeSize(int w,int h) { //完毕从目的坐标系到屏幕坐标系的映射,Glint x,Glint y为viewPort在窗体中左下角的坐标。veiwPort是渲染区域。 glViewport(0, 0, w, h); } //set render-context void SetupRC() { //设置背影颜色 r,g,b,a glClearColor(0.0f, 0.0f, 1.0f, 1.0f); //初始化着色管理器 shaderManager.InitializeStockShaders(); //设置三角形。当中数组vVert包括全部3个顶点的x,y,z,笛卡尔坐标(就是初中高中学的坐标系)。 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.0f,0.0f,0.0f,1.0f}; //传送颜色到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器仅仅是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形 shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed); //提交几何图形着色器 triangleBatch.Draw(); //将在后台缓冲区进行渲染。然后在结束时交换到前台 glutSwapBuffers(); } int main(int argc,char* argv[]) { gltSetWorkingDirectory(argv[0]);//设置当前工作文件夹。针对MAC OS X glutInit(&argc, argv); //传输命令行參数并初始化GLUT库 //告诉GLUT库在创建窗体时使用哪种显示模式,GLUT_DOUBLE:双缓冲窗体。GLUT_RGBA:RGBA颜色模式;GLUT_DEPTH:深度測试GLUT_STENCIL:模板測试 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600);//GLUT窗体大小,标题窗体 glutCreateWindow("Triangle");//创建以Triangle为标题的窗体 //注冊侦听,在出循环中会发出事件,窗体大小改变和openGl渲染 glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); //初始化openGL驱动程序中丢失的入口点glewInit,并检查初始化是否出现故障。 GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "glew error:%s\n",glewGetErrorString(err)); return 1; } SetupRC();//RC-Render context glutMainLoop();//開始主循环 return 0; }
关键流程
关于视口(viewPort)及窗体:
视口。渲染(绘制)区域。
一般与窗体等大。视口用于从逻辑笛卡尔坐标系统映射到物理屏幕的像素坐标。
相关文章推荐
- 174,Copy & MutableCopy的区别
- linux c中自编的一个进制(2~36进制)转换函数(strtol库函数自带,ltostr自编)
- nginx 或tengine 访问日志分割处理
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- 管理员必备的20个Linux系统监控工具
- 艺龙十万级服务器监控系统开发的架构和心得
- Linux学习笔记3-VI 和 VIM的使用
- Linux学习笔记3-VI 和 VIM的使用
- chapte13:学习shell scripts之(1)简单的shell scripts
- CentOS 5/6 下添加epel源
- linux function
- shell脚本编程<先导>:环境变量
- Powershell 管理域之搜索OU并移动
- linux0.11系列之(三): 启动引导 setup.s
- Scientific Toolworks Understand for linux 的下载
- linux case 语句
- 【转】getopt()和getopt_long()
- linux shell if语句
- LVS Nginx HAProxy 优缺点
- 关于安装linux时要怎么分区的考虑的參考方式?