游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4061|回复: 7

openGL 消隐问题

[复制链接]

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2008-9-23 10:39:00 | 显示全部楼层 |阅读模式
这是一个困扰我达半年之久的问题,使用深度测试后不仅不能消隐,而且还带有闪烁。程序源代码如下,可以编译运行,望各位大侠不吝赐教。
#include <math.h>
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
static GLfloat angle=0;
static GLfloat centerx=0,centery=0,centerz=0,eyex=0,eyey=0,eyez=2;


void Init(void)
{
glClearColor(0,0,0,1.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable (GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(2 * sin((180/3.141592654)*angle + 3.141592654),eyey,-2 * cos((180/3.141592654)*angle +3.141592654),0,0,0,0.0,1.0,0.0);


glRotatef(angle,0,1,0);
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glVertex3f(1,1,0);
glVertex3f(1,-1,0);
glVertex3f(-1,-1,0);
glVertex3f(-1,1,0);
glEnd();

glBegin(GL_POLYGON);
glColor3f(0.0,1.0,0.0);
glVertex3f(0,1,-1);
glVertex3f(0,1,1);
glVertex3f(0,-1,1);
glVertex3f(0,-1,-1);
glEnd();
glutSwapBuffers();
}

void spinDisplay()
{
angle += 0.00001;
glutPostRedisplay();
}

void reshape(int w,int h)
{
glViewport(0,0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,(GLfloat)w/(GLfloat)h,0.0,5.0);
}

void mouse(int button, int state, int x, int y)
{
switch(button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc(spinDisplay);
break;

case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc(NULL);
break;

default:
break;
}
}

int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("depthTest");
Init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-9-23 12:02:00 | 显示全部楼层

Re:openGL 消隐问题

程序说明:
在XOY 和 YOZ平面各画一个正方形,两个正方形的对称轴都是Y轴,即两个正方形在Y轴相交。视点中心在坐标原点,即centerx = centery = centerz = 0;观察点绕以坐标原点为中点,半径为2的圆在XOZ平面内做圆周运动。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-9-23 15:41:00 | 显示全部楼层

Re: openGL 消隐问题

void reshape(int w,int h)
{
glViewport(0,0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,(GLfloat)w/(GLfloat)h,0.0,5.0);
}

你把红色部分改成 1.0 试试吧.[em10]

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2008-9-28 10:05:00 | 显示全部楼层

Re:openGL 消隐问题

gluPerspective(90,(GLfloat)w/(GLfloat)h,0.0,5.0);

这视角也太..............
我个人建议
gluPerspective(45,(GLfloat)w/(GLfloat)h,0.1,5.0);

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-10-9 09:45:00 | 显示全部楼层

Re:openGL 消隐问题

谢谢关心,问题正如二楼所说。谢谢

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-10-12 10:17:00 | 显示全部楼层

Re: Re:openGL 消隐问题

aiming0420: RepenGL 消隐问题

谢谢关心,问题正如二楼所说。谢谢

[em10]二喽?
正如二楼所说?
二楼好像是你自己哦.[em10]

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-24 19:09:00 | 显示全部楼层

Re:openGL 消隐问题

楼上的回答正确,呵呵

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-24 19:38:00 | 显示全部楼层

Re:openGL 消隐问题

gluLookAt(2 * sin((180/3.141592654)*angle + 3.141592654),eyey,-2 * cos((180/3.141592654)*angle +3.141592654),0,0,0,0.0,1.0,0.0);
这个地方,楼主是怎么推出来的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 20:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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