boost::assign的+=形式
std::vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
boost::any,将不同类型对象push到any list
#include <list>
#include <boost/any.hpp>
using boost::any_cast;
typedef std::list<boost::any> many;
void append_int(many & values, int value)
{
boost::any to_append = value;
values.push_back(to_append);
}
void append_string(many & values, const std::string & value)
{
values.push_back(value);
}
void append_char_ptr(many & values, const char * value)
{
values.push_back(value);
}
void append_any(many & values, const boost::any & value)
{
values.push_back(value);
}
void append_nothing(many & values)
{
values.push_back(boost::any());
}
判断any的实际类型,用到了empty(),type(),any_cast<>
bool is_empty(const boost::any & operand)
{
return operand.empty();
}
bool is_int(const boost::any & operand)
{
return operand.type() == typeid(int);
}
bool is_char_ptr(const boost::any & operand)
{
try
{
any_cast<const char *>(operand);
return true;
}
catch(const boost::bad_any_cast &)
{
return false;
}
}
bool is_string(const boost::any & operand)
{
return any_cast<std::string>(&operand);
}
opengl api现在到了4.6版本,分成了core和compatibility两种,compatibility包含2.1版本api和core的api,由khronos组织维护制定,下面是两种api的specification(说明书)
https://registry.khronos.org/OpenGL/specs/gl/glspec46.core.withchanges.pdf
https://registry.khronos.org/OpenGL/specs/gl/glspec46.compatibility.withchanges.pdf
由于历史原因很多旧api任然流行,4.x由于glsl变化后很多旧api功能完全替代了。
void glMatrixMode( GLenum mode) - 最常用的是设置GL_MODELVIEW和GL_PROJECTION,设置当前矩阵是模型视图矩阵还是投影矩阵。
glLoadIdentity - 设置当前矩阵为单位矩阵
void glLoadMatrixd( const GLdouble * m) - 直接设置计算好的4x4矩阵
4.x的core的api中矩阵都是uniform传进去glsl着色器,是投影矩阵还是模型视图矩阵由developer自行确定。
glBengin,glEnd,glVertexPointer,glColorPointer,glNormalPointer,这些和设置顶点坐标,顶点颜色,顶点法向量都在core4.x创建vao vbo,基本意思是创建一个vec3的数组vbo表示顶点法向量,和顶点个数一样,并指定绑定在1,GPU的内存布局位置,接着在顶点着色器 开头写
layout(location=1) in vec3 normal;
这样就把数据传到顶点着色器用了,具体是做什么用由developer决定。
glLight,glLightMode,glMaterial这些设置光照和材质的,纹理,也通过uniform传进去glsl自行实现光照算法。
光栅化流水线还是顶点,几何,片元,片元测试这样处理流程或者叫管线固化的,三角形光栅化为片元都是固化的,开发者只是可编程这个线上开放的一些单元,单元前后阶段可以in,out传值,单元之间,比如顶点和顶点,片元和片元,是并行处理互相没有因果依耐,这也是图形处理可以并行化一个特点,可以参考物理上n个点射向eye的光粒子是真并行的过程,每个光粒子独立和视网膜发生化学反应,由于是并行的物理过程,虽然视网膜上有1亿个感光细胞,每个细胞都被光粒子击中并发生化学反应,有文章研究1皮秒实验者就能感知到光的存在,很明显这1亿多个视细胞是同时发生反应的,文章还指出人眼睛感知光可能还有量子生物学中的量子力学效应有关,因为一皮秒化学反应还没开始,更不用说大脑处理信号,所以研究发现神奇的量子效应的生物学证据。