游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3077|回复: 4

启用深度缓冲居然就看不到图像了

[复制链接]

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-1-9 21:47:00 | 显示全部楼层 |阅读模式
#pragma warning(disable: 4786)

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <glut.h>
#include <memory>
#include <functional>
#include <GL/glaux.h>

#pragma comment(lib, "glaux.lib")

#include "myut/ASSERT.H"
#include "3ds/LOADER.H"
#include "3ds/M3D.H"
#include "3ds2gl/MY3DS2GL.H"

using namespace my3ds;
using namespace my3ds2gl;
using namespace std;

static Loader                myld;
static M3D                        m3d;
static GLuint                dislist;        //display list
static GLuint                listnum;        //number of display list
static ListRange                        lr;        //display list range
typedef        vector<AUX_RGBImageRec*>        IMGS;        //for debug
static        IMGS                        vImgs;        //for debug

void display(void)
{
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        static int distance = 0;
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(0.0, 0.0, 500.0,  0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
        glEnable(GL_TEXTURE_2D);
        glBegin(GL_QUADS);
        {
                glTexCoord3f(0.0, 0.0, 0.0);
                glVertex3f(-100.0, -100.0, 1.0);

               
                glTexCoord3f(1.0, 0.0, 0.0);
                glVertex3f(100.0, -100.0, 1.0);

               
                glTexCoord3f(1.0, 1.0, 0.0);
                glVertex3f(100.0, 100.0, 1.0);

               
                glTexCoord3f(0.0, 1.0, 0.0);
                glVertex3f(-100.0, 100.0, 1.0);
        }
        glEnd();
        glFlush();
        glDisable(GL_TEXTURE_2D);
}

void init (void)
{
        glClearColor (0.0, 0.0, 0.0, 0.0);
        glShadeModel(GL_FLAT);
        glEnable(GL_DEPTH_TEST);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(60.0, 1.0, 0.0, 500.0);

        glMatrixMode(GL_MODELVIEW);
        glEnableClientState(GL_VERTEX_ARRAY);

        MDATA_t::MES&        mes = m3d.m_MG.m_MD.m_MES;
        for(MDATA_t::MES::iterator i=mes.begin(); i!=mes.end(); ++i)
        {
                AUX_RGBImageRec* pImg = auxDIBImageLoad(i->m_MT.m_MM.m_strName.c_str());
                vImgs.push_back(pImg);
        }

        unsigned int                unTex;
        glGenTextures(1,        &unTex);
        glBindTexture(GL_TEXTURE_2D, unTex);
       
        glPixelStorei (GL_UNPACK_ALIGNMENT, 1);        //only for debug
        gluBuild2DMipmaps(        GL_TEXTURE_2D,
                        3,
                        vImgs[0]->sizeX,
                        vImgs[0]->sizeY,
                        GL_RGB,
                        GL_UNSIGNED_BYTE,
                        vImgs[0]->data );
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
        glEnable(GL_TEXTURE_2D);
}

int main(int argc, char** argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
        glutInitWindowSize (250, 250);
        glutInitWindowPosition (100, 100);
        glutCreateWindow ("hello");
        myld.open(argv[1], m3d);
        init ();
        glutDisplayFunc(display);
        glutMainLoop();
        return 0;
}

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
 楼主| 发表于 2006-1-9 21:48:00 | 显示全部楼层

Re:启用深度缓冲居然就看不到图像了

在init()函数里面那个Enable(GL_DEPTH_TEST)去掉居然就能正常显示了,但是我肯定没有用其他平面盖住这个QUAD呀,真是奇怪。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
 楼主| 发表于 2006-1-9 22:08:00 | 显示全部楼层

Re:启用深度缓冲居然就看不到图像了

果然是这样,真是万分感谢。
没想到还是裁减平面出了问题,看来还是对openGL的基本规定没理解。
嗯,再次对azureyes表示感激。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
 楼主| 发表于 2006-1-9 22:14:00 | 显示全部楼层

Re:启用深度缓冲居然就看不到图像了

的确是我的问题,openGL programming guide上面明确说了near ,far参数必须是positive,我以前尝试了near设为0发现没问题,就没这方面想……

11

主题

136

帖子

142

积分

注册会员

Rank: 2

积分
142
QQ
发表于 2006-1-11 14:35:00 | 显示全部楼层

Re: Re:启用深度缓冲居然就看不到图像了

azureyes: Re:启用深度缓冲居然就看不到图像了

gluPerspective(60.0, 1.0, 0.0, 500.0);

近裁减平面不要写0吧,起码有大小


第三个参数是近截剪平面到视点的距离啊

我理解的是为0就是没有近截剪平面了(我没看过MSDN或官方资料)

[em5] [em5] [em5] [em5]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 05:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表