OpenGl--实战操作详解(创建几何图形三角形、球、环、圆柱、锥、磁盘)

一、引用头文件

#include "GLTools.h" //OpenGL工具类:包含大部分GLTools中类似C语言的独立函数
#include "GLMatrixStack.h" //矩阵堆栈工具类:用于加载单元矩阵、矩阵相乘、压栈、出栈、缩放、平移、旋转等操作
#include "GLFrame.h" //矩阵工具类:表示位置,通过vOrigin、vForward、vUp定义
#include "GLFrustum.h" //矩阵工具类:用于快速设置正投影、透视投影矩阵,完成坐标从3D->2D的映射过程
#include "GLBatch.h" //三角形批次类:用于传输顶点、光照、纹理、颜色等数据到存储着色器
#include "GLGeometryTransform.h" //变换管道类:用于快速在代码中传输视图矩阵、投影矩阵、视图投影变换矩阵等
#include <math.h>  //数学库

二、相关属性

GLShaderManagershaderManager; //存储着色器管理者

GLMatrixStackmodelViewMatrix; //模型视图矩阵
GLMatrixStackprojectionMatrix; //投影矩阵

GLFramecameraFrame; //角色帧:摄像机、观察者位置
GLFrame            objectFrame; //角色帧;物体、世界坐标位置

GLFrustumviewFrustum; //视景体,用来构造投影矩阵

//三角形批次类
GLTriangleBatch    sphereBatch; //球
GLTriangleBatch    torusBatch; //环
GLTriangleBatch    cylinderBatch; //圆柱
GLTriangleBatch    coneBatch; //锥
GLTriangleBatch    diskBatch; //磁盘

GLGeometryTransformtransformPipeline; //变换管道,存储模型视图、投影、模型视图投影矩阵

三、相关函数

1.main函数

  程序入口函数,OpenGL为面向过程编程,所以OpenGL及其封装的图形图像处理框架,处理过程都是以链式形式进行的。

int main(int argc, char* argv[])
{
   
    gltSetWorkingDirectory(argv[0]);
    glutInit(&argc, argv);
    
    //申请一个颜色缓存区、深度缓存区、双缓存区、模板缓存区
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    //设置window大小
    glutInitWindowSize(800, 600);
    //设置window名称
    glutCreateWindow("Sphere");
    
    //注册函数:窗口大小变化
    glutReshapeFunc(ChangeSize);
    //注册函数:键盘”空格”键的回调函数
    glutKeyboardFunc(KeyPressFunc);
    //注册函数:键盘“上、下、左、右”键的回调函数
    glutSpecialFunc(SpecialKeys);
    //注册函数:鼠标右键菜单栏
    glutCreateMenu(ProcessMenu);
    glutAddMenuEntry("Menu1", 1);
    glutAddMenuEntry("Menu2", 2);
    glutAddMenuEntry("Menu3", 3);
    
    //注册函数:渲染函数
    glutDisplayFunc(RenderScene);
   
    //判断glew库是否初始化成功,确保OpenGL框架的正常运行
    GLenum err = glewInit();
    if (GLEW_OK != err) {
   
        fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
        return 1;
    }
    
    //自定义函数:设置需要渲染图形的顶点数据、颜色数据等
    SetupRC();
    
    //runloop执行循环
    glutMainLoop();
    
    return 0;
}

2.自定义重塑函数

  当屏幕大小发生变化,或者第一次创建窗口时调用该函数。通过glutReshapFunc(函数名)注册。(需在main函数中通过注册调用)

void ChangeSize
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用OpenGL绘制国旗可以通过以下步骤实现: 1. 创建OpenGL上下文和窗口。 2. 设置绘制区域和视口。 3. 设置绘制颜色和深度缓冲区。 4. 绘制国旗的红色背景。 5. 绘制五颗黄色的五角星。可以使用OpenGL的绘制多边形功能来绘制五角星,也可以使用纹理映射来贴上五角星的图案。 6. 交换前后缓冲区,显示绘制结果。 以下是一个简单的OpenGL绘制国旗的示例代码: ``` #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色 glBegin(GL_QUADS); glVertex2f(-1.0, 1.0); glVertex2f(-1.0, -1.0); glVertex2f(1.0, -1.0); glVertex2f(1.0, 1.0); // 绘制国旗的红色背景 glEnd(); glColor3f(1.0, 1.0, 0.0); // 设置绘制颜色为黄色 glBegin(GL_POLYGON); glVertex2f(-0.5, 0.5); glVertex2f(-0.25, 0.25); glVertex2f(0.0, 0.5); glVertex2f(0.25, 0.25); glVertex2f(0.5, 0.5); glVertex2f(0.375, 0.25); glVertex2f(0.5, 0.0); glVertex2f(0.375, -0.25); glVertex2f(0.5, -0.5); glVertex2f(0.25, -0.375); glVertex2f(0.0, -0.5); glVertex2f(-0.25, -0.375); glVertex2f(-0.5, -0.5); glVertex2f(-0.375, -0.25); glVertex2f(-0.5, 0.0); glVertex2f(-0.375, 0.25); // 绘制五角星 glEnd(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL Flag"); glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 该示例代码使用了OpenGL的基本绘图功能,通过绘制红色背景和黄色五角星实现了绘制国旗的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffersonGO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值