首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL粒子系统

OpenGL粒子系统
EN

Stack Overflow用户
提问于 2011-03-10 04:17:17
回答 1查看 1.3K关注 0票数 3

我试图用OpenGl来模拟粒子系统,但我无法让它起作用,这就是我到目前为止所拥有的:

代码语言:javascript
复制
#include <GL/glut.h>
int main (int argc, char **argv){

  // data allocation, various non opengl stuff
  ............
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );
  glutInitWindowPosition(100,100);
  glutInitWindowSize(size, size);
  glPointSize (4);
  glutCreateWindow("test gl");
  ............
  // initial state, not opengl
  ............
  glViewport(0,0,size,size);
  glutDisplayFunc(display);
  glutIdleFunc(compute);
  glutMainLoop();


}

void compute (void) {

 // change state not opengl

  glutPostRedisplay();

}

void display (void) {

  glClear(GL_COLOR_BUFFER_BIT);
  glBegin(GL_POINTS);

  for(i = 0; i<nparticles; i++) {

    // two types of particles
    if (TYPE(particle[i]) == 1) glColor3f(1,0,0);
      else glColor3f(0,0,1);

    glVertex2f(X(particle[i]),Y(particle[i]));

  }

  glEnd();
  glFlush();
  glutSwapBuffers();

}

几秒钟后,我得到了一个黑色窗口(窗口之前只有标题栏)。我哪里出问题了?

LE:每个粒子的x和y坐标在区间内(0,大小)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-10 15:13:23

尝试在代码中进行以下更改:

file

  • glPoinSize调用末尾的
  • 移动主函数属于显示函数
  • ,然后您应该提供一个函数来处理窗口glutReshapeFunc的大小调整(Reshape),类似于

代码语言:javascript
复制
    void reshape(int w, int h)
    {
        glViewport(0, 0, (GLsizei) w, (GLsizei) h);  
        glMatrixMode(GL_PROJECTION);  
        glLoadIdentity();  
        gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);  
    }

  • glFlush是从glutSwapBuffers函数调用的,因此您不需要在那里使用
  • 插入以下代码(在glutCreateWindow调用之后)来设置投影

的初始位置

代码语言:javascript
复制
    glClearColor(0.2, 0.0, 0.0, 0.0);    
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();  
    glOrtho(0.0, 10, 0.0, 10, -1.0, 1.0); 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5255405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档