Opengl学习笔记1

【OpenGL学习笔记1】OpenGL的GLFW+GLAD的安装和使用 GLFW的·官方指南直接命令安装glfw是一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异。例如。我们手动定义函数地址,并把其保存在函数指针。 阅读详情

一:环境配置

 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的 。这里我VC++ 6.0作为学习OpenGL的环境。(本来俺是在苹果下工作的,可惜我没自己的苹果电脑) 第二步:安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k)

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的 Windows环境下安装GLUT的步骤

: 1、将下载的压缩包解开,将得到5个文件 2、以我的安装目录为例: (1)“d:/Program

Files/Microsoft Visual Studio/VC98/include/GL文件夹”。把解压得到的glut.h放到这个GL文件夹里。没有

GL文件夹可以自己建一个,一般都有的。 (2)“d:/Program Files/Microsoft Visual Studio/VC98/lib文件

夹”。把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹,即lib文件夹。 (3)把解压得到的

glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:

C:/Windows/System32)这是非常重要的动态链接库设置! 第三步,创建工程,其步骤如下: (1)创建

一个Win32 Console Application。(以我创建的为例,工程名为simpleGL) (2)链接OpenGL libraries:

在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前

面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib 。 (3)单击Project Settings中的C/C++标签,将

Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。

 

//简单例子 Opengl超级宝典上面的

#include "stdafx.h"
#include <gl/glut.h>
void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glFlush();
}


void SetupRC(void)
{
 glClearColor(0.0f,0.0f,1.0f,1.0f);
}

int main(int argc, char* argv[])
{
 //单缓冲 RGB模式
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 //创建窗口
 glutCreateWindow("Simple");
 //显示回调函数 第一次创建 大小改变 移去窗口上的覆盖
 glutDisplayFunc(RenderScene);
 //初始化 在渲染前面
 SetupRC();
 //让GLUT框架开始运行 出来操作系统的消息
 glutMainLoop();

 return 0;
}

 

二:绘制简单矩形

// GLRect.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <gl/glut.h>

void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);//清除缓冲

 glColor3f(1.0f,0.0f,0.0f); //设置绘制的颜色
 glRectf(100.0f,150.0f,150.0f,100.0f);//画一个矩形
 glFlush();//清空缓冲队列  一系列的绘图指令
}


void SetupRC(void)
{
 glClearColor(0.0f,1.0f,1.0f,1.0f);//设置窗口背景的颜色
}
//窗口改变的回调函数
void ChangeSize(GLsizei w, GLsizei h)
{
 if(h==0)
  h=1;

  glViewport(0,0,w,h);//根据窗口的变化重绘
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();//拥有在进行任何矩阵处理前的 “复位” 坐标

  if(w<=h)
   glOrtho(0.0f,300.0f,0.0f,300.0f*h/w,1.0,-1.0);//正影投射 还不是太明白
  else
   glOrtho(0.0f,300.0f*w/h,0.0f,300.0f,1.0,-1.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

int main(int argc, char* argv[])
{
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutCreateWindow("GLRect");
 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 SetupRC();
 glutMainLoop();

 return 0;
}

 

三简单动画:

// Bounce.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <gl/glut.h>

GLfloat x1=100.0f;
GLfloat y1=150.0f;
GLsizei rsize=50;

GLfloat xstep=0.2f;
GLfloat ystep=0.2f;

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();//这里不再使用 glutFlush,当我们执行缓冲区交换时候,其实已经执行了刷新操作
 //glFlush();
}

//定时器 Opengl这个定时器只能一次使用,所以写成递归的形式
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);
}

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
 {
  windowHeight=250.0f;
  windowWidth=250.0f*w/h;
 }

 glOrtho(0.0f,windowWidth,0.0f,windowHeight,1.0f,-1.0f);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

int main(int argc, char* argv[])
{

// glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);//双缓冲
 glutCreateWindow("Bounce");
 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 glutTimerFunc(33,TimerFunction,1);
 SetupRC();
 glutMainLoop();
 //printf("Hello World!/n");
 return 0;
}

NTU RGB + D 120 动作识别数据集 描绘骨架(python) “ NTU RGB + D”和“ NTU RGB + D 120”。 “ NTU RGB + D”包含60个动作类别和56,880个视频样本。 “ NTU RGB + D 120”通过添加另外60类和另外57,600个视频样本来扩展“ NTU RGB + D”,即“ NTU RGB + D 120”总共有120类和114,480个样本。 这两个数据集都包含每个样本的RGB视频,深度图序列,3D骨骼... 阅读详情

相关推荐

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 484

OpenGL编程(五)绘直线以及分析绘直线的算法

这次主要实现在窗口上绘制点、线以及修改其属性,另外还会分析画直线的原理和相关算法。 1、在窗口指定位置画点 glBegin(GL_POINTS); glEnd(); 使用glBegin()和glEnd()方法向窗口中添加图形。要添加点时,glBegin()函数里的参数填GL_POINTS。然后通过glVertex3f()函数在指定的(坐标)位置画点,如:glVer...

晨曦的博客 1005

CST毫米波雷达ADAS仿真:从直角反射器到距离多普勒(RD图)的实战解析

本文通过CST Studio Suite实战解析毫米波汽车雷达ADAS仿真,详细演示了从构建直角反射器目标、参数化定义速度、进行参数扫描到生成距离多普勒图(RD图)的全过程。文章深入探讨了雷达关键参数(如距离分辨率、速度分辨率)的设计权衡与工程逻辑,并提供了单位统一、速度范围设定等实用避坑指南,帮助工程师高效完成雷达系统性能的前期验证与优化。

weixin_29292535的博客 502

OpenGl学习——glut/ 绘制矩形,橡皮筋技术,反走样处理/ 代码&详细注释/ From芃

这里有三个书上的代码,芃都给标了注释了,方便大家理解。 绘制矩形 最基础的代码,需学会glut的基本操作。 #include <gl/glut.h> void Initial(void) //初始化操作 { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色(清空当前颜色...

Jason_TBWH的博客 1900

SWIFT报文实战指南:从MT700到MT799的信用证操作全解析

本文深入解析了国际贸易中信用证操作的核心SWIFT报文流程,从开证的MT700到各类通知、修改及结算报文(如MT707、MT730、MT754、MT732/734等)。通过实战案例与关键字段拆解,指导外贸与银行从业者精准处理报文,规避风险,并探讨了利用自动化工具提升处理效率的方法,助力保障跨境交易顺畅。

weixin_29015801的博客 878

基于深度学习的商品标签识别系统:UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集

基于YOLO系列模型的商品标签识别系统能够有效解决商品信息提取的自动化问题。通过合理的数据集准备、模型训练和UI设计,我们可以实现一个功能强大的商品标签识别系统。希望本文提供的内容能够为大家提供有价值的帮助。

YOLO 474

实验1 基于 OpenGL 的动画编程

实验目的: 1. 掌握 Visual Studio 2010(以下简称 VS2010)编程环境。 2. 熟悉 MFC 框架下应用 OpenGL 的绘制编程。 3. 重点熟练掌握基于 MFC 与 OpenGL 的动画编程框架设计。 实验内容: 1. 实验 VS2010 下 MFC 与 OpenGL 的动画编程方法,主要包括: (1) 熟悉 VS2010 界面,创建 MFC 框架方法。 (2) 熟悉 OpenGL 环境配置方法。 (3) 重点熟练掌握 OpenGL 的动画编程方法。 2...

海月的博客 1965

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 136

计算机图形学 学习 1 基本指令及原理讲解

OpenGL 相关库 gl 库 gl库是OpenGL的核心库,包含了115个函数,函数名以g1为前缀,包括基本图元,坐标变换等 glu库 OpenGL的实用程序库, 包含43个函数,函数名以glu为前缀,包括颜色,光照,纹理,缓冲区操作,曲线,曲面等等 wgl库 Windows专用库,包含6个函数,函数名以wgl为前缀,用于练级OpenGL和window NC aux库 OpenGL编程辅助库,包...

Ace_bb的博客 542

全15万字丨PyTorch 深度学习实践、基础知识体系全集;忘记时,请时常回顾。

本篇博客介绍的知识是——深度学习之PyThon框架基础。这是深度学习/神经网络的基础,多次回顾,会有不一样的感受。书读百遍,其义自见。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 5787

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning。

实践出真理,接毕设/课设项目开发指导 607

glClearColor炒用

当采用kResolutionShowAll适配方案时,上下边框可能有黑边,可以使用glClearColor将黑边设置成与背景色同一个颜色,如: 设置透明:glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

隔壁-老阳 2558

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2067

OpenGL学习笔记【1】——简介

OpenGL (Open Graphics Library,译名:开放式图形库) 是一种用于渲染 2D 和 3D 图形的跨语言、跨平台的编程接口(API)。OpenGL 是一个 C 语言库,因此理解 C 语言(或 C++)的基本知识是非常有用的。然而,许多其他语言也有 OpenGL 的绑定,值得一提的包括:所以你可以选择你最熟悉的语言来学习。

奋斗的菇凉的博客 2242

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

openGL学习笔记1——openGL程序框架

C++面向对象openGL窗口创建学习笔记

Cyz的博客 488

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OpenGL学习笔记1-OpenGL简介

翻译自https://learnopengl.com/Getting-started/OpenGL 目录 OpenGL 核心配置与直接模式(Core-profile vs Immediate mode) 扩展(Extensions) 状态机(State machine) 对象(Objects) 让我们开始 OpenGL 在开始我们的旅程之前,我们应该首先定义OpenGL实际上是什么。OpenGL主要被认为是一种API(应用程序编程接口),它为我们提供了一组可以用来操作图形和图像的函数。然而

wangxingxing321的博客 540

[OpenGL][学习笔记]第1章 OpenGL简介

第1章 OpenGL简介 什么是OpenGL   OpenGL是**图形硬件的一种软件接口。**这个接口包含的函数超过700个,可以用于指定物体和操作,创建交互式的三维应用程序。在OpenGL中,程序员必须根据一些为数不多的基本几何图元(如点,直线和多边形)来创建所需要的模型。OpenGL工具库(GLU)提供了许多的建模功能,例如二次曲面以及NURBS曲线和表面。 NURBS曲线和表面   NURBS是Non-Uniform Rational B-Splines的缩写,是非均匀有理B样条的意思。简单地说,

Disservice的博客 259

【OpenGL】OpenGL学习笔记1——渲染管线的初步认识

OpenGL学习笔记1 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。 3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,

weixin_45781252的博客 313

【OpenGL 学习笔记】第 1 篇:搭建OpenGL环境

搭建OpenGL环境

有朋自远方来,不亦乐乎。 2098

OpenGl学习笔记1——建立一个可以支持OpenGL的窗口

我的开发环境是VS2008——VC++ 一、准备工作 1、下载OpenGl SDK ,优快云中就有 2、释放后,在“工具|选项”中设置“项目和解决方案|VC++目录” 在“包含文件”与“库文件”中添加上OpenGl SDK的相关目录。 这样在你的程序中就可以用上#in

aloneone的专栏 832

QT中OpenGL学习笔记1

在 OpenGL 中渲染多边形的方法有很多种,但最有效的方法是仅使用三角形条带基元并渲染图形硬件内存中的顶点。此示例是为 OpenGL ES 2.0 编写的,但它也适用于桌面 OpenGL,因为此示例足够简单,并且在大多数情况下,桌面 OpenGL API 是相同的。Qt主要有两种主要的UI开发方法:QtQuick 和Qt Widgets,它们的存在是为了支持不同类型的用户界面,并建立在针对每种类型进行了优化的单独图形引擎之上,可将OpenGL图形API中编码与这两种用户界面类型相结合创造出渲染后的界面;

qq_45059758的博客 1076

OpenGL学习笔记1

程序示例: int main(int argc, char *argv[]) {      glutInit(&argc, argv);      glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);      glutInitWindowPosition(100, 100);      glutInitWindowSize(400, 400);

lllgggglt的专栏 1272

OPENGL学习笔记1

     OPENGL就是有很多图形API的函数库,专业一点就叫“图形接口”,所以了解这些API是以后使用OPENGL的基础。为了达到使用这些API的目的,还需要至少掌握一门语言,建议C语言。现在流行的编程方式是win32 console和win32 application,哪种方式不重要,主要掌握它API的用法就好了。     OPENGL坐标变换很有特点,为了简单描述先定义2个坐标系,世界坐标

suntao222的专栏 1558

OpenGL学习笔记1:你好窗口

本章开始opengl的学习,这是我的学习笔记,记录下来方便复习,也希望能为其他要学习opengl的小伙伴带来参考。1.2.本节我们将学习创建一个图形窗口,操作系统使用Win10。首先直接上代码,后面再解释每条语句的意思。

weixin_46457885的博客 278

Opengl学习笔记(1)

Opengl学习笔记(1) 一.吐槽 没学opengl的时候我以为opengl就是一个类库,我只需要调用里面的api就可以轻松的完成任务,简简单单的画出好看的图形,但是当我真正开始学的时候才发现这玩意和ugui完全就不是一个量级的,这玩意好像有一点太过底层了,而且虽然还是掉api,但是这其中的api又异常复杂,但既然我开始写总结了,那我应该算勉强看懂了,我就用我自己的话稍微总结一下。虽然opengl本身不是一个api,它仅仅是个规范,但是我们用的时候就当api用就完事了。 二.Opengl介绍 1.渲染模式

m0_52155091的博客 391

OpenGL学习笔记1 创建一个窗口

OpenGL学习笔记1 创建一个窗口 #include <glad/glad.h>//必须是第一个头文件 #include <GLFW/glfw3.h> #include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window); int main() { //初始化G

qq_43479228的博客 284

opengl 学习笔记1

今天看书学习了opengl状态机,以及opengl的属性压栈。 opengl把各类有属性的变量称为管线的状态。状态机是一个抽象模型,是一组状态变量的集合。当一个状态变量被设置后,他会一直保持直到下一次改变。 例如, void glEnable(GLenum capability);//打开此类型 void glDisable(Glenum capability);//关闭此类型 ...

apuycat204023的博客 130
上一篇: 读取Photos全部图标的方法(转)
daneildemon
博客等级 码龄16年 5粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值