混合模式:

代码

示例是《Stage3D指南》中的直接弄出来的,可以通过点击键盘上的Q、W、E这3个按键,更换混合模式、模型和纹理,可以直观的查看不同混合模式的效果,住:下方的地形使用"context3D.setBlendFactors(Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO);"正常混合模式渲染,上方中心的模型使用特定的混合模式渲染。

深度测试(Z-Buffer):

使用Z-Buffer的话,GPU会把每个像素都设置到一个叫做深度缓冲的地方,最终会绘制到屏幕的像素是距离屏幕最近的像素,而不使用Z-Buffer的话,GPU会使用画家算法进行绘制,即后绘制的图像会覆盖先绘制的图像。

下面我们修改一下上面的例子来测试一下:

代码

首先我们之前的例子是先绘制地形再绘制上面的模型的,这样的话我们是否使用深度测试其实是看不出区别的,因为模型就是在地形的上方,所以我们需要将两个绘制顺序进行颠倒。

点击“R”键切换是否使用深度测试。如果不使用深度测试,那么模型是先绘制,地形是后绘制,所以模型位于地形的后方,使用深度测试则会判断像素距离屏幕的距离,最终呈现距离最近的像素,所以模型又回到上方了。

另外我们使用深度测试时,会发现混合模式好像出现了问题,全是黑色的方块!其实混合模式没有出现问题,而是我们的模型先绘制,所以混合颜色时缓冲中并没有颜色可以进行混合(如果先绘制地形,则会和地形的颜色混合),所以就出现了这个问题。

背面剔除:

用于提升渲染速度,开启后,看不见的一面不会进行绘制。

 context3D.setCulling(Context3DTriangleFace.NNONE);

增加性能:

  • 不透明的纹理绘制得更快;
  • 尽量避免重复绘制;
  • 尽量避免状态改变;
  • 使用更加简单的着色器;
  • 绘制更少的网格;

【Stage3D学习笔记续】真正的3D世界(三):纹理效果的更多相关文章

  1. 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程

    这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...

  2. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  3. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵

    如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...

  4. 【Stage3D学习笔记续】真正的3D世界(六):空间大战

    这就是书上的最终效果了,一个完整的空间大战游戏: 点击查看源码 这里并没有太多的新知识,所涉及的东西更多的是游戏开发方面的优化和技巧,下面我们大家一起来看看: 飞船: 类似粒子效果中的粒子创建方法,我 ...

  5. 【Stage3D学习笔记续】真正的3D世界(二):显示模型

    虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告 ...

  6. 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽

    还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...

  7. 【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形

    前面几个星期抽空用Starling做了一个打飞机的小游戏(所以没有接着看书了),准备面试时用的,结果面试还是没过%>_<%...这个游戏打算过几天全部开源了 那么接下来打算这周把<S ...

  8. 【Stage3D学习笔记续】真正的3D世界(五):粒子特效

    先看效果,按下空格键添加粒子特效: 一般而言粒子特效的实现都是比较复杂的,且不说实现粒子特效的编码和设计,光是编写一个粒子编辑器就不是简单的一件事,但是作者使用了很取巧的方式来完成,我们接下来深入代码 ...

  9. 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西

    我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...

随机推荐

  1. QT小技巧(书上没有的)

    1. Layout本身不能控制隐藏和显示,但是可以在外面专门套一个Widget,然后控制这个Widget就可以达到相应的效果了. 2. 空目录居然也存在 if (QDir(""). ...

  2. ConfigurationManager配置操作

    /// <summary> /// 配置信息维护 /// </summary> public class AppConfig { public static Configura ...

  3. ubuntu 解决依赖问题

    安装aptitude包管理器 然后用aptitude安装 sudo aptitude install ***

  4. 大四实习准备3_java多线程

    4.25.27无耻地懒散了.....26号陪女朋友去了.今天28号,继续加油! 2015-4-28 Java 多线程 (java中类不能多继承,可以多层继承:接口则都可以) 定义和创建: 方法一:继承 ...

  5. UVa 10048 (Floyd变形) Audiophobia

    题意: 给一个带权无向图,和一些询问,每次询问两个点之间最大权的最小路径. 分析: 紫书上的题解是错误的,应该是把原算法中的加号变成max即可.但推理过程还是类似的,如果理解了Floyd算法的话,这个 ...

  6. 以CTE表达式实现MSSQL的字符串分割函数

    ALTER     FUNCTION [dbo].[Split] (@sep varchar(2), @s varchar(512))RETURNS tableASRETURN (    WITH P ...

  7. LeetCode Intersection of Two Linked Lists (找交叉点)

    题意: 给两个链表,他们的后部分可能有公共点.请返回第一个公共节点的地址?若不重叠就返回null. 思路: 用时间O(n)和空间O(1)的做法.此题数据弱有些弱. 方法(1)假设两个链表A和B,用两个 ...

  8. linux下nagios的安装与部署

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  9. 【转】COCOS2D-X之不断变化的数字效果Demo

    我们在玩"天天爱消除"或"天天连萌"的时候,每玩一盘后会有一个游戏结果界面,上面有一个显示所得分数的效果.今天我们这个Demo就是要实现与之相近的效果. 一.我 ...

  10. UVAlive3662 Another Minimum Spanning Tree 莫队算法

    就是莫队的模板题 /* Memory: 0 KB Time: 1663 MS Language: C++11 4.8.2 Result: Accepted */ #include<cstdio& ...