7 purple_wind_yy

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 1w+

批处理之返回值

目录例子在批处理执行命令时,如何判断上一个命令执行是否成功,通过返回值来判断,如果执行成功则errorlevel为0,执行失败errorlevel不为0。例子描述:执行git操作,在git命令之后判断如果执行失败就中断。@echo offgit pullif errorlevel 1 pause>nulpause其中if errorlevel 1表示如果返回值大于等于一,也就是执行失败。...

2020-09-29 22:32:34

批处理之for /r

目录显示目录及子目录下的所有文件for /r的作用是遍历文件夹,遍历指定目录及其子目录的所有文件和文件夹,注意for /r不能列举出隐藏目录。显示目录及子目录下的所有文件描述:显示指定目录及其包含的所有子目录。@echo offfor /r d:\test %%i in (*) do echo %%ipause...

2020-09-29 22:31:13

批处理之for /f

目录显示文本内容字符串截取截取指点段字符串通常,我们使用批处理命令来处理文本,而解析文本主要使用的就是for /f,通过几个常见使用场景的例子,来感受for /f的使用方式吧。显示文本内容描述:将同一目录下的test.txt的内容全部显示出来。test.txt内容如下:111222333@echo offfor /f %%i in (test.txt) do echo %%i & pausepause说明:运行这段代码,可以发现,每次输出一行后需要按任意键后才输出下一行,也

2020-09-29 22:30:43

批处理之for的基础用法

目录基本结构结构说明例子列出当前目录下所有后缀为txt的文件(列不出隐藏文件)列出当前目录下所有后缀为txt且名字长度小于等于3的文件基本结构for %%i in (set) do command结构说明for in do是不可或缺的三个关键字。%%i,就算在commond中没有用到,也一定要有,一般写作%%i或者%%a,可以用26个字母的任意一个,区分大小写,也就是说%%i和%%I会被认为不是相同变量,为了避免冲突,不使用数字。in之后表示范围,注意set外边的括号不可省略。comman

2020-09-29 22:29:20

OpenGL学习笔记(二十)

目录深度缓冲的可视化深度缓冲的可视化片段着色器中,内建gl_FragCoord向量的z值包含了那个特定片段的深度值。如果我们将这个深度值输出为颜色,就可以显示场景中所有片段的深度值。我们可以根据片段的深度值返回一个颜色向量来完成这一工作:void main(){FragColor = vec4(vec3(gl_FragCoord.z), 1.0);}如果运行程序的话,会注意到所有东西都是白色的,看起来就像所有的深度值都是最大的1.0。所以为什么没有靠近0.0(即变暗)的深度值呢?你可能还记得

2020-08-31 16:33:31

OpenGL学习笔记(十九)

目录深度值精度深度值精度深度缓冲包含了一个介于0.0和1.0之间的深度值,它将会与观察者视角所看见的场景中所有物体的z值进行比较。观察空间的z值可能是投影平截头体的近平面(Near)和远平面(Far)之间的任何值。我们需要一种方式来将这些观察空间的z值变换到[0, 1]范围之间,其中的一种方式就是将它们线性变换到[0, 1]范围之间。下面这个(线性)方程将z值变换到了0.0到1.0之间的深度值:depth=(z−near)/(far−near)这里的near和far值就是提供给投影矩阵设置可视平截头

2020-08-31 16:32:53

OpenGL学习笔记(十八)

目录深度测试函数深度测试函数OpenGL允许我们修改深度测试中使用的比较运算符。这允许我们来控制OpenGL什么时候该通过或丢弃一个片段,什么时候去更新深度缓冲。我们可以调用glDepthFunc函数来设置比较运算符(或者说深度函数(Depth Function)):glDepthFunc(GL_LESS);这个函数接受下面的比较运算符:GL_ALWAYS 永远通过深度测试GL_NEVER 永远不通过深度测试GL_LESS 在片段深度值小于缓冲的深度值时通过测试GL_EQUAL 在片段深度值

2020-08-31 16:32:18

OpenGL学习笔记(十七)

目录深度测试深度测试运用了深度缓冲(Depth Buffer),或z缓冲(z-buffer),可以防止被阻挡的面渲染到其它面的前面。深度缓冲就像颜色缓冲(Color Buffer)一样,在每个片段中储存了信息,并且和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的,它会以16、24或32位float的形式储存它的深度值。在大部分的系统中,深度缓冲的精度都是24位的。当深度测试(Depth Testing)被启用时,OpenGL会将一个片段的的深度值与深度缓冲的内容进行对比。OpenGL会

2020-08-31 16:30:08

OpenGL学习笔记(十六)

目录纹理单元纹理单元你可能会奇怪为什么sampler2D变量是个uniform,我们却不用glUniform给它赋值。使用glUniform1i,我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。一个纹理的位置值通常称为一个纹理单元(Texture Unit)。一个纹理的默认纹理单元是0,它是默认的激活纹理单元,所以教程前面部分我们没有分配一个位置值。纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要

2020-07-31 22:59:59

OpenGL学习笔记(十五)

目录应用纹理应用纹理我们需要告知OpenGL如何采样纹理,所以我们必须使用纹理坐标更新顶点数据:float vertices[] = {// ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // 右上0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // 右下-0.5f, -0.

2020-07-31 22:58:59

OpenGL学习笔记(十四)

目录生成纹理生成纹理和之前生成的OpenGL对象一样,纹理也是使用ID引用的。让我们来创建一个:unsigned int texture;glGenTextures(1, &texture);glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的unsigned int数组中(我们的例子中只是单独的一个unsigned int),就像其他对象一样,我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理:glBindTexture(GL_TEXTURE

2020-07-31 22:57:47

OpenGL学习笔记(十三)

目录纹理纹理环绕方式(Texture Wrapping)纹理过滤(Texture Filtering)多级渐远纹理(Mipmap)纹理我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。所以引入纹理(Texture)的概念。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理

2020-07-31 22:56:32

OpenGL学习笔记(十二)

目录纹理纹理环绕方式(Texture Wrapping)纹理过滤(Texture Filtering)多级渐远纹理(Mipmap)纹理我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。所以引入纹理(Texture)的概念。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理

2020-06-30 01:03:16

OpenGL学习笔记(十一)

目录着色器GLSL输入与输出Uniform着色器着色器(Shader)是运行在GPU上的小程序,这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。GLSL着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着

2020-06-30 00:45:42

OpenGL学习笔记(十)

目录索引缓冲对象索引缓冲对象索引缓冲对象(Element Buffer Object,EBO,也叫Index Buffer Object,IBO)。假设我们不再绘制一个三角形而是绘制一个矩形。我们可以绘制两个三角形来组成一个矩形(OpenGL主要处理三角形)。这会生成下面的顶点的集合:float vertices[] = { // 第一个三角形 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0.0f, // 右下角 -0.5f, 0

2020-06-30 00:34:25

git多分支合并时的坑

目录场景1场景2结论场景1有两个分支,master和基于master创建的dev分支master分支对文件A执行了移动路径的操作(rename)dev分支也对文件A执行了相同的移动路径的操作(rename)现在,想要把dev分支合并回master分支,文件A会不会冲突?合并结果:实际测试一下,发现不会冲突,因为两边相对位置相同且都没有改变文件A的内容。场景2有两个分支,master和基于master创建的dev分支。master分支对文件A执行了移动路径的操作(rename)。dev

2020-06-30 00:18:15

OpenGL学习笔记(九)

绘制一个三角形绘制函数完整代码执行结果绘制函数OpenGL的绘制函数为glDrawArrays,它使用当前激活的着色器,之前定义的顶点属性配置,和VBO的顶点数据(通过VAO间接绑定)来绘制图元:glUseProgram(shaderProgram);glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES, 0, 3);glDrawArrays函数说明:第一个参数是OpenGL图元的类型。绘制三角形,参数就是GL_TRIANGLES。第二个参数指

2020-05-31 16:20:48

OpenGL学习笔记(八)

顶点数组对象为什么引入顶点数组对象顶点数组对象创建顶点数组对象为什么引入顶点数组对象在OpenGL中绘制一个物体,代码会像是这样:// 0. 复制顶点数组到缓冲中供OpenGL使用glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// 1. 设置顶点属性指针glVertexAttribPointer(0, 3, GL_FLOAT

2020-05-31 16:10:40

OpenGL学习笔记(七)

顶点属性链接顶点属性链接顶点属性在执行了上一篇文章中的绑定激活着色器程序之后,我们已经把输入顶点数据发送给了GPU,并指示了GPU如何在顶点和片段着色器中处理它。但是,OpenGL还不知道它该如何解释内存中的顶点数据,以及它该如何将顶点数据链接到顶点着色器的属性上,我们需要告诉OpenGL怎么做。这就是链接顶点属性要做的事情。顶点着色器允许我们指定任何以顶点属性为形式的输入。这使其具有很强的灵活性的同时,它还的确意味着我们必须手动指定输入数据的哪一个部分对应顶点着色器的哪一个顶点属性。所以,我们必须在

2020-05-31 16:03:45

OpenGL学习笔记(六)

着色器程序简介使用简介着色器程序对象(Shader Program Object)是多个着色器合并之后并最终链接完成的版本。使用着色器前,必须先把它们链接(Link)为一个着色器程序对象,然后在渲染对象的时候激活这个着色器程序,已激活着色器程序的着色器将在发送渲染调用的时候被使用。当链接着色器至一个程序的时候,它会把每个着色器的输出链接到下个着色器的输入。当输出和输入不匹配的时候,会报连接错误。使用首先创建一个着色器程序:unsigned int shaderProgram;shaderPro

2020-05-31 15:53:40

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。