OpenGL 从入门到成魔-第6章- Uniform 变量的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL 从入门到成魔-第6章- Uniform 变量的使用相关的知识,希望对你有一定的参考价值。

参考技术A 注:参考自bilibili系列视频,OpenGL 从入门到成魔-第6章- Uniform 变量的使用 https://www.bilibili.com/video/BV1Mz411i7HQ

用于从cpu端,向顶点着色器和片段着色器转递变量。在cpu端,通过glUniform**()函数赋值。在shader内部,uniform就像常量,不能被shader修改。

如果uniform变量在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用。(相当于一个被vertex和fragment shader共享的全局变量)

uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。

eg:

uniform mat4 viewProjMatrix; //投影+视图矩阵
uniform mat4 viewMatrix; //视图矩阵
uniform vec3 lightPosition; //光源位置
uniform float lumaThreshold;
uniform sampler2D SamplerY;

根据传递变量的类型及个数,该函数有不同的名字,如果传1个int类型,就调用glUniform1i(), 如果传2个float类型,就调用glUniform2f()。还可以传向量,矩阵等。

第一个参数是location,即变量的地址。用glGetUniformLocation来获取,第一个参数program(由多个shader组成),第二个参数,变量名
第二个参数要赋的值。

attribute变量是只能在vertex shader中使用的变量。一般用attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等。

varying变量是vertex和fragment shader之间做数据传递用的。一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。因此varying变量在vertex和fragment shader二者之间的声明必须是一致的。

Python爬虫从入门到成妖之3-----Scrapy框架的命令行详解

创建爬虫项目

scrapy startproject 项目名

例子如下:

E:crawler>scrapy startproject test1
New Scrapy project test1, using template directory d:\\python36\\lib\\site-packages\\scrapy\\templates\\project, created in:
    E:crawler	est1

You can start your first spider with:
    cd test1
    scrapy genspider example example.com

E:crawler>

这个时候爬虫的目录结构就已经创建完成了,目录结构如下:

技术分享图片

接着我们按照提示可以生成一个spider,这里以百度作为例子,生成spider的命令格式为;
scrapy genspider 爬虫名字 爬虫的网址

E:crawler	est1>scrapy genspider baiduSpider baidu.com
Created spider baiduSpider using template basic in module:
  test1.spiders.baiduSpider

E:crawler	est1>

关于命令详细使用

命令的使用范围

这里的命令分为全局的命令和项目的命令,全局的命令表示可以在任何地方使用,而项目的命令只能在项目目录下使用

全局的命令有:
startproject
genspider
settings
runspider
shell
fetch
view
version

项目命令有:
crawl
check
list
edit
parse
bench

startproject
这个命令没什么过多的用法,就是在创建爬虫项目的时候用

genspider
用于生成爬虫,这里scrapy提供给我们不同的几种模板生成spider,默认用的是basic,我们可以通过命令查看所有的模板

E:crawler	est1>scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

E:crawler	est1>

当我们创建的时候可以指定模板,不指定默认用的basic,如果想要指定模板则通过
scrapy genspider -t 模板名字

E:crawler	est1>scrapy genspider -t crawl zhihuspider zhihu.com
Created spider zhihuspider using template crawl in module:
  test1.spiders.zhihuspider

E:crawler	est1>

crawl

这个是用去启动spider爬虫格式为:
scrapy crawl 爬虫名字
这里需要注意这里的爬虫名字和通过scrapy genspider 生成爬虫的名字是一致的

check

用于检查代码是否有错误,scrapy check

list
scrapy list列出所有可用的爬虫

fetch
scrapy fetch url地址 
该命令会通过scrapy downloader 讲网页的源代码下载下来并显示出来

这里有一些参数:
--nolog 不打印日志
--headers 打印响应头信息
--no-redirect 不做跳转

view
scrapy view url地址
该命令会讲网页document内容下载下来,并且在浏览器显示出来

技术分享图片

因为现在很多网站的数据都是通过ajax请求来加载的,这个时候直接通过requests请求是无法获取我们想要的数据,所以这个view命令可以帮助我们很好的判断

shell
这是一个命令行交互模式
通过scrapy shell url地址进入交互模式
这里我么可以通过css选择器以及xpath选择器获取我们想要的内容(xpath以及css选择的用法会在下个文章中详细说明),例如我们通过scrapy shell http://www.baidu.com

 技术分享图片

这里最后给我们返回一个response,这里的response就和我们通requests请求网页获取的数据是相同的。
view(response)会直接在浏览器显示结果
response.text 获取网页的文本
下图是css选择器的一个简单用法

技术分享图片

settings
获取当前的配置信息
通过scrapy settings -h可以获取这个命令的所有帮助信息

E:crawler	est1>scrapy settings -h
Usage
=====
  scrapy settings [options]

Get settings values

Options
=======
--help, -h              show this help message and exit
--get=SETTING           print raw setting value
--getbool=SETTING       print setting value, interpreted as a boolean
--getint=SETTING        print setting value, interpreted as an integer
--getfloat=SETTING      print setting value, interpreted as a float
--getlist=SETTING       print setting value, interpreted as a list

Global Options
--------------
--logfile=FILE          log file. if omitted stderr will be used
--loglevel=LEVEL, -L LEVEL
                        log level (default: DEBUG)
--nolog                 disable logging completely
--profile=FILE          write python cProfile stats to FILE
--pidfile=FILE          write process ID to FILE
--set=NAME=VALUE, -s NAME=VALUE
                        set/override setting (may be repeated)
--pdb                   enable pdb on failure

E:crawler	est1>

 

 拿一个例子进行简单的演示:(这里是我的这个项目的settings配置文件中配置了数据库的相关信息,可以通过这种方式获取,如果没有获取的则为None)

E:crawler	est1>scrapy settings  --get=MYSQL_HOST
None

E:crawler	est1>

runspider
这个和通过crawl启动爬虫不同,这里是scrapy runspider 爬虫文件名称
所有的爬虫文件都是在项目目录下的spiders文件夹中

version
查看版本信息,并查看依赖库的信息

E:crawler	est1>scrapy version
Scrapy 1.5.1

E:crawler	est1>scrapy version -v
Scrapy       : 1.5.1
lxml         : 4.2.5.0
libxml2      : 2.9.5
cssselect    : 1.0.3
parsel       : 1.5.0
w3lib        : 1.19.0
Twisted      : 18.7.0
Python       : 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]
pyOpenSSL    : 18.0.0 (OpenSSL 1.1.0h  27 Mar 2018)
cryptography : 2.3
Platform     : Windows-7-6.1.7601-SP1

E:crawler	est1>

 

以上是关于OpenGL 从入门到成魔-第6章- Uniform 变量的使用的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 从入门到成魔-第7章-纹理和纹理坐标

OpenGL第1章-入门

Java 从入门到精通(第4版)第6章 数组

Java并发编程从入门到精通 - 第6章:线程池

Kafka从入门到成神系列 五Kafka 幂等性及事务

Python爬虫从入门到成妖之3-----Scrapy框架的命令行详解