SRP学习笔记

SRP是什么

Unity2018添加了对可编辑渲染管线的支持,让从头搭建渲染管线成为可能,虽然在许多个别的步骤(如剔除 culling)仍然需要依赖Unity。Unity2018还介绍了用这种方法创建的两个渲染管线,轻量级渲染管线(lightweight pipeline)和高清渲染管线(highdefinition pipeline).目前这两个渲染管线仍处于预览状态,可编辑渲染管线的API也被标记为测试技术。但这已经足够让我们用于创建自己的渲染管线了。

  • 简而言之就是可以在unity里面用C#和SRP API写出C++里面用OpenGL类似的效果。
  • 所谓定义渲染管线,就是一系列的OpenGL API的调用过程,数据组织的过程。

CPU运行笔记

CPU缓存

CPU cache line

  • 多核CPU中L1 L2 cache是独立的,L3是共享的
  • L1 Cache 通常会分为「数据缓存」和「指令缓存」
  • CPU 访问 L1 Cache 只需要 24 个时钟周期,访问 L2 Cache 大约 1020 个时钟周期,访问 L3 Cache 大约 2060 个时钟周期,而访问内存速度大概在 200300 个 时钟周期之间。
  • cache line是数据读写的基本单元
  • cache line由tag和data block组成
  • 一个内存的访问地址,包括组标记、CPU Line 索引、偏移量这三种信息,于是 CPU 就能通过这些信息,在 CPU Cache 中找到缓存的数据。而对于 CPU Cache 里的数据结构,则是由索引 + 有效位 + 组标记 + 数据块组成。

OpenGL学习笔记 第三周:shader的使用

前言

  • 一周时间学会了一件事,怎么把前两周的纯OpenGL绘制改成shader绘制。
  • 之前对unityshader比较熟悉,因此编写shader本身没啥新收获。但是对于C++代码层面如何的包装shader和调用上收获颇丰。
  • 学完后更加深入的体会到,shader作为在GPU上执行的函数的意义。同时对于渲染一个物体都需要哪些数据有了更深刻的认知。

OpenGL学习笔记 第二周:2D

几个概念

  • glutInitWindowPosition(int x, int y) // 定义窗口位置

  • glViewport(GLint x, GLint y, GLsizei width, GLsizei height) // 定义视口大小

  • glutInitWindowSize(int width, int height) // 定义窗口大小

OpenGL学习笔记 第二周:摄像机操作

OpenGL中如何设置摄像机

  • 在OpenGL中设置camera只需要下面的API即可
    • 前三个是camera的position,可以理解为眼睛的位置,变量命名很贴切。
    • 中间三个是视点的位置,可以理解为你看着那里
    • 后面三个是摄像机的Y轴向量
    • 实际上center-pos产生的向量是作用于x、z两个轴,因此这9个变量就决定了摄像机的位置和朝向。

OpenGL学习笔记 第二周:光

光源基础

  • glEnable(GL_LIGHTING) 开启光的使用
  • glEnable(GL_LIGHT0) 使用第一个光,在OpenGL中默认有8个light可以使用

DirectionLight

  • 平行光最重要的属性是位置。可以通过下面的代码设置:
1
2
   float LightPos[] = { 0.0f,1.0f,0.0f,0.0 };
glLightfv(GL_LIGHT0, GL_POSITION, LightPos);

OpenGL学习笔记 第二周:模型的显示

模型数据的解析

  • 以下是读取到的数据,从这个数据可以看出来第一部分是顶点数据。这个只是不重复的数据而已。
  • 第二部分叫做绘制指令,一行有三组数据,表示一个三角型的三个顶点。所以有几行就说明这个模型由几个三角型组成。
  • 每一组数据说明了这个顶点的pos、texcoord和normal 在第一部分的索引,就是得到的数字-1。
  • 例如:F中第一组数据是 1/1/1 (pos/texcoord/normal)代表的含义是这个顶点的数据是v、vt、vn的第一行。
  • 因为顶点是会共用的,所以可以看到第二行数据有重复,但是因为绘制模型是按照三角型逐个绘制的,因此这些数据还是必须记录下来。

OpenGL学习笔记 第一周:环境构建、OpenGL基础

构建环境

windows上创建一个窗体

  • 定义窗体类,用到了WNDCLASSEXRegisterClassEx函数。

  • 创建窗体

    • 计算一个合适的窗体大小,用到了AdjustWindowRect
    • 创建HWND hwnd = CreateWindowEx(NULL, "GLWindow", "OpenGL Window", WS_OVERLAPPEDWINDOW, 100, 100, windowWidth, windowHight, NULL, NULL, hInstance, NULL);
  • 展示窗体:ShowWindow(hwnd, SW_SHOW);

cmake学习笔记

看了B站一个cmake教程,部分笔记内容来自别人

CMake中的变量

  • 变量和含义

    常用变量 含义
    PROJECT_NAME 工程名变量
    PROJECT_SOURCE_DIR 顶层的项目目录
    PROJECT_BINARY_DIR 使用cmake的路径
    CMAKE_ROOT CMAKE安装的根目录
    CMAKE_BUILD_TYPE 编译类型:emptyDebugRelease
    CMAKE_SOURCE_DIR 顶层的CMakeLists.txt所在路径
    CMAKE_BINARY_DIR 顶层的CMakeLists.txtbuild所在目录
    CMAKE_<LANG>_COMPILER 设定某个语言LANG的编译器,比如g--
    CMAKE_INSTALL_PREFIX 指令install的路径
    CMAKE_CURRENT_SOURCE_DIR 当前CMakeLists.txt所在路径
    CMAKE_CURRENT_BINARY_DIR 当前CMakeLists.txtbuild所在目录
    EXECUTABLE_OUTPUT_PATH 可执行文件输出路径
    LIBRARY_OUTPUT_PATH 库输出路径

MacOS部署Jenkins,打包unity

准备Jenkins

  • 终端输入brew install jenkins,用这个方式安装本质还是个war包,但是不用再安装Tomcat
  • 安装好后直接在终端输入jenkins启动应用,浏览器输入localhost:8080可以打开。
  • 网上有8080端口被占用的处理办法
  • brew安装失败大概率是因为githubusercontent被墙了,要么梯子,要么修改Mac上的hosts,方法如下:
    • sudo vi /etc/hosts
    • https://www.ipaddress.com/查询raw.githubusercontent.com的当前地址
    • 然后在hosts里面加入,当前的IP是199.232.28.133 raw.githubusercontent.com
  • 网页打开后第一次要注册,然后会提示安装插件,最后就可以进入Jenkins。基本上准备工作没啥难度,除了网速。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×