triangle

【GAMES101-现代计算机图形学课程笔记】Lecture 08 Shading 2 (着色管线)

人盡茶涼 提交于 2020-07-24 21:00:51
本节内容概要: Blinn-Phong reflectance model Specular and ambient terms Shading frequencies Graphics pipeline 1. Blinn-Phong reflectance model 1.1 漫反射项 在介绍本节内容之前首先回顾一下上一节的内容。 前面提到了光可以分成三种: 漫反射光、镜面反射光和环境光。 上一节主要介绍了漫反射,由下图我们知道着色点(shading point)的明暗程度与相机(观测)角度无关。具体的光线强度计算公式: \[L_{d}=k_{d}\left(I / r^{2}\right) \max (0, \mathbf{n} \cdot 1) \] 上面公式中的 \(k_d\) 表示漫反射系数,中间 \(I/r^2\) 表示理论上每个着色点对应的光强度,最后一项 \(\max (0, \mathbf{n} \cdot 1)\) 表示吸收的能量比例,可以看到只与法向和光的方向夹角有关。 1.2 高光项(Specular Term) 下面介绍一下高光(又称 镜面反射)项。根据日常生活经验我们可以发现这样一种规律,就是当我们去看一面镜子的时候,当我们的观察角度越接近光线的镜面反射方向,就越容易看到高光(就是那种闪瞎狗眼的情况)。以下图为例,就是当我们的观察方向 \(V\)

[译]Vulkan教程(24)索引buffer

半城伤御伤魂 提交于 2020-07-24 00:57:06
[译]Vulkan教程(24)索引buffer Index buffer 索引buffer Introduction 入门 The 3D meshes you'll be rendering in a real world application will often share vertices between multiple triangles. This already happens even with something simple like drawing a rectangle: 你在真实世界应用程序中要渲染的3D网格,常常会在多个三角形之间共享顶点。这在绘制简单的矩形的时候就出现了: Drawing a rectangle takes two triangles, which means that we need a vertex buffer with 6 vertices. The problem is that the data of two vertices needs to be duplicated resulting in 50% redundancy. It only gets worse with more complex meshes, where vertices are reused in an average number of 3

《Thinking in Java》 10~

二次信任 提交于 2020-05-07 18:24:53
chapter 10 内部类(P191) 创建内部类 链接到外部类   内部类能访问器外围对象的所有成员,而不需要任何特殊条件。 使用.this与.new package cn.test; public class DotThis { void f() { System.out.println("DotThis.f()" ); } public class Inner{ public DotThis outer() { return DotThis.this ; } } public Inner inner() { return new Inner(); } public static void main(String[] args) { DotThis dt = new DotThis(); DotThis.Inner dti= dt.inner(); dti.outer().f(); } } package cn.test; public class DotNew { public class Inner{} public static void main(String[] args) { DotNew dn = new DotNew(); DotNew.Inner dni = dn.new Inner(); } } 为什么需要内部类 为了实现多重继承。 情形1

[原] OpenGL ES 学习笔记 (一)

家住魔仙堡 提交于 2020-05-07 11:20:47
1. OpenGL ES 的坐标系在屏幕上的分布               OpenGL ES 的坐标系{x, y, z} 通过图片的三维坐标系可以知道: - 它是一个三维坐标系 {x, y, z} - 三维坐标中心在正方体的几何中心 {0, 0, 0} - 整个坐标系是 [0, 1] 的点,也就是说 OpenGL 中只支持 0 ~ 1 的点 ( 这里所讲的 0 和 1 ,最好理解成 0 --> 无限小, 1 --> 无限大 ,它并不是指 0 个单位的长度,或 1 个单位的长度。 ) 2. OpenGL 能直接绘制的是 : 点精灵、线、三角形 ,它们统称为 图元(Primitive) ,不能直接绘制四边形。 2.1 线元 : Line Strip , 指首尾相接的线段,第一条线和最后一条线没有连接在一起; Line Loops, 指首尾相接的线段,第一条线和最后一条线连接在一起,即闭合的曲线; 2.2 三角形 Triangle Strip, 指条带,相互连接的三角形 Triangle Fan, 指扇面,相互连接的三角形                       Triangle       扇面 2.3 点精灵 【主要应用在 纹理 方面】 3. OpenGL ES 2 的渲染管线               图形管线(Graphics Pipeline) 因为这里是 iOS

Android Programming 3D Graphics with OpenGL ES (Including Nehe's Port)

ⅰ亾dé卋堺 提交于 2020-05-07 01:47:17
1. Introduction Read Android Training "Displaying Graphics with OpenGL ES" @ http://developer.android.com/training/graphics/opengl/index.html . Android API Guides "OpenGL ES" @ http://developer.android.com/guide/topics/graphics/opengl.html . Android Reference "Package android.opengl " @ http://developer.android.com/reference/android/opengl/package-summary.html . 2. Getting Started with 3D Graphics on Android 2.1 OpenGL ES Android supports OpenGL ES in packages android.opengl , javax.microedition.khronos.opengles and javax.microedition.khronos.egl . 2.2 GLSurfaceView For 3D graphics programming

FZU Monthly-201905 tutorial

风格不统一 提交于 2020-05-05 18:05:19
FZU Monthly-201905 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 AB H DG CE F A. Chess 一道模拟题,很多人做不出来的原因是没有看懂题意。 题意重述: 商店中给出了一个LV1棋子出现的顺序序列,我们需要按照这个序列来购买所有的棋子。 我们最多可以存下16个棋子,每个棋子有一个种类,当有3个相同的棋子的时候,棋子就会升级,3个LV1变成LV2、3个LV2变成LV3. 当一种棋到达LV3时,就会被卖掉,之后商店中给出的所有该种棋子将会被略过。 当16个位置占满时,每次购买新棋子之前,我们要卖掉一个旧棋子。卖掉旧棋子的规则是:分析16个位置上所有棋子中,数量最少的是哪一种;如果有多种都是最少,就选择编号最小的那一种。随后卖掉一个被选中的那种棋子,优先卖出LV1棋子。统计某一种类棋子有多少个的时候,LV2棋子算是3个。 写法很多, 用map和priority_queue会比较简短一点。 B. Triangle 先说结论: 答案是最大和次大值的和。 简单的证明: 我们考虑把四个正三角形放到一个大的正三角形中,贪心地考虑的话,必然是有三个三角形紧贴大三角形的三个角,剩余的一个尖角朝下放在中间。 那么我们考虑最大的三角形放在什么位置。 如果最大的三角形被放置在中间

简单工厂模式(Simple Factory Pattern)

笑着哭i 提交于 2020-05-03 22:44:33
简单工厂模式概述 定义:定义一个 工厂类 ,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为 静态(static)方法 ,因此简单工厂模式又被成为 静态工厂方法(Static Factory Method) 需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程 例如,我开一家披萨店,当客户需要某种披萨并且我这家店里也能做的时候,我就会为其提供所需要的披萨(当然是要钱的哈哈),如果其所需的我这没有,则是另外的情况,后面会谈。这时候,我这家 披萨店就可以看做工厂(Factory) ,而生产出来的 披萨被成为产品(Product) , 披萨的名称则被称为参 数,工厂可以根据参数的不同返回不同的产品,这就是 简单工厂模式 简单工厂模式的结构与实现 结构 : Factory(工厂) : 核心部分 ,负责实现创建所有产品的 内部逻辑 ,工厂类可以被外界直接调用,创建所需对象 Product(抽象类产品) :工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象 ConcreteProduct(具体产品) :简单工厂模式的创建目标,所有被创建的对象都是某个具体类的实例。它要实现抽象产品中声明的抽象方法(有关 抽象类 ) 实现 1 abstract class Product

这样讲 SpringBoot 自动配置原理,你应该能明白了吧

穿精又带淫゛_ 提交于 2020-05-02 17:44:49
前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题,各种排除扫描,导入一个新的依赖又得添加新的配置。自从有了 SpringBoot 之后,咋们就起飞了!各种零配置开箱即用,而我们之所以开发起来能够这么爽,自动配置的功劳少不了,今天我们就一起来讨论一下 SpringBoot 自动配置原理。 本文主要分为三大部分: SpringBoot 源码常用注解拾遗 SpringBoot 启动过程 SpringBoot 自动配置原理 1. SpringBoot 源码常用注解拾遗 这部分主要讲一下 SpringBoot 源码中经常使用到的注解,以扫清后面阅读源码时候的障碍。 组合注解 当可能大量同时使用到几个注解到同一个类上,就可以考虑将这几个注解到别的注解上。被注解的注解我们就称之为组合注解。 元注解:可以注解到别的注解上的注解。 组合注解:被注解的注解我们就称之为组合注解。 @Value 【Spring 提供】 @Value 就相当于传统 xml 配置文件中的 value 字段。 假设存在代码: @Component public class Person { @Value("i am name") private String name; } 1 2 3 4 5 6 7 上面代码等价于的配置文件: <bean class="Person">

Geometry and Appearances【转】

杀马特。学长 韩版系。学妹 提交于 2020-05-01 11:36:07
https://github.com/AnalyticalGraphicsInc/cesium/wiki/Geometry-and-Appearances Geometry and Appearances Patrick Cozzi edited this page on 18 Aug 2015 · 77 revisions Part I is now on the Cesium website . Part II: Creating Custom Geometry and Appearances This is now out-of-date. There will be a new version as part of #1683 . Cesium supports many common geometries and appearances out of the box. However, we may need to visualize a new type of geometry or apply custom shading to existing geometries. Since geometries and appearances are decoupled, we can add new geometries that are compatible with

从零开始学动态规划(转)

流过昼夜 提交于 2020-04-30 12:55:46
动态规划的定义: 动态规划是运筹学的一个分支,是求解决策过程的最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。在各种算法中,我认为动态规划是较难掌握好的,主要难在模型的建立。 解题的一般步骤是: 1.找出最优解的性质,刻画其结构特征和最优子结构特征; 2.递归地定义最优值,刻画原问题解与子问题解间的关系; 3.以自底向上的方式计算出各个子问题、原问题的最优值,并避免子问题的重复计算; 4.根据计算最优值时得到的信息,构造最优解。 话不多说,我们来看几个具体的例子慢慢理解它: 1.矩阵连乘 给定n个可连乘的矩阵{A1, A2, …,An},根据矩阵乘法结合律,可有多种不同计算次序,每种次序有不同的计算代价,也就是数乘次数。例如给定2个矩阵A[pi,pj]和B[pj,pk],A×B为[pi,pk]矩阵,数乘次数为pi×pj×pk。将矩阵连乘积Ai…Aj简记为A[i:j] ,这里i≤j。考察计算A[i:j]的最优计算次序,设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,i≤k<j,则A[i:j]的计算量=A[i:k]的计算量+A[k+1:j]的计算量+A[i:k]和A[k+1:j