[問題] OpenGL 深度緩衝
應該要在後面被擋住的東西
卻還是會因為後繪製而蓋住先畫的東西
以下是程式碼
#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
→
02/07 10:34, , 1F
02/07 10:34, 1F
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章