OpenGL学习笔记(七)

龙云尧个人博客,转载请注明出处。

CSDN地址:http://blog.csdn.net/michael753951/article/details/71511785

个人blog地址:http://yaoyl.cn/nehexue-xi-bi-ji-qi-2017-05-09-20-59/


我们在前六个部分已经尝试了nehe教程中1-8可得所有内容,接下来第七部分将实现一个简单的实验,这个实验将涵盖前面所有的内容,以作为一个前期总结。

前期准备

在实验之前,我们需要知道一个OpenGL中的基本概念。OpenGL中glEnable方法的使用。关于这个功能函数的使用以及参数设定,你可以点击【gl.glenable()介绍】以及【glEnable(GL_DEPTH_TEST) 有什么用?】进行查看。以下关于glenable的内容转载自上述第二篇博客。


在InitGL() 或者类似的初始化OpenGL的地方,会有glEnable(GL_DEPTH_TEST);

启用了之后,OpenGL在绘制的时候就会检查,当前像素前面是否有别的像素,如果别的像素挡道了它,那它就不会绘制,也就是说,OpenGL就只绘制最前面的一层。

当我们需要绘制透明图片时,就需要关闭它
glDisable(GL_DEPTH_TEST);
并且打开混合
glEnable(GL_BLEND);

而且还需要设置使用的透明度
glColor4f(1.0f,1.0f,1.0f,0.5f);
这样就是一半的显示了,设置为1就是不透明

glBlendFunc(GL_SRC_ALPHA,GL_ONE);
基于源像素Alpha通道值的半透明混合函数


在实验一以及后续的几个实验中,我们Enable的都是传入GL_DEPTH_TEST作为参数启用深度测试。并立刻在glEnable方法后面调用glDepthFunc(GL_LEQUAL);方法进行前景像素的显示设置。

这个概念在之前的实验中有所涉及,但是我们当时没有关注,这里我们将将其单独拿出来进行分析。本部分以下部分均为转载。转载来源为【glDepthFunc】

函数原型:

void glDepthFunc(GLenum func);

函数功能:

指定“目标像素与当前像素在z方向上值大小比较”的函数,符合该函数关系的目标像素才进行绘制,否则对目标像素不予绘制。

参数说明:

func指定深度比较函数,GL_NEVER,GL_LESS,GL_EQUAL,GL_LEQUAL,GL_GREATER,GL_NOTE_QUAL,GL_GEQUAL,GL_ALWAYS,缺省值GL_LESS,

GL_NEVER,不通过(输入的深度值不取代参考值)

GL_LESS,如果输入的深度值小于参考值,则通过

GL_EQUAL,如果输入的深度值等于参考值,则通过

GL_LEQUAL,如果输入的深度值小于或等于参考值,则通过

GL_GREATER,如果输入的深度值大于参考值,则通过

GL_NOTE_QUAL,如果输入的深度值不等于参考值,则通过

GL_GEQUAL,如果输入的深度值大于或等于参考值,则通过

GL_ALWAYS,总是通过(输入的深度值取代参考值)

描述:

   通过目标像素与当前像素在z方向上值大小的比较是否满足参数指定的条件,来决定在深度(z方向)上是否绘制该目标像素。该函数只有启用“深度测试”时才有效,参考glEnable(GL_DEPTH_TEST)和glDisable(GL_DEPTH_TEST)

代码分析

前期准备能够帮助我们更好的理解作者在代码中的方法调用,,也能帮助我们更加深入的了解OpenGL的运行机制。我们接下来探讨本次实验中的实现方式。

根据Lesson1课程给我们大基建好的框架结构以及我们整理出来的那张结构图,我们可以快速理解本次实验代码。

首先定义了一个stars结构体,用来存放每一个星星的RGB值,与中心点的距离以及选装角度。

typedef struct              // Create A Structure For Star
{
    int r, g, b;            // Stars Color
    GLfloat dist,           // Stars Distance From Center
        angle;          // Stars Current Angle
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值