Я не очень хорошо разбираюсь в openGL/glut, но я успешно использовал его раньше для некоторых чрезвычайно простых вещей в 2D. Теперь я хочу иметь возможность рисовать сферы в 3D. Я пытаюсь смоделировать столкновения частиц, так что все, что мне действительно нужно сделать с точки зрения графики, это нарисовать сферы. Вот моя неудачная попытка
void renderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// Set the camera
gluLookAt(1.0f, 1.0f, 1.0f,
0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);
glutSwapBuffers();
}
void timerProc(int arg)
{
glutTimerFunc(50,timerProc,0);
// Reset transformations
glLoadIdentity();
// Set the camera
gluLookAt(1.0f, 1.0f, 1.0f,
0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glColor3f(0.0,0.0,0.0); //color = black
glPushMatrix();
glTranslated(0,0,0);
glutSolidSphere(.74, 500, 500);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
srand(time(NULL));
init();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(50,30);
glutInitWindowSize(glutGet(GLUT_SCREEN_WIDTH)-80,glutGet(GLUT_SCREEN_HEIGHT)-60);
mainWindow=glutCreateWindow("New Window"); //global variable
WIDTH=glutGet(GLUT_WINDOW_WIDTH); //global variable
HEIGHT=glutGet(GLUT_WINDOW_HEIGHT); //global variable
glutDisplayFunc(renderScene);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glutTimerFunc(50,timerProc,0);
glutMainLoop();
return 0;
}
Надеюсь, все мои проблемы связаны с одной действительно основной ошибкой... По какой-то причине это создает овал. И, хотя овал довольно большой (может быть, около 1/8 экрана в ширину и высоту), если я уменьшу радиус до 0,73, он исчезнет, я думаю, потому что он слишком мал, чтобы его увидеть. Как мне сделать так, чтобы эта сфера выглядела круглой, как вы ожидаете, и чтобы я мог видеть все, что происходит в заданном объеме, скажем, в коробке 10x10x10, как если бы вы просто стояли рядом с ящик с частицами, которые летали вокруг и вглядывались в него, или разумное приближение. Сейчас трудно сказать, на что именно я смотрю (я знаю, что стою в точке 1,1,1 и смотрю на начало координат, но трудно понять, что именно я вижу). Кроме того, иногда, когда я запустить его весь экран просто черный. Затем, когда я очищаю, строю и запускаю снова, все в порядке. Не очень большая проблема, но раздражает, и я хотел бы понять, что происходит. Кроме того, когда количество срезов и стеков было меньше, все выглядело бы хорошо, если бы радиус был большим, но сильно искажался бы, когда радиус был маленьким, что мне показалось очень странным...
glutSolidSphere(0.73, 10, 10)
(т.е. имеете меньше фрагментов/стеков)? - person Christian Aichinger   schedule 16.04.2014glutSolidSphere(0.74, 10, 10)
он ужасно деформируется и станет намного меньше. - person WanderingMathematician   schedule 16.04.2014