当前位置:网站首页>openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
2022-07-07 18:43:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
执行效果
代码及解析:
//
// 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)及窗体:
视口。渲染(绘制)区域。
一般与窗体等大。视口用于从逻辑笛卡尔坐标系统映射到物理屏幕的像素坐标。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116433.html原文链接:https://javaforall.cn
边栏推荐
- 字符串中数据排序
- Static analysis of software defects codesonar 5.2 release
- 微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
- guava多线程,futurecallback线程调用不平均
- AADL Inspector 故障树安全分析模块
- ISO 26262 - 基于需求测试以外的考虑因素
- Klocwork code static analysis tool
- 使用camunda做工作流设计,驳回操作
- 恶魔奶爸 A0 英文零基础的自我提升路
- I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
猜你喜欢
Intelligent software analysis platform embold
ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
软件缺陷静态分析 CodeSonar 5.2 新版发布
【OpenCV 例程200篇】223. 特征提取之多边形拟合(cv.approxPolyDP)
C语言 整型 和 浮点型 数据在内存中存储详解(内含原码反码补码,大小端存储等详解)
网络原理(1)——基础原理概述
Don't fall behind! Simple and easy-to-use low code development to quickly build an intelligent management information system
使用高斯Redis实现二级索引
C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
AADL Inspector 故障树安全分析模块
随机推荐
写一下跳表
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
4G设备接入EasyGBS平台出现流量消耗异常,是什么原因?
How to implement safety practice in software development stage
Tensorflow2.x下如何运行1.x的代码
智能软件分析平台Embold
Tensorflow2. How to run under x 1 Code of X
Mongodb由浅入深学习
Referrer和Referrer-Policy简介
嵌入式系统真正安全了吗?[ OneSpin如何为开发团队全面解决IC完整性问题 ]
The latest version of codesonar has improved functional security and supports Misra, c++ parsing and visualization
恶魔奶爸 A3阶段 近常速语流初接触
guava多线程,futurecallback线程调用不平均
Micro service remote debug, nocalhost + rainbow micro service development second bullet
【奖励公示】第22期 2022年6月奖励名单公示:社区明星评选 | 新人奖 | 博客同步 | 推荐奖
机械臂速成小指南(十二):逆运动学分析
理财产品要怎么选?新手还什么都不懂
H3C s7000/s7500e/10500 series post stack BFD detection configuration method
实战:sqlserver 2008 扩展事件-XML转换为标准的table格式[通俗易懂]
阿洛的烦恼