计算机仿真技术

相关函数

  1. glEnable(GL_DEPTH_TEST);

作用:1.会进行深度比较

  2.会根据当前绘制内容更新depth buffer

  1. VOID GLDepthFunc(GLenumfunc);
  1. 深度比较的方式:Func
  2. Func取:GL_NEVER,  GL_LESS, GL_LEQUAL, GL_EQUAL,

GL_GREATER, GL_NOTEQUAL,GL_GEQUAL,GL_ALWAYS

  1. Void glDepthMask(GLbooleanflag);
  1. 设置是否更新深度缓冲
  2. 如果不想更新深度,那么将flag设为false

4 .  glDisable(GL_DEPTH_TEST);

深度比较和更新深度缓冲这两个动作都不会发生

  1. 如果不想更新深度缓冲,只想比较,那可以:
  • glEnable(GL_DEPTH_TEST);

glDepthMask(false);

  1. 默认:
  • glDisable(GL_DEPTH_TEST);
  • glDepthMask(false);
  • glDepthFunc(GL_LESS);

   使用技巧:

  1. 预绘制
  1. 打开深度检测
  2. 绘制树林,记录其深度值到深度缓冲
  3. 保存绘制的树木图像
  1. 实时绘制
  1. 把预存的树木图像画到屏幕上,

glEnable(GL_DEPTH_TEST);

glDepthMask(false);

  1. 画树林里的物体,即:进行深度比较,但不更新深度缓存

如果不想比较深度值,只想更新深度缓冲怎么办?

  • glEnable(GL_DEPTH_TEST);
  • glDepthFunc(GL_ALWAYS);
  • glDepthMask(true);
  1. 模板缓冲(Stencil buffer)

相关函数:

  1. glEnable(GL_STENCIL_TEST);
  1. 进行模板检测
  2. 更新模板缓冲
  1. Void glStencilFunc(GLenumfunc,  GLint ref,   GLuint mask);
  1. Func取:GL_NEVER,  GL_LESS, GL_LEQUAL, GL_EQUAL,

GL_GREATER, GL_NOTEQUAL,GL_GEQUAL,GL_ALWAYS

  1. 到底是谁和谁作比较?

    Ref值和当前屏幕上的像素所对应的模板缓冲中的值进行比较

  1. 模板缓冲中的值是怎么来的?

需要你在第一遍绘制时画入模板缓冲中

  1. Mask是干什么的?

比较前,ref和模板值都会与mask进行and操作。即:mask值可以控制ref和模板的哪一位进行比较操作

  1. void glStencilOp(GLenumfail , GLenum zfail, GLenum zpass );
  1. 设定如何更新模板缓冲
  2. Fail:片元没有通过模板测试时所执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值