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. python-12正则表达式

    import re #re.search方法 re.search 扫描整个字符串并返回第一个成功的匹配. re.match('com', 'www.runoob.com') #匹配失败 None re ...

  2. Redis和Mecahe的简介

    Memcache介绍 概念:Memcache是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等. ...

  3. spider_main.py

    coding=UTF-8 import html_download import html_outputer import html_parser import url_maneger class S ...

  4. 20145202马超 《Java程序设计》第六周学习总结

    进程:是一个正在执行中的程序,每一个进程都有一个执行程序,该顺序是一个执行路径,或者说是一个控制单元. 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行. 一个进程至少有一线程. Java ...

  5. Win7更换锁屏和开机画面

    技术交流群:233513714 每次开机被Windows千年不变的开机画面和锁屏画面丑到的小伙伴们可以看过来,通过简单的几步就可以改掉系统默认的开机画面. 1.首先Windows+r键输入regedi ...

  6. CentOS7配置图形界面及设置vnc远程连接、windows远程桌面连接

    安装CentOS桌面 yum groupinstall "GNOME Desktop" 重启,进入终端,将启动模式变更为图形模式 systemctl set-default gra ...

  7. 随笔 —— 门徒 & 无限恐怖

    门徒 忧思缠身,所为何物 不知何人,可免世俗 每每朝暮,心无释处 悲从中来,如泣如诉 仁者存世,满怀悲苦 逝者如斯,追还无路 上天无门,开怀捧腹 无路偏行,我行我素 无限恐怖 饥寒苦难谁知故,日日行路 ...

  8. js学习日记-各种宽高总结(配图)

    1.窗口和浏览器 window.innerWidth.window.innerHeight   浏览器内部可用宽高 window.outerWidth.window.outerHeight   浏览器 ...

  9. scp 将数据从一台linux服务器复制到另一台linux服务器

    原文地址:http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html  完整内容参考原文! scp 是secure copy的简写,用于在 ...

  10. 巧用Fiddler代理来禁止资源缓存,从而达到每次都是从服务器加载最新的资源

    Fiddler ->  Rules ->  Performance  -> Disable Caching 直接设置禁用缓存,再在没有清除缓存功能的APP 中重新加载最新的页面, 每 ...