【OpenGL学习一】用OpenGL绘制图形,制作动画

 

1.OpenGL基本框架

1.1OpenGL简介

OpenGL(Open Graphics Library,开放图形库),是三维计算机图形和模型库。作为一个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统。并在军事、广播电视、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟世界等领域都有广泛的用途。具有以下功能:

1.模型绘制

2. 模型观察

3.颜色模式的指定

4.光照应用

5.图片效果增强

6.位图和图象处理

7.纹理映射

8.实时动画

9.交互技术

 

1.2 OpenGL工作方式

1.2.1 OpenGL的体系结构

OpenGL是一种图形应用程序设计界面(API),不含任何窗口管理、用户交互或文件I/O函数。每个主机环境有这些函数,负责实现某些方法,把窗口或位图的绘制控制权交给OpenGL。

 

 

 

 

 

2.OpenGL绘制图形

 

2.1绘制矩形

代码如下:


#include <gl/glut.h>/*****
显示回调函数RenderScene,调用OpenGL渲染函数
用于在窗口中绘制需要的图形
**************/
void RenderScene(void)
{// 用当前的清除颜色清除窗口glClear(GL_COLOR_BUFFER_BIT);// 把绘图颜色设置为青色(RGB)glColor3f(0.0f,1.0f,1.0f);// 用当前颜色绘制一个填充的矩形,参数表示左上角点和右下角点的坐标//glRectf(100.0f, 150.0f, 150.0f, 100.0f);glRectf(-25.0f, 25.0f, 25.0f, -25.0f);// 刷新绘图命令glFlush();
}// 用于初始化,常用来设置场景渲染状态
void SetupRC(void)
{// 把清除颜色设置为紫色,即窗口的背景色glClearColor(1.0f, 0.0f,1.0f, 1.0f);
}// 当窗口改变大小时,调用登记的函数
void ChangeSize(GLsizei w, GLsizei h)
{GLfloat aspectRatio;// 防止被0除if(h == 0){h = 1;}// 设置视区尺寸,把视口设置为窗口大小glViewport(0, 0, w, h);// 重置坐标系统,使投影变换复位glMatrixMode(GL_PROJECTION);glLoadIdentity();// 建立裁剪区域的范围(左、右、底、顶、近、远)aspectRatio = (GLfloat)w / (GLfloat)h;if(w <= h){glOrtho(-100.0, 100.0, -100/aspectRatio, 100.0/aspectRatio, 1.0, -1.0);}else{glOrtho(-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 1.0, -1.0);}//定义投影矩阵,三维到二维的映射glMatrixMode(GL_MODELVIEW);//复位坐标系glLoadIdentity();
}void main()
{//初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//创建一个名为GLRect的窗口glutCreateWindow("GLRect");//设置当前窗口的显示回调函数和窗口在整形回调函数glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);SetupRC();//启动主GLUT事件处理循环glutMainLoop();
}

运行结果:

 

2.2绘制移动的矩形

代码如下:

  /*
glutTimerFunc(unsigned int msecs,(*func) (int value),int value); 
该函数用于指定一个定时器回调函数,即经过msecs毫秒后由GLUT调用指定的函数,并将value值传递给它
被定时器调用的函数原型为:
void TimerFunction(int value); 
但该函数只会激发一次。所以,为了实现连续的动画,必须在定时器函数中再次重新设置定时器回调函数
*/#include <windows.h>
#include <gl/glut.h>
#include<gl/gl.h>
#include<gl/glu.h>// 参数指定正方形的位置和大小
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;// 正方形运动变化的步长
GLfloat xstep = 1.0f;
GLfloat ystep = 1.0f;// 窗口的大小
GLfloat windowWidth;
GLfloat windowHeight;void RenderScene(void)
{glClear(GL_COLOR_BUFFER_BIT);//红色glColor3f(1.0f, 0.0f, 0.0f);//用当前颜色绘制一个填充的图形glRectf(x1, y1, x1+rsize, y1+rsize);//清空命令行缓冲区并交换帧缓存glutSwapBuffers();
}void ChangeSize(GLsizei w, GLsizei h)
{if(h == 0) h = 1;glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity(); if (w <= h){windowHeight = 250.0f*h/w;windowWidth = 250.0f;}else{windowWidth = 250.0f*w/h;windowHeight = 250.0f;}glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}
void TimerFunction(int value)
{// 处理到达窗口边界的正方形,使之反弹if(x1 > windowWidth-rsize || x1 < 0) xstep = -xstep;if(y1 > windowHeight-rsize || y1 < 0) ystep = -ystep;if(x1 > windowWidth-rsize) x1 = windowWidth-rsize-1;if(y1 > windowHeight-rsize) y1 = windowHeight-rsize-1;// 根据步长修改正方形的位置x1 += xstep;y1 += ystep;// 用新坐标重新绘图glutPostRedisplay();glutTimerFunc(33,TimerFunction, 1);
}void SetupRC(void)
{//设置窗口清除色为蓝色
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}int main(void)
{glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow("Bounce"); glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);glutTimerFunc(200, TimerFunction, 1);SetupRC();glutMainLoop();
}

运行结果:

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41774.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业动画制作过程介绍(一)——静态简笔图画的制作

在工业控制系统中&#xff0c;为了使控制界面更加人性化&#xff0c;需要制作各种简单的动画 来显示机器的运行状态&#xff0c;那么对于非工业设计等设计类的专业者来说&#xff0c;制作这些动画并非易事&#xff0c;而网上又没有可用的资源。那么怎么办呢&#xff0c;非专业人…

使用Qt动画框架设计角色的二维动画

使用Qt动画框架设计角色的二维动画 Qt的动画框架是Qt4.6新添加的一个重要的特性&#xff0c;有了它&#xff0c;开发人员可以制作激动人心的动画界面&#xff0c;而不必局限于单调的固定窗口了&#xff0c;可以说&#xff0c;Qt动画框架是其它界面库少见的功能&#xff0c;它带…

Unity 3d人形动画 一边走一边吹泡泡

资源下载并导入&#xff1a; Robot Kyle 导入标准资源库并修改资源库过时的错误 >>点击此处查看教程 这样就解决了 我们都知道&#xff0c;标准资源包里的人物&#xff0c;是自带脚本的。 而这些脚本&#xff0c;也可以应用到这个没有脚本的机器人上面&#xff0c;只需要…

unity人物基础动画应用。行走、待机之类的简单动画切换。

[TOC]unity人物基础动画应用 1.将动画或带有动画的&#xff0c;模型导入到unity 直接将项目拖入资源层级就好。这里推荐一个网站&#xff0c;可以给导入网站的模型自动绑骨&#xff0c;并且可挑选动画下载。网站自身也带有很多模型可以直接下载。免费又好用&#xff0c;就是可…

Unity中制作动画

1.创建一个 Cube 模型 2. 点击 Window->Animation->Animation 按钮&#xff0c;打开动画编辑面板(快捷键Ctrl6) 3. 点击 Create 按钮&#xff0c;保存新建的动画文件&#xff0c;我命名为“Cube.anim”创建好界面如下 4.点击 Add Preoperty&#xff0c;选择合适的想要改变…

unity人物素材制作动作,导入unity行走、跑步动画,并用Animator Controller加脚本进行控制

初学Unity的关于制作人物动作、导入unity动画、控制人物移动的简单小结 因为网上的关于人物动画制作、导入、控制运动的文章都不太全面&#xff0c;所以自己制作了一个小结来总结一下&#xff0c;这是我当前做出来的效果图&#xff0c;穿墙效果还未改&#xff0c;这里可以通过…

Unity制作的照片墙效果

使用Unity3D制作的照片墙效果。支持发布PC、Android、Web等多平台使用。 效果上图 点选其中一张图时 参数调节 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/87337607

Unity制作简单的精灵图动画(新手向)

使用精灵图制作动画步骤&#xff1a; 1.精灵图准备 2.制作动画 一、精灵图导入与切割 第一种情况&#xff1a;导入的是已经切割好的精灵图&#xff0c;请直接跳动到二 第二种情况&#xff1a;导入的是需要切割的精灵图&#xff0c;需要切割&#xff0c;切割步骤&#xff1…

unity程序动画

文章目录 Unity 程序动画讲解 一、程序动画是什么&#xff1f;二、使用步骤1.建立模型2.骨骼建立3.代码部分4.角色身体的位置适配 总结 Unity 程序动画讲解 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、程序动画是什么&#xff1f; 程序动画就是…

Unity | 从建模到蒙皮动画的整个过程

目录 一、顶点数组、索引数组及UV数组 二、Mesh、MeshFilter、MeshRenderer及SkinnedMeshRenderer 1. Mesh 2. MeshFilter 3. MeshRenderer 4. MeshRenderer与SkinnedMeshRenderer&#xff08;蒙皮网格&#xff09; 三、Unity中相关组件 1. mesh和material 2. sharedM…

虚幻——动画蓝图、状态机制作人物走跑跳动作

一、名词解释 序列——一段动作。 混合空间——混合不同的动作。将多个序列排序播放。 动画蓝图——根据状态播放不同的动画。 二、混合空间制作走跑动作 由于走和跑的动作比较连续&#xff0c;并且都是由速度控制&#xff0c;所以要把待机、走、跑这三个动作混合在一起。 1.创…

Unity UI 做 图表动画

UI分为三张图片&#xff0c;背景图&#xff0c;前景橘色&#xff0c;前景蓝色&#xff0c;三张图片大小一致&#xff0c;前景就是没有图片的image&#xff0c;填充的颜色。形状是通过shader改变的。 这是一个图标的基本结构&#xff0c;center是中心点&#xff0c;1、2、3...是…

广告中oCPX到底是如何进行优化的?

自从Facebook引入oCPM出价以来&#xff0c;国内的头条广告、微信广点通、百度信息流都陆续推出了自己的oCPX出价&#xff0c;oCPX出价已经成为主流广告投放平台的标配。 简单而言&#xff0c;oCPX是一种出价机制&#xff0c;允许广告主按照转化行为成本出价&#xff1b;假设对…

文字转语音神器!

大家好&#xff0c;我是懂王。 经常刷短视频的兄弟应该知道&#xff0c;有很多短视频的字幕都是用机器人语音来制造的&#xff0c;类似于手机上的 AL 助手语音&#xff0c;不过声音比 siri 和小爱同学要难听一点。 虽然这种机器声音听起来略带生硬&#xff0c;然而对于视频创…

语音转文字怎么转?分享这些实用软件

在参加日常工作会议时&#xff0c;有时候大家记录的速度跟不上对方的语速&#xff0c;会导致会议记录不完整&#xff0c;影响到工作效率。有些小伙伴就把会议内容进行录音&#xff0c;待会后再将录音文件进行整理&#xff0c;这样做既方便快捷&#xff0c;同时能提高工作效率。…

chrome文字转语音(tts)

文章目录 一、文章参考二、TTS (Text-To-Speech) 是文本转语音2.1 概念2.2 windows 操作系统2.3 验证是否有Windows TTS&#xff08;语音转文本&#xff09; 三、chrome 文字转语音3.1 Web Speech相关的API实际上有两类3.2 语音合成Speech Synthesis API3.2.1 SpeechSynthesisU…

在线文字转成语音怎么转

很多小伙伴在办公或学习中&#xff0c;经常或需要浏览大量资料。随着时间越来越长&#xff0c;我们的眼睛就会多度疲劳。为了不戴上眼镜&#xff0c;我们只能改变当前的方式&#xff0c;也就是把文字变成语音去听&#xff0c;而不是去看。那么就有小伙伴想问了在线文字转成语音…

体验最佳的一个TTS文字转语音工具

文本转语音 (TTS) 技术在当今的数字世界中变得越来越流行&#xff0c;其应用范围从语音导航到教学视频、教育和娱乐。 TTS 技术允许用户将文本转换为语音&#xff0c;使其成为一种极其方便、高效和灵活的交流方式。 个人的使用场景是抖音短视频语音配音和电影解说&#xff0c;…

一个在线文字转语音工具

一个在线文字转语音工具 因为参加比赛过程中要频繁使用文字转语音的功能&#xff0c;遂写了这个工具&#xff0c;暂时先用着。 工具基于百度API &#xff0c; 目前只支持 1K 以内的文字转语音。 后续版本拟增加讯飞接口&#xff0c;批量转换&#xff0c;语音识别&#xff0c;在…

SpeechSynthesisUtterance文字转语音播报

一、介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 二、基本属性 var speech new SpeechSynthesisUtterance() speech.lang 获取并设置话语的语言&#xff08;en-US、zh-CN&#x…