作者bill42362 (酒池肉林夜夜生科)
看板MacDev
标题[问题] OpenGL 深度缓冲
时间Thu Feb 7 10:33:46 2008
应该要在後面被挡住的东西
却还是会因为後绘制而盖住先画的东西
以下是程式码
#import <Cocoa/Cocoa.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#define WIDTH 800
#define HEIGHT 800
//static GLfloat angle = 0.0f;
// 太阳、地球和月亮
// 假设每个月都是30天
// 一年12个月,共是360天
static int day = 262; // day的变化:从0到359
void myDisplay(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
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, 50, 50);
// 绘制蓝色的“地球”
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, 50, 50);
// 绘制黄色的“月亮”
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, 50, 50);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
//glDepthMask(GL_TRUE); //这行要是不取消会无法通过 Debug
glutInitWindowPosition(200, 200);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("OpenGL Solar");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
感谢您看完本篇 !!
--
想你的时候 不一定能告诉你
如果不告诉你 也能会意
那我们就是有 真正的默契
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.195.92
1F:→ bill42362:对了 我是用 Xcode 编译的... 02/07 10:34