OpenGL을 사용하여 화면에 100 포인트를 그려야합니다. 즉, 프로그램을 실행할 때마다 화면에 100 개의 GL_POINTS가 무작위로 배치됩니다. 현재 화면에 남아있는 지점은 하나 뿐이며 위치는 이전에 지정되었습니다. 그러나, 나의 무작위 점은 단지 짧은 기간 동안 나타났다, 그리고, 그들은 사라진다. 나는 그것을 실현하기 위해 무엇을 놓쳤는 지 모른다. 아래는 내 코드입니다OpenGL에서 무작위 포인트 생성
#include <stdlib.h>
#include <GL/freeglut.h>
#include <math.h>
GLfloat cameraPosition[] = { 0.0, 0.2, 1.0 };
/* Random Star position */
GLfloat starX, starY, starZ;
GLint starNum = 0;
void myIdle(void){
starNum += 1;
/* Generate random number between 1 and 4. */
starX = 1.0 + static_cast <float> (rand())/(static_cast <float> (RAND_MAX/3.0));
starY = 1.0 + static_cast <float> (rand())/(static_cast <float> (RAND_MAX/3.0));
starZ = 1.0 + static_cast <float> (rand())/(static_cast <float> (RAND_MAX/3.0));
/* Now force OpenGL to redraw the change */
glutPostRedisplay();
}
// Draw a single point
void stars(GLfloat x, GLfloat y, GLfloat z){
glBegin(GL_POINTS);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(x, y, z);
glEnd();
}
// Draw random points.
void myDisplay(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLoadIdentity();
gluLookAt(cameraPosition[0], cameraPosition[1], cameraPosition[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
/* They show up on the screen randomly but they disappear after starNum greater than 100 */
if (starNum < 100){
glPushMatrix();
stars(starX, starY, starZ);
glPopMatrix();
}
/* This point will remain on the screen. */
glPushMatrix();
stars(2.0, 2.0, 2.0);
glPopMatrix();
/* swap the drawing buffers */
glutSwapBuffers();
}
void initializeGL(void){
glEnable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glPointSize(2.0);
glOrtho(-4.0, 4.0, -4.0, 4.0, 0.1, 10.0);
glMatrixMode(GL_MODELVIEW);
}
void main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(1800, 1000);
glutInitWindowPosition(100, 150);
glutCreateWindow("Random points");
/* Register display function */
glutDisplayFunc(myDisplay);
/* Register the animation function */
glutIdleFunc(myIdle);
initializeGL();
glutMainLoop();
}
나는 무엇을 놓치고 있습니까?
무엇을 기대합니까? 'starNum <100'이라면 별을 그려야하며,이 조건이 더 이상 충족되지 않을 때 왜 사라지는 지 궁금하십니까? 나는 너의 놀람을 이해하지 못한다. –
화면에 100 점을 그려보고 싶습니다. 그 위치는 무작위입니다. 기본적으로 모든 별이 화면에 남아 있기를 바랍니다. – zihaow
OpenGL은 씬 그래프 API가 아닙니다. 디스플레이 기능이 호출 될 때마다 모든 별을 그려야합니다. –