Не знам много за 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 от екрана широк и висок), ако намаля радиуса до .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