opengl

等等党的胜利:树莓派4首发8GB版,售价75刀,还可尝鲜64位操作系统

冷暖自知 提交于 2020-08-12 07:40:59
  机器之心报道    参与:Racoon、张倩、Jamin    树莓派4刚刚宣布了最新升级:新出8GB内存版本,售价75刀,就问你香不香?      去年 6 月,树莓派悄然发布了第四代产品 Raspberry Pi 4。这一新版本经过了从里到外的全面革新,带来了 2-4 倍的计算性能提升,还配置了新的操作系统,接口也全面升级。树莓派开发机构(Raspberry Pi Foundation)称,这款设备可以提供「与入门级 x86 PC 系统相媲美的桌面性能」。   推出一年,树莓派 4 已经卖出了近 300 万台。但美中不足的是,树莓派 4 的内存最大只有 4G。官方博客表示,树莓派使用的 BCM2711 芯片可以寻址高达 16GB 的 LPDDR4 SDRAM,但 8G 的 LPDDR4 封装一直是一个障碍,因为这个封装必须是为树莓派单独设计的。这使得 8GB 版本的研发周期要比预期中长一些。   不过在最近的这次更新中,开发团队表示,他们在合作伙伴美光的帮助下克服了这个障碍,带来了 8GB 的树莓派 4,售价 75 美元。      8GB 的树莓派是个什么概念?官博描述了这样一些应用场景:无论你是想编译、链接大型软件还是在上面运行繁重的服务器负载,这款树莓派都是你的最佳选择。   在硬件上,为了提供更高的峰值电流以匹配 8GB 内存版本的需求,新版本还从电路板右侧靠近

GLUT Tutorials 1: GLUT简介,体系

孤人 提交于 2020-08-11 23:48:00
博客参考:http://blog.csdn.net/xie_zi/article/details/1911406 GLUT 代表 OpenGL Utility Tookit。 Mark J.Kilgard 为了使 OpenGL应用程序结构能够真正独立于窗口系统构思了 GLUT库。感谢 GLUT,使我们可以写程序而不必去学关于 X windows或者微软自己的窗口系统。 Kilgard在 X windows上应用这个库,后来 Nate Robins把它扩展到微软的窗口系统。感谢他们,他们做的太棒了。 在这个教程里,我将给你介绍基本的使用 GLUT建立一个应用程序。这个教程将不介绍如何去渲染那些比较精美的视觉场景。这是为了保持代码尽可能的简洁。 需要的库: GLUT,此处我是通过vcpkg直接安装 vcpkg.exe install glut 这个网站里有很多 GLUT库里函数的原型定义: GLUT原型定义 为了用GLUT写一个C++语言程序你需要有三个文件: 1:glut.h -- 头文件。 2. glut.lib和glut32.lib(glut.lib是SGI的, glut32.lib是Microsoft 的。好像就是看你用的什么操作系统了。一般down的这两个文件都有)库文件。 3: glut32.dll(windows)和glut.dll(SGI)-- 运行时的动态库。

GLUT Tutorials 2: GLUT初始化

江枫思渺然 提交于 2020-08-11 10:19:54
博客转自:http://blog.csdn.net/xie_zi/article/details/1911452 在这个部分我们将在我们的程序里建立一个 main函数,这个 main函数将完成必须的初始化和开启事件处理循环。所有的 GLUT函数都有 glut前缀并且那些完成一些初始化的函数有 glutInit前缀。你首先要做的是调用函数 glutInit()。 Void glutInit( int *argc, char **argv); 参数: Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。 Argv:一个指针,指向从main()函数传递过来的没更改的argv变量。 在初始化 GLUT后,我们开始定义我们的窗口。首先确定窗口位置(它默认的是屏幕左上角),我们使用函数 glutInitWindowPosition() Void glutInitWindowPositon( int x, int y); 参数: X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。 Y:距离屏幕上边的像素数。和X一样。 注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置, window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。接下来我们设置窗口大小,使用函数

GLUT Tutorials 4: GLUT动画

风流意气都作罢 提交于 2020-08-11 08:49:55
博客转自:http://blog.csdn.net/xie_zi/article/details/1911793 到现在为止,我们有了一个画着一个白色三角形的 OpenGL窗口,但一点也不激动人心。现在让我们在这节教程里,让这个三角形自己旋转起来。 让我们回到 main()函数,增加些额外的设置。首先告诉 GLUT我们想要一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画。使用双缓冲区可以预防闪烁。 glutInitDisplayMode(GL_DEPTH|GLUT_DOUBLE|GLUT_RGBA); 接着我们要做的是告诉 GLUT,当应用程序空闲的时候渲染函数应该被调用。这导致 GLUT一直调用渲染函数而产生动画。 GLUT提供了一个函数: glutIdleFunc.这个函数使另一个函数在程序空闲的时候就会被调用。 void glutIdleFunc( void (*func)( void )); 参数: func:在程序空闲的时候就会被调用的函数的函数名。 按照我们的想法,当程序空闲时应该调用的函数是我们先前定义的渲染函数 : renderScene。由于 OpenGL默认没有开启深度测试,我们还要开启它,这样我们才能知道哪个物体在前面,哪个物体在后面。深度测试的开启在 main()函数里,下面看看现在的 main函数。

GLUT Tutorials 3: GLUT窗口设置

℡╲_俬逩灬. 提交于 2020-08-11 07:10:16
博客转自:http://blog.csdn.net/xie_zi/article/details/1911777 下载下面的 VC工程并运行它( glut0.zip )(这个就是上一节的工程)。你将看到两个窗口:一个控制台窗口,一个 OpenGL窗口。现在改变窗口大小使高度与宽度不再相等,这时三角形发生变形。这会发生是因为你没有正确设置投影矩阵。默认的是透视投影矩阵且高宽比为 1.因此高宽比改变了,投影就会变形。因此只要高宽比改变了,投影就应该重新计算。 GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。 void glutReshapeFunc( void (*func)( int width, int height)); 参数: func: 指负责设置正确投影的函数的名称。 因此我们必须做的第一件事是回到 main()函数。在上一章的代码里加入对 glutReshapeFunc()的调用,让我们把负责窗口尺寸的函数叫做 changeSize。现在的代码如下。 int main( int argc, char ** argv) { glutInit( & argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT

open CV对图像的各类操作

﹥>﹥吖頭↗ 提交于 2020-08-11 06:05:24
本文章用于记录自己使用open CV过程中的要点,便于遗忘时查看。 首先使用 using namespace std; using namespace cv; 避免每次都需要敲 ::cv及::std; 图像的读写显示存取 图像定义: Mat image; 图像读取: imread(const String & filename,int flags = IMREAD_COLOR); 支持格式有: Windows bitmaps - *.bmp, *.dib (always supported) JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section) JPEG 2000 files - *.jp2 (see the Notes section) Portable Network Graphics - *.png (see the Notes section) WebP - *.webp (see the Notes section) Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported) Sun rasters - *.sr, *.ras (always supported) TIFF files - *.tiff, *.tif

openGL学习笔记三十八: 绘制加雾特效多纹理逼真地图

☆樱花仙子☆ 提交于 2020-08-10 19:52:07
  从外部Terrain.raw 文件读取高度数据, 法线,添加多纹理支持,形成更真实地图。 涉及函数 glEnable ( GL_FOG ) ; //开启雾特效 glFogi ( GL_FOG_MODE , GL_LINEAR ) ; glFogfv ( GL_FOG_COLOR , fogColor ) ; glFogf ( GL_FOG_START , 0.0 ) ; glFogf ( GL_FOG_END , 50.0 ) ; glFogi ( GL_FOG_COORDINATE_SOURCE_EXT , GL_FOG_COORDINATE_EXT ) ; 代码: terrain.hpp # pragma once # include <GL/glew.h> # include <vector> # include <glm/glm.hpp> using namespace glm ; struct TerrainVert { float x , y , z ; float nx , ny , nz ; float u , v ; float u1 , v1 ; float r , g , b , a ; float fog ; } ; # define MAP_SIZE 1024 class Terrain { public : typedef std :: vector

编程笔记丨程序员如何持续吸收知识?教你提升99%的学习效率!

拟墨画扇 提交于 2020-08-10 19:35:07
在软技能的知识体系中,对于我们程序员来说最重要的莫过于学习方法了。我们应该如何释放自己的内在潜力去像海绵一样地吸收知识呢?在本篇文章中我们将深入探讨如何成为一个顶尖的学习者。 一、如何成为一个高段位的学习者? 1、建构式的学习模式 对问题的好奇、对答案的渴望,是驱动我们学习和探索的主要动力。 「知识不是简单的记忆,而是由我们主动地去建构而来的」 。我们必须充分利用现有的知识,在主动性目标或核心问题的引导下去积极地进行探索,只有这样,我们才能够把得到的新知识与旧知识糅合在一起,并在头脑中建构出新的知识体系。 「一个好的长时程问题,能让我们成为“构建者”,因为我们不仅在学习知识,还在“建构答案”,在努力回答问题的过程中,我们筛选、评判与整合新旧知识,并把它们融汇而成一个知识体系。」 「一个好的长时程问题,能让我们成为“探索者”,主动地去探求未知的领域,扩宽“未知的未知”的边界,而不是仅仅满足于对现成的、边界明晰的知识的掌握。」 因此, 「提出一个深入的探索性问题是一种学习效果非常好的方法」 。在问题牵引下的学习,会帮助我们连续不断地构筑着知识之间的联系,最终便会形成针对于该问题的思维导图之解。 「提问是将我们引向深度学习的起点。一位优秀的学习者,一定同时也是一个优秀的提问者,他会从阅读、观察、思考的过程中产生问题,先解答表层的、容易的那部分,留下深度的、探索式的问题给自己

How to feather the chroma mask from edges

徘徊边缘 提交于 2020-08-10 19:07:36
问题 This is the shader i am using to do chroma key , the shader works well but i need to feather the edges of the chroma mask. How can i do that ? #version 430 core uniform sampler2D u_tex; vec4 keyRGBA = vec4(86.0 / 255.0 , 194.0 / 255.0, 46.0 / 255.0 , 1.0); // key color as rgba vec2 keyCC; // the CC part of YCC color model of key color uniform vec2 rangeSpill = vec2(0.1, .52); // the smoothstep range for spill detection uniform vec2 range = vec2(0.05, 0.21); // the smoothstep range for chroma

openGL学习笔记三十七:绘制简单地图

非 Y 不嫁゛ 提交于 2020-08-10 17:27:11
  地形本质上由一个个顶点(x,y,z)组成多个三角面连接而成。 地形有两种来源:   1.美术使用3dmax、maya、bleader工具,画点、线、面,导出三维模型,然后在游戏中加载进来,进行绘制。   2.软件自身使用数据生成,如通过一张高度图生成。 涉及函数 opengl 绘制网格 glPolygonMode ( GL_FRONT_AND_BACK , GL_LINE ) ; 代码: 下面Terrain 类就是生成一个简单的平面地形网格。 Terrain.hpp # pragma once # include <GL/glew.h> # include <vector> struct TerrainVert { float x , y , z ; } ; //使用索引方式绘制地形 class Terrain { public : typedef std :: vector < TerrainVert > ArrayVertex ; typedef std :: vector < unsigned short > ArrayIndex ; public : ArrayVertex _vertex ; ArrayIndex _index ; int _drawSize ; public : Terrain ( void ) ; ~ Terrain ( void ) ; void