zoukankan      html  css  js  c++  java
  • glEnable(GL_DEPTH_TEST)的问题

    http://www.gameres.com/msg_195903.html

    在程序中加入glEnable(GL_DEPTH_TEST)之后显示就完全黑屏了,即使是清空了深度缓冲glClear(GL_DEPTH_BUFFER_BIT),也没用。
    但是加上glDepthFunc(GL_LEQUAL)之后就能正确显示了,如果加上glDepthFunc(GL_LESS)或者都不加也不能正确显示。
    程序如下:(我正在根据http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html这个教程学习opengl,这个程序是里面的一个例子。)

    #include "glut.h"
    // 太阳、地球和月亮
    // 假设每个月都是30天
    // 一年12个月,共是360天
    static int day = 70; // day的变化:从0到359
    void myDisplay(void)
    {
            glEnable(GL_DEPTH_TEST);
            //glClearDepth(1.0f);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glDepthFunc(GL_LEQUAL);  // 设置深度缓存


            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluPerspective(75, 1, 1, 400000000);
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
            gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1);

            // 绘制红色的“太阳”
            glColor3f(1.0f, 0.0f, 0.0f);
            glutSolidSphere(69600000, 20, 20);
            // 绘制蓝色的“地球”
            glColor3f(0.0f, 0.0f, 1.0f);
            glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
            glTranslatef(150000000, 0.0f, 0.0f);
            glutSolidSphere(15945000, 20, 20);
            // 绘制黄色的“月亮”
            glColor3f(1.0f, 1.0f, 0.0f);
            glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0f, 0.0f, -1.0f);
            glTranslatef(38000000, 0.0f, 0.0f);
            glutSolidSphere(4345000, 20, 20);

            glFlush();
    }
    int main(int argc, char *argv[])

    {
            glutInit(&argc, argv);

            glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

            glutInitWindowPosition(300, 200);

            glutInitWindowSize(400, 400);

            glutCreateWindow("第一个OpenGL程序");

            glutDisplayFunc(&myDisplay);

            glutMainLoop();

            return 0;

    }
    补充:又试验了下,加入glDepthFunc(GL_LEQUAL)后虽然能显示,但是深度缓冲没起作用,依然是后绘制的覆盖了先绘制的,而不是根据深度来显示。  在不加入glDepthFunc(GL_LEQUAL)时,通过改变day的值,改变月亮的位置,有时最后绘制的那个月亮能显示出来。

    哈哈,调试好了,我根据

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

    这个里面说的把gluPerspective(75, 1, 1, 400000000)改为了gluPerspective(75, 1, 10000, 400000000)就正常了。但是看不懂这个里面说的关于矩阵的内容。

  • 相关阅读:
    Python学习 day01打卡
    Python变量常量及注释
    Python基础简介
    「ubuntu」sudo命令卡住
    「ubuntu」sudo无密码
    「ubuntu」Ubuntu Recovery模式下只读问题
    「ubuntu」在Ubuntu Server 16.04 LTS下安装VMware Tools(转)
    「mysql」设置utf8编码
    「hive」hive2.3.0配置derby
    「hadoop」log4j参考
  • 原文地址:https://www.cnblogs.com/xuejinhui/p/4381001.html
Copyright © 2011-2022 走看看