http://zhidao.baidu.com/question/368299839.html&__bd_tkn__=6aa9196c746cd3357f1eec74aeb127b3950291e48078338d51fed8133ea5c69d362ad36bb4bcda3b39bb3949f6bbe47087ac3af56e60b1f4e7eb60157b5af530946ea1fb570f03de0125270dd437ba784d759374792fc88ea54d4375005c3b5bc4610f424abcdaaaef7efdaccbdc8d02c93122f54dad

初始化函数   
GL.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //设置清除颜色
GL.glViewport(0, 0, this.Bounds.Width, this.Bounds.Height);
GL.glMatrixMode(GL.GL_PROJECTION);
GL.glLoadIdentity();
GL.gluPerspective(90.0f, 1.0 * this.Width / this.Height, 0, 200);
GL.glMatrixMode(GL.GL_MODELVIEW);
GL.glLoadIdentity();
GL.gluLookAt(0.0, 0.0,12.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //眼睛位置 绘制函数 GL.glEnable(GL.GL_DEPTH_TEST);
GL.glDepthMask((Byte)GL.GL_TRUE); GL.glDepthFunc(GL.GL_LESS); double d1 = 8.6;
double d2 =0.5; GL.glClear(GL.GL_COLOR_BUFFER_BIT|GL.GL_DEPTH_BUFFER_BIT); GL.glColor3d(1.0, 0.0, 0.0);
GL.glutSolidSphere(0.6, 40, 32); GL.glTranslatef(0.0f, 0.0f, 5.0f);
GL.glColor3d(0.0, 1.0, 0.0);
GL.glutSolidSphere(1.0, 40, 32); 我想用 绿球完全挡住红球,就是红球看不见。但是上面代码,绿球中间显示红球。不知为什么。
我实在C#下用的openGL。我感觉好像是深度缓冲区的值没有变,或者两次绘制时深度缓冲区的值一样,但是我已经使用了 GL.glDepthMask((Byte)GL.GL_TRUE); 我把 GL.glDepthFunc(GL.GL_LESS); 改成小于等于就可以覆盖掉红球
分享到:

 
举报| 2012-01-31 12:16

 

提问者采纳

 
第一:GL.glDepthFunc(GL.GL_LESS); //opengl中这是默认值,不必多此一举

第二:GL.gluPerspective(90.0f, 1.0 * this.Width / this.Height, 0, 200);
这意味着:
投影矩阵=
0.75 0 0 0
0 1 0 0
0 0 1 0
0 0 0 0 <--决定计算出来的w恒为0 也就是说,世界坐标(x,y,z)->扩展4元(x,y,z,1)->视图坐标(x',y',z',1)(glLookat决定视图矩阵
), 最后转化成齐次坐标或者clip坐标(x'',y'',z'',w=0)
判断重叠的点的深度。
显然 z1''/w ==z2''/w (大小当然是int类型的最大值),两个值相同,且红球绘制在先,所 以绿球没办法遮挡红球。因为绿球深度总是=红球深度,在GL_LEST的情况下。 当你改为GL_LEQUAL时,红球先绘制,绿球因为深度值等于红球的,就写入深度缓冲。红球对应的片断都会被剔除掉。自然就只有绿球了。 3)所以正确的做法:
gluPerspective()函数 中将near由0,改成1~6就可以了。

openGL深度缓冲区问题的更多相关文章

  1. [译]OpenGL像素缓冲区对象

    目录概述创建PBO映射PBO例子:Streaming Texture Uploads with PBO例子:Asynchronous Readback with PBO 概述 OpenGL ARB_p ...

  2. OpenGL模板缓冲区与模板测试

    原文地址:http://www.blogjava.net/qileilove/archive/2014/01/23/409269.html 帧缓冲区有许多缓冲区构成,这些缓冲区大致分为: 颜色缓冲区: ...

  3. OpenGL顶点缓冲区对象

    [OpenGL顶点缓冲区对象] 显示列表可以快速简单地优化立即模式(glBegin/glEnd)的代码.在最坏的情况下,显示列表的命令被预编译存到命令缓冲区中,然后发送给图形硬件.在最好的情况下,是编 ...

  4. OpenGL顶点缓冲区对象(VBO)

    转载 http://blog.csdn.net/dreamcs/article/details/7702701 创建VBO        GL_ARB_vertex_buffer_object 扩展可 ...

  5. opengl模板缓冲区

    相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制.这里的过滤技术也就是我们的一个控制方法,主 ...

  6. OpenGL中的深度、深度缓存、深度测试及保存成图片

    1.深度 所谓深度,就是在openGL坐标系中,像素点Z坐标距离摄像机的距离.摄像机可能放在坐标系的任何位置,那么,就不能简单的说Z数值越大或越小,就是越靠近摄像机. 2.深度缓冲区 深度缓冲区原理就 ...

  7. OpenGL缓冲区

    OpenGL缓冲区 颜色缓冲区 OpenGL时,先是在一个缓冲区中完毕渲染,然后再把渲染结果交换到屏幕上. 我们把这两个缓冲区称为前颜色缓冲区(屏幕)和后颜色缓冲区.在默认情况下,OpenGL命令是在 ...

  8. OpenGL学习脚印:深度測试(depth testing)

    写在前面 上一节我们使用AssImp载入了3d模型,效果已经令人激动了.可是绘制效率和场景真实感还存在不足,接下来我们还是要保持耐心,继续学习一些高级主题,等学完后面的高级主题,我们再次来改进我们载入 ...

  9. OpenGL超级宝典笔记——深度纹理和阴影 【转】

    目录[-] 光源视角 新型的纹理 深度纹理的大小 首先绘制阴影 然后是光照 投影阴影贴图 阴影比较 之前我们介绍过简单的把物体压平到投影平面来制造阴影.但这种阴影方式有其局限性(如投影平面须是平面). ...

随机推荐

  1. 3、springboot配置文件占位符

    RandomValuePropertySource:配置文件中可以使用随机数 ${random.value}.${random.int}.${random.long}.${random.int(10) ...

  2. Android 渗透小知识点

    客户端用于 ADB 通信的默认端口始终是 5037,设备使用从 5555 到 5585 的端口 adb devices用于显示所有已连接设备, 有时候会出现一些问题, 这时候需要使用adb kill- ...

  3. Android面试收集录7 AsyncTask详解

    1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线 ...

  4. 读json文件发生错误,所遇到的坑

    当我们生产者生产json 文件的时候   消费时用JSON读文件时,如下: val values = kafkardd.map(t=>JSON.parseObject(t._2)) 如果发生以下 ...

  5. 手把手教你如何逐步安装OpenStack

    [TechTarget中国原创] 尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方.因此在Ubuntu上安装OpenStack的过程当中 ...

  6. Xcode 代码提示功能失效

    前言: 以前好像很少碰到Xcode中代码提示出问题的情况,最近经常遇到这个问题.没有了Xcode的智能提示,发现我已完全不会写代码了. 本来想吐槽下万恶的baidu,鉴于百度前端时间的各种(贴吧.竞价 ...

  7. 示例解读Java的跨平台原理

    首先简单的解释一下Java跨平台的特征,相当于说写一个Java程序论述上可以运行在不同的操作系统平台上面(此处的平台我们就简单的看成是操作系统平台).下面我们用一些事例来说明它的好处. 我们先了解一些 ...

  8. 《Cracking the Coding Interview》——第8章:面向对象设计——题目5

    2014-04-23 18:42 题目:设计一个在线阅读系统的数据结构. 解法:这题目太大了,我的个亲娘.显然你不可能一次加载一整本书,做到单页纸加载的粒度是很必要的.为了读书的连贯效果,预取个几页也 ...

  9. [转]赵桐正thinkphp教程笔记

    原文:赵桐正thinkphp教程笔记 ,有修改 常用配置 常用配置config.php: <?php return array( //'配置项'=>'配置值' 'URL_PATHINFO_ ...

  10. 【Python】重定向 Stream 到文件

    Python 系统模块 sys 中有三个变量 stdin . stdout 与 stderr ,分别对应标准输入流.输出流与错误流.stdin 默认指向键盘, stdout 与 stderr 默认指向 ...