前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」

openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」

作者头像
全栈程序员站长
发布2022-07-07 18:13:06
4190
发布2022-07-07 18:13:06
举报

大家好,又见面了,我是全栈君。

openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」

执行效果

代码及解析:

代码语言:javascript
复制
//
//  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;}
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」

关键流程

关于视口(viewPort)及窗体:

openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」

视口。渲染(绘制)区域。

一般与窗体等大。视口用于从逻辑笛卡尔坐标系统映射到物理屏幕的像素坐标。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116433.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档