乔治娜c罗水震:OpenGL水反射

我试图将一堆树木从森林反射到附近的湖中。我按照所有标准步骤使用模板缓冲区绘制反射。但是“水”似乎不允许看到下面的对象。这是我的功能:draw_sea()-绘制要反射的平面图,drawFigTree(fig_tree)-绘制下面的树木。问题在哪里?

void draw_mirror() 
{
    glEnable(GL_STENCIL_TEST);
    //glColorMask(0, 0, 0, 0);
    glDisable(GL_DEPTH_TEST);
    glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
    glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
    glDisable(GL_LIGHTING);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    draw_sea();
    glDisable(GL_BLEND);
    glEnable(GL_LIGHTING);
    glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
    glEnable(GL_DEPTH_TEST);
    glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
    glPushMatrix();
    glTranslatef(0.0, SEA_LEVEL, 0.0);
    glEnable(GL_CLIP_PLANE0);
    glClipPlane(GL_CLIP_PLANE0, clip_plane0 );
    glPopMatrix();
    glPushMatrix();
    glTranslatef(-25.0, 2*(-1), 0.0);
    glScalef(1.0, -1.0, 1.0);
    drawFigTree(fig_tree);
    glPopMatrix();
    glDisable(GL_CLIP_PLANE0);
    glDisable(GL_STENCIL_TEST);
}
2

混合不能与深度测试一起工作。要进行混合,您必须对可见表面进行远近排序。如果是水,则必须先绘制反射(就像在反射场景中“穿过”水面),然后绘制水。

1
    glDisable(GL_DEPTH_TEST);

您关闭深度测试是正确的。但是您必须turn off depth writes;否则,在渲染反射几何体时,您将污染深度缓冲区。

glDepthMask(GL_FALSE);

注意:不要忘记在渲染湖后重新打开深度写入。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(725)
Linux创建目录树:如何在 C++ /Linux中创建目录树
上一篇
安卓手机怎么玩ios游戏:安卓手机怎么连接远程机:(remote access your android phone)
下一篇

相关推荐

  • cvt变速箱结构图解:CVT变速箱的工作原理

    CVT变速箱是一种无级变速箱,它的结构由两个部分组成:输入轴和输出轴。输入轴由发动机驱动,输出轴将变速箱的输出转移到车轮上。输入轴上安装有一个可变的滑轮,它可以改变输入轴的传动比,从而改变变速箱的输出比。另外,输入轴上还安装有一个液压系统,它可以控制滑轮的位置,从而改变输入轴的传动比。…

    2023-04-02 04:00:04
    0 70 80
  • xcode代码格式化快捷键:使用Command + I快速格式化Xcode代码

    格式化的方法格式化的方法Xcode代码格式化快捷键:Option+Command+F…

    2023-07-13 12:44:06
    0 43 19
  • cv树洞柒夜事件CV树洞中的秘密与惊奇

    cv树洞柒夜事件是一个有趣的计算机视觉活动,它提供了一种新的方式来利用计算机视觉技术来探索和发现景观。它始于2020年7月,由一群热爱计算机视觉的研究者和开发者发起,他们希望通过使用机器学习技术来探索景观中的精彩之处。cv树洞柒夜事件的目标是使用机器学习技术来探索景观中的精彩之处,并利用这些发现来改善景观设计。参与者需要使用机器学习技术来探索景观,并利用这些发现来改善景观设计。参与者可以使用Python,OpenCV,TensorFlow等技术来完成任务,并将其发布在GitHub上。…

    2023-01-09 12:42:42
    0 64 11
  • win10怎么cmd打开设置:如何在Windows 10中使用CMD打开设置

    打开“开始”菜单,点击搜索框,输入cmd,然后按下回车键。在弹出的命令提示符窗口中,输入以下代码:start ms-:…

    2023-06-07 01:59:36
    0 16 19
  • win7安装cad2020:如何在Windows 7上安装AutoCAD 2020

    从官网下载CAD 2020的安装包,并双击安装文件;按照安装向导的提示,选择安装语言、安装位置和安装类型;…

    2023-09-28 00:41:59
    0 61 63
  • java protected关键字:使用protected关键字保护类成员的优点

    示例示例关键字是java中的修饰符,它可以修饰类、变量和方法。修饰类:修饰的类只能在同一个包内被访问,如果子类继承了修饰的父类,则子类可以在不同包内访问父类的成员。…

    2023-04-18 04:45:37
    0 97 13
  • codeblocks手机版下载一款强大的跨平台编程工具

    CodeBlocks是一款免费的、开源的、跨平台的C/C++ IDE,支持多种编程语言,可以用来编写、调试和编译代码。目前CodeBlocks的手机版本只支持Android系统,而且只支持C语言,不支持C++。…

    2023-06-25 04:48:50
    0 24 62
  • go和come的区别:去吧!来吧!改变你的未来

    示例示例go和come的区别:Go是一个动词,表示“去”的意思,指的是从一个地方到另一个地方的运动。Come是一个动词,表示“来”的意思,指的是从另一个地方到当前地方的运动。…

    2023-05-25 16:09:00
    0 65 39

发表评论

登录 后才能评论

评论列表(31条)