【发布时间】:2011-03-10 04:17:17
【问题描述】:
我正在尝试使用 OpenGL 模拟一个粒子系统,但我无法让它工作,这是我目前所拥有的:
#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,size)内
【问题讨论】:
-
你能发布你的整个代码吗?我们不知道particle[] 数组是什么。我可以猜到粒子不在默认投影范围内。
-
没关系,其余的代码已经过测试并且工作正常,代码是几千行代码,我看不出这有什么帮助。重点关注 X(particle[i]) 为粒子的 x 坐标,Y(particle[i]) 为 y 坐标的部分,这是唯一与 opengl 部分相关的部分。
-
你在任何地方都调用 glOrtho 吗?
-
我会更改 glClearColor 以查看它是否有任何作用,然后尝试在中心渲染一个点以查看我的模型视图投影矩阵是否正确。
-
@Jim Buck,不,我已经发布了我正在调用的每个 OpenGL 函数。