|
|
//在win32控制台方式下编写程序
//下面是绘制球体的代码
void display()
{
//清空颜色缓存
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-5.0,5.0,-5.0,5.0,0.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
//绘制坐标轴
glColor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
glVertex3f(0.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,10.0,0.0);
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,0.0,10.0);
glEnd();
//绘制球体
glutSolidSphere(2.0,100,10);
glutSwapBuffers();//交换缓存
}
//下面响应鼠标点击的函数
void mouse(int button,int state,int x,int y)
{
float point[1];
if(state == GLUT_DOWN)
{
glReadBuffer(GL_DEPTH);
glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,point);
printf("%f\n",point[0]);
}
}
//作用是将鼠标点击点对应的深度值从深度缓存中读取,然后显示这个值。当鼠标点击
//在球体上,这个值小于1.0,正常
//但是下面的情况就出现了问题
//当我不使用glut库中给定的物体,而是自己绘制一个物体时,取到的深度值总是1.0,
//也就是背景的深度值。我估计是我绘制的方法有问题。各位帮忙看看问题在什么地方
//下面是我绘制的物体的代码,这部分代码代替原先的glutSolidSphere(2.0,100,10);
//是一个正四面体
float points[4][3];
//四顶点颜色分别是红色,绿色,蓝色,白色
float colors[4][3] = {{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0,},{1.0,1.0,1.0}};
int i;
//设置四顶点的坐标
for(i = 0; i < 3; i++)
{
points[0] = 3.0 * cos(i * 120.0 * PI / 180.0);
points[2] = 3.0 * sin(i * 120.0 * PI / 180.0);
points[1] = 0.0;
}
points[3][0] = points[3][2] = 0.0;
points[3][1] = 3.0 * sqrt(2.0);
//绘制正四面体
glBegin(GL_POLYGON);
//底面
glColor3fv(colors[2]);
glVertex3fv(points[0]);
glVertex3fv(points[1]);
glVertex3fv(points[2]);
//侧面1
//glColor3fv(colors[1]);
glVertex3fv(points[0]);
glVertex3fv(points[3]);
glVertex3fv(points[1]);
//侧面2
//glColor3fv(colors[2]);
glVertex3fv(points[1]);
glVertex3fv(points[3]);
glVertex3fv(points[2]);
//侧面3
//glColor3fv(colors[3]);
glVertex3fv(points[2]);
glVertex3fv(points[3]);
glVertex3fv(points[0]);
glEnd();
还望各位多多指点! |
|