《Real-Time Rendering 4th Edition》全文翻译 - 第5章 着色基础(中)5.3 ~ 5.4

这两节终于翻译完毕,不得不说原文篇幅是真的长,花了不少时间。

另外,以后引用的具体文章标题不会再列出来,一是为了节省时间,二是感觉列出来会过于冗余。所以如果想看具体引用文章标题的话,请在原书里手动搜索。

业余翻译,若有不周到之处,还请多多指教。

实时渲染(第四版)Real-Time Rendering (Fourth Edition)

第5章 着色基础 Chapter 5 Shading Basics

5.3 实现着色模型 Implementing Shading Models

为了发挥作用,这些着色和光照的方程当然必须在代码中实现。在本节中,我们将仔细介绍设计和编写此类实现的一些关键注意事项。此外,我们也会介绍一个简单的实现示例。

5.3.1 计算频率 Frequency of Evaluation

(注:frequency of evaluation 似乎是某个特别名词,暂未查到正式翻译,联系上下文后,发现译为 “计算频率” 更易理解。)

当设计一个着色实现时,需要根据他们的计算频率(frequency of evaluation)对计算进行划分。首先,要决定给出的计算结果是否总是在一个绘制调用(draw call)中保持恒定。在这种情况下,虽然 GPU 的计算着色器能够用于特别昂贵的计算,但是计算一般可由应用程序在 CPU 上执行。其计算的结果通过统一的着色器输入传到图形 API 中。

从“一次”开始,即使在这个类别中,也存在有大范围可能的计算频率。最简单的例子就是着色方程中一个常量子表达式,但是这可以应用到那些很少更改参数的例如硬件配置和安装选项的计算中。这种着色计算可能在着色器编译的时候就完成了,这种情况下甚至不需设置一个统一的着色器输入。或者,在安装阶段或当应用被加载时,计算就会被一个离线的预计算 Pass 所执行。

另一种情况是,着色计算的结果在应用程序执行时不断变化,但是这个变化很慢,以至于不需要在每一帧都进行更新。例如基于虚拟游戏世界时间的光照参数。如果计算的消耗是昂贵的,那么它应该被平摊到多帧。

其他情况下,包括每帧执行一次的计算,例如连接视图和透视矩阵;或每个模型执行一次的计算,例如根据位置更新模型的光照参数;或每次绘制调用(draw call)执行一次,例如,更新模型中每种材质的参数。通过计算频率,我们将统一的着色器输入分组,这样有助于提高应用程序的效率,并且还可以通过最小化常量更新(minimizing constant updates)来提高 GPU 的性能 [1165]

如果着色计算的结果在一个绘制调用中不断变化,那么它就不能由一个统一的着色器输入传到着色器中。取而代之的是,它必须在第 3 章提到的可编程着色阶段之一中被计算,并且如果需要的话,会通过不同的着色器输入传到其他阶段。理论上,着色计算能在任何一个可编程阶段上执行,其中每个都对应着不同的计算频率:

顶点着色器(Vertex shader) —— 计算每个曲面细分前的顶点。

外壳着色器(Hull shader) —— 计算每个表面补丁。

域着色器(Domain shader) —— 计算每个曲面细分后的顶点。

几何着色器(Geometry shader)—— 计算每个图元。

像素着色器(Pixel shader)—— 计算每个像素。

图 5.9 对于来自公式 5.19 的案例着色模型的逐像素和逐顶点的计算结果的比较,展示了三个不同顶点密度的模型。左侧展示了逐像素计算的结果,中间展示了逐顶点计算的结果,以及右边呈现了每个模型的线框渲染以展示顶点的密度。(来自计算机图形学档案的中国龙网格模型 [1172],原模型来自斯坦福 3D 扫描存储库)

实际上,大部分着色计算是逐像素执行的。尽管这些通常是在像素着色器中实现的,但是计算着色器的实现正变得越来越普遍;相关的一些例子将在第 20 章中讨论。其他阶段主要用于几何操作,例如变换和变形。为了理解为什么是这种情况,我们会对比逐顶点和逐像素着色计算的结果。在旧版的文本里,它们有时会被称作 Gouraud 着色(Gouraud shading)[578] 和 Phong 着色(Phong Shading)[1414],尽管这些术语如今已不常使用。对比中使用的着色模型在某些方面与公式 5.1 中的较为相似,但是经过修改,它可以与多个光源一起使用。当我们详细讲解案例的实现时,会在之后给出完整的着色模型。

图 5.9 展示了不同顶点密度模型的逐像素和逐顶点着色的结果。对于龙,这个顶点密度极高的模型网格,逐顶点与逐像素之间的区别是很小的。但是对于茶壶,顶点着色计算导致了例如高光棱角分明的视觉错误,并且再两个三角面组成的平面上,顶点着色的版本很明显是不对的。导致这些错误的原因是着色方程,尤其是高光部分,在模型网格表面有着非线性变化的值。这使得它们不适合用于顶点着色器,其计算结果会在递交给像素着色器之前在三角面进行线性插值。

原则上来说,可以在像素着色器中仅计算着色模型的镜面高光部分(specular highlight),而在顶点着色器中计算其余部分。这可能不会导致视觉伪像(visual artifacts),并且理论上将节省一些计算。然而在实践中,这种混合实现通常不是最佳的。着色模型的线性变化部分往往在计算上花费最少,并且以这种方式拆分着色计算往往会增加相当多的开销,例如重复计算和额外的变化输入,从而导致弊大于利。

(注:visual artifacts 在此不是很好翻译,翻译为视觉人造物会莫名其妙,考虑到指的是之前提到的某种虚假感的视觉错误,且错误原因是与现实世界有差异,因此翻译为视觉伪像)

正如我们之前提到的,在大部分实现中,顶点着色器负责非着色操作,例如几何变换和变形。生成的几何表面属性,转换到合适的坐标系统中,并被顶点着色器写入,在三角面上进行线性插值,然后作为变化的着色器输入传入像素着色器。这些属性通常包括表面的位置,表面法线,以及可选的表面切线向量(如果需要法线贴图的话)。

需要注意的是,即使顶点着色器总是生成单位长度表面法线,插值也是能改变其长度的。见图 5.10 左侧。因此,法线需要在像素着色器中重新归一化(缩放至长度为 1)。然而,顶点着色器生成的法线的长度仍然很重要。如果法线长度在顶点间是明显不同的,例如,作为顶点混合的副作用,这就会使插值倾斜。此情况可见图 5.10 右侧。由于这两个副作用,具体的实现通常会在插值之前与之后,即在顶点着色器和像素着色器中,去归一化插值后的向量。

图 5.10 在左侧,我们看到跨越表面的单位法线的线性插值将导致插值后的向量长度小于1。在右侧,我们看到法线的线性插值有着明显不同的长度,这导致了插值后的方向朝着两个法线中较长的倾斜。

与表面法线不同,指向特殊位置的向量,例如视图向量(view vector)和精确光的光向量(light vector),通常是不进行插值的。取而代之的是,在像素着色器中插值后的表面位置将被用来计算这些向量。除了在任何情况下都需要在像素着色器中执行的归一化操作外,每个向量都会用向量减法运算,这是很快的。如果因为一些原因,需要对这些向量进行插值的话,不要事先对它们进行归一化。这会导致错误的结果,见图 5.11。

图 5.11 两个光向量间的插值。在左侧,在插值前将它们归一化将导致归一化后方向不正确。在右侧,对未归一化向量插值,得到了正确的结果。

之前我们有提到顶点着色器变换表面几何体到“合适的坐标系”。通过统一变量传递到像素着色器的相机与光源的位置,通常被应用程序变换到相同的坐标系。这样可以最大程度减少像素着色器将所有的着色模型向量带入相同的坐标空间的工作。但是究竟哪个坐标系是“合适”的呢?可能的答案包括全局世界空间以及相机的局部坐标系,或者更罕见的,是当前渲染模型的局部坐标系。这通常是基于系统性的考虑,例如性能,灵活性和简单性,为整个渲染系统做出选择。举个例子,如果渲染的场景预计包含大量的光源,那么就应该选择世界空间以避免光源位置的变换。或者,最好使用相机空间,这样可以更好地优化与视图向量相关的像素着色器操作,并且提高精确度。(第16.6节)

虽然大部分的着色器实现,包括我们将要讨论的案例实现,都遵循上述一般概述,但是总有例外。举个例子,一些应用程序出于美术风格的原因选择了基于逐图元着色计算的多面外观。这种风格被称为平面着色(flat shading)。如图 5.12 是两个平面着色的例子。

原则上,可以在几何着色器中执行平面着色(flat shading),但是近年来相关的实现通常是使用顶点着色器。这是通过将每个图元的属性与其第一个顶点相关联并禁用顶点值插值来完成的。禁用插值(可以为每个顶点值分别处理)将导致第一个顶点的值传递到图元中的所有像素。

图 5.12 风格使用平面着色的两个游戏:肯塔基 0 号路(Kentucky Route Zero,上图)与 癌症似龙(That Dragon, Cancer,下图)(上图由 Cardboard Computer 提供,下图由Numinous Games 提供

5.3.2 实现案例 Implementation Example

我们现在会展示一个着色模型实现的案例。正如之前提到的,我们正在实现的着色模型与来自公式 5.1 的扩展的 Gooch 模型是相似的,但是我们经过了修改以让其能够支持多个光源。它可以被描述为

\textbf{c}_{\textrm{shaded}}=\frac{1}{2}\textbf{c}_{\textrm{cool}}+\sum ^{n}_{i=1}(\textbf{l}\cdot \textbf{n})^{+}\textbf{c}_{\textrm{light}_{i}}(s_{i}\textbf{c}_{\textrm{highlight}}+(1-s_{i})\textbf{c}_{\textrm{warm}}),\;\;\;\;\;\;\;\;\;\;(5.19)

通过以下中间计算:

\\ \\\textbf{c}_{\textrm{cool}}=(0,0,0.55)+0.25\textbf{c}_{\textrm{surface}}, \\\textbf{c}_{\textrm{warm}}=(0.3,0.3,0)+0.25\textbf{c}_{\textrm{surface}}, \\\textbf{c}_{\textrm{highlight}}=(2,2,2),\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;(5.20) \\\textbf{r}_{i}=2(\textbf{n}\cdot\textbf{l}_{i})\textbf{n}-\textbf{l}_{i}, \\s_{i}=(100(\textbf{r}_{i}\cdot\textbf{v})-97)^{\mp }. \\

此公式适合公式 5.6 中的多光源结构,为方便起见,在此重复:

\textbf{c}_{\textrm{shaded}}=f_{\textrm{unlit}}(\textbf{n},\textbf{v})+\sum ^{n}_{i=1}(\textbf{l}_{i}\cdot\textbf{n})^{+}\textbf{c}_{\textrm{light}_{i}}f_{\textrm{lit}}(\textbf{l}_{i},\textbf{n},\textbf{v}).

在此案例中,lit 和 unlit 项具体为

\\f_{\textrm{unlit}}(\textbf{n},\textbf{v})=\frac{1}{2}\textbf{c}_{\textrm{cool}}, \\f_{\textrm{lit}}(\textbf{l}_{i},\textbf{n},\textbf{v})=s_{i}\textbf{c}_{textrm{highlight}}+(1-s_{i})\textbf{c}_{\textrm{warm}},\;\;\;\;\;\;\;\;\;\;(5.21)

调整冷色的 unlit 贡献值,使得结果看起来更像原始方程。

在大部分通常的渲染应用程序中,材质球属性的变化值诸如 \textbf{c}_{\textrm{surface}} 会被存储在顶点数据,或者,更普遍的做法是存在纹理中(第六章)。然而,为了让这个案例的实现保持简单。我们会假设在整个模型中 \textbf{c}_{\textrm{surface}} 是一个常数。

此实现方案会使用着色器的动态分支功能去循环处理所有的光源。然而尽管这种直接的方法可以很好地处理还算简单的场景,但是它对于庞大、具有复杂几何体,且拥有许多光源的场景并不合适。有效处理大量光源的渲染技术将会在第 20 章详细介绍。并且,为了简单起见,我们只支持一种类型的光源:点光源。虽然这个实现方案是相当简单的,但是它遵循了我们之前提到的最佳实践。

(注:“最佳实践”应该是指前文中“然而在实践中,这种混合实现通常不是最佳的。着色模型的线性变化部分往往在计算上花费最少,并且以这种方式拆分着色计算往往会增加相当多的开销,例如重复计算和额外的变化输入,从而导致弊大于利。”)

着色模型并不是单独实现的,而是在更大的渲染框架环境(context)中实现。该案例在一个简单的 WebGL 2 应用程序中实现,修改自Tarek Sherif [1623] 的“Phong-shaded Cube”WebGL 2 案例,但是其他更复杂的框架也是运用相同的原则。

(注:context 在很多书籍中译为“上下文”,对于初学者会很费解,个人觉得译为“语境”、“环境”更好理解)

我们将讨论应用程序调用的 GLSL着色器代码和 JavaScript WebGL 的一些示例。这里的目的并不是讲述 WebGL API 的细节,而是要展示一般的实现原理。我们将以“由内到外”的顺序来讲解实现过程,首先是像素着色器,然后是顶点着色器,最后是应用程序侧的图形 API 调用。

着色器源文件应包含着色器输入与输出的定义,这样的着色器代码才是正确的。正如我们在第 3.3 节谈到的,使用 GLSL 术语,着色器输入会分为两类。其中之一就是统一输入集,它有着应用程序所设置的值,并且在一个绘制调用(draw call)中保持不变。第二种类型由变化的输入组成,它可以在着色器调用(像素或顶点)之间改变。以下是 GLSL 语言中像素着色器的各种输入及其输出的定义:

in vec3 vPos ;
in vec3 vNormal ;
out vec4 outColor ;

(注:最后一句直译太冗长拗口了,直接意译,原文 Here we see the defifinitions of the pixel shader’s varying inputs, which in GLSL are marked in, as well as its outputs:

像素着色器有单独的输出,其内容为最终的着色颜色。像素着色器的输入与顶点着色器的输出相匹配,顶点着色器的输出在被输入到像素着色器之前会在整个三角面进行插值。像素着色器有两个不同的输入:表面位置与表面法线,且这两者都是在应用程序的世界空间坐标系内。当然,统一输入的数据数量还有很多,为了简洁,我们仅展示这两个的定义,且这两者都是与光源相关的:

struct Light {
    vec4 position ;
    vec4 color ;
};
uniform
Real-Time Rendering 4th Edition全文翻译 - 第2 图形渲染管线(下)2.4 ~ 2.6(20200720翻新)
西河某人的博客
11-26 6054
实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第2图形渲染管线Chapter 2The Graphics Rendering Pipeline 2.4光栅化阶段 Rasterization 给定经过变换和投影的顶点及其关联的着色数据之后(全部来自几何处理),下一阶段的目标是查找要渲染的图元(例如三角形)内的所有像素。我们称这种过程......
Real-Time Rendering 4th Edition 全彩892M百度网盘下载地址
11-12
Real-Time Rendering 4th Edition 全彩892M百度网盘下载地址
Real-Time Rendering 4th Edition高清全彩版
04-20
Real-Time Rendering 4th Edition(实时渲染第4版) 高清全彩版,图形学/游戏方向实时渲染经典书籍推荐,仅供学习使用。百度网盘下载链接永久有效。
实时渲染第三版文摘要电子书教程
最新发布
gitblog_00990的博客
08-21 384
实时渲染第三版文摘要电子书教程 Real-Time-Rendering-3rd-CN-Summary-Ebook:blue_book: 电子书 -《Real-Time Rendering 3rd》提炼总结 | 全书共9万7千余字。你可以把它看做文通俗版的《Real-Time Rendering 3rd》,也可以把它看做《Real-Time Rendering 3rd》的解读版与配套学习伴侣,...
实时渲染第四版(文社区版)
morakito的博客
11-22 795
Real-Time Rendering 4th》 (RTR4) 翻译,非官方版本;本翻译版涵盖了RTR4的第1-第26的内容。
Real-Time Rendering 4th Edition完整版 全彩 892MB
09-12
Real-Time Rendering 4th Edition完整版 全彩 pdf 892MB 这里挂的是百度云链接
Real-Time Rendering, Fourth Edition PDF
09-02
Real-Time Rendering, Fourth Edition 实时渲染最新版 第四版PDF,下载地址见文档....
Real-Time Rendering 4th Edition 全彩892M百度网盘下载地址.7z
06-27
Real-Time Rendering 4th Edition》是一本在计算机图形学领域具有极高权威的著作,专注于实时渲染技术。实时渲染是现代计算机图形学的一个关键领域,尤其在游戏开发、虚拟现实、可视化应用等方面发挥着重要作用...
Real-Time Rendering 4th Edition 实时渲染第四版 第六 纹理的处理(Texturing)
xcinkey的博客
02-17 2538
在对渲染的光照处理有了一个初级的认识之后,就可以通过各种各样的细节来完善渲染表现效果,纹理处理技术就是其使用最广泛且最出效果的技术之一。在表现模型的细节时,往往并没有那么多实时的渲染资源可供使用,这时图形工作者们的智慧开始闪耀,将实时的计算转换为对已有的静态数据的读取和加载,渐渐形成这么一条行业的通用做法,或者说——规范。
Real-Time Rendering Fourth Edition
01-09
附件为百度网盘链接。 Real-Time Rendering Forth Edition 2018年最新第四版,实时计算机图形学百科全书全新版本,图形学必备,完美pdf版本,非扫描版,可以选择字体,强烈推荐。文件较大,将近1G。
Real-Time Rendering 4th Edition 全彩892M百度网盘下载地址.txt
05-28
Real-Time Rendering 4th Edition 全彩892M百度网盘下载地址。。。。。。。。。。
Real-Time Rendering 4th Edition全文翻译 - 第7 阴影(上)7.1 ~ 7.3
西河某人的博客
10-19 1399
实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第7 阴影Chapter 7Shadows “所有的变化,所有的魅力,所有的美丽 生活是由光与影组成的。” —托尔斯泰 阴影对于创建真实的图像以及为用户提供有关对象放置感的视觉提示非常重要。本重点介绍计算阴影的基本原理,并介绍最重要和最受欢迎的实时算法。我们还将简要讨论不太流行但体现重要原理的方法。在本,我们不会花时间讨论所有的选择和方法,因为已有两本全面的书深入研究了阴影领域 [412,190...
21年CV必读-实时3D渲染入门到精通-中文版
lqfarmer的博客
04-11 1180
本书介绍 在实时渲染和计算机图形学领域,《Real-Time Rendering》系列书籍一直备受推崇。有人说,它 是实时渲染的圣经, 也有人说,它是绝世武功的目录。其实《Real-Time Rendering》 很像一整本图形学主流知识体系的论文综述, 它涵盖了计算机图 形和实时渲染的方方面面,可做论文综述合集了解全貌,也可作案头工具书日后查用。正因如此, 初学者直接一字一句读它, 其实多少学习坡度会比较陡峭。而在了解了对应内容的 大概概念之后,通过检索资料来进行延伸学习,或者在书介绍晦涩...
Real-Time Rendering 4th Edition全文翻译 - 第4 变换()4.3 ~ 4.4
西河某人的博客
04-26 4284
实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第4 变换Chapter 4Transforms 4.3 四元数Quaternions 四元数是复数的扩展,尽管它是威廉·罗恩·汉密尔顿爵士(Sir William Rowan Hamilton)于1843年发明的,但直到1985年,Shoemake [1633]才将它们引入计算机图形学领...
Real-Time Rendering 4th 译文《三 图形处理单元》
qq_37983392的博客
05-02 753
第三组 图形处理单元
Real-Time Rendering 4th 译文《四 坐标变换 上 》
qq_37983392的博客
05-05 537
Real-Time Rendering 4th 译文《四 坐标变换》
写文章

热门文章

  • p5.js入门教程(1) p5.js简介 与 基本形状绘制 37016
  • Unity Shader特效:模型溶解、燃烧 17933
  • 《Real-Time Rendering 4th Edition》全文翻译 - 第1章 引言 12165
  • p5.js入门教程(4) 鼠标交互 9185
  • Unity Shader特效:人物模型动态流动光特效 8315

分类专栏

  • 计算机图形学 20篇
  • 个人日记 1篇
  • p5.js 8篇
  • 算法研究 2篇
  • Unity开发 14篇
  • 游戏AI 1篇
  • C# 1篇
  • Shader 11篇

最新评论

  • p5.js可以做什么 (1):创意动态画板 Floating Light

    哈莉奎茵: 请问你最后打开了吗

  • 关于 RenderTexture 半透明粒子特效无法显示以及后续各类神奇问题的终极解决方案(大概)

    风生水虎: 就你这个有用 可惜就是 改了后 修改image上的color就没用了。

  • 《Real-Time Rendering 4th Edition》全文翻译 - 第3章 图形处理单元(GPU)(上)3.1 ~ 3.3

    一_叶子: 这一章好多名词都没见过,看的云里雾里的

  • 《Real-Time Rendering 4th Edition》全文翻译 - 第2章 图形渲染管线(上)2.1 ~ 2.3(20200720翻新)

    一_叶子: perspective division 翻译成透视除法会不会更好些

  • 《Real-Time Rendering 4th Edition》全文翻译 - 第2章 图形渲染管线(上)2.1 ~ 2.3(20200720翻新)

    一_叶子: 翻译的很好,真的是太感谢博主了

最新文章

  • 《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(下)15.3 ~ 15.5
  • 《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(上)15.1 ~ 15.2
  • 《Real-Time Rendering 4th Edition》全文翻译 - 第7章 阴影(下)7.7 ~ 7.10
2021年2篇
2020年18篇
2019年15篇
2018年11篇
2017年7篇
2015年1篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家福建动物玻璃钢雕塑市场重庆户内玻璃钢雕塑优势玻璃钢定制雕塑安庆玻璃钢雕塑多少钱绍兴人物玻璃钢雕塑安装太原小品系列玻璃钢雕塑定制六安玻璃钢雕塑价钱黄冈玻璃钢雕塑浮雕厂天津玻璃钢动物雕塑供应商浙江欧式玻璃钢雕塑定制蚌埠校园玻璃钢雕塑价格济南欧式玻璃钢雕塑市场洛阳玻璃钢雕塑价格报价梅州玻璃钢花盆花器新密玻璃钢雕塑价格四川商场主题创意商业美陈建湖玻璃钢花盆花器北京室内玻璃钢花盆南宁佛像玻璃钢雕塑销售电话云南个性化玻璃钢雕塑设计常德公园玻璃钢雕塑厂家报价四方玻璃钢花盆花器安庆商场节庆美陈宝安玻璃钢造型雕塑呈贡玻璃钢雕塑加工厂贵不贵婴儿玻璃钢雕塑聊城玻璃钢卡通雕塑定制运城玻璃钢马雕塑南昌玻璃钢雕塑销售厂家秦皇岛玻璃钢雕塑定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化