Добрый вечер. Пытаюсь освоить OpenGL.Вроде пока все понятно. Получилось визуализировать спираль Архимеда.все было отлично.Взялся переписать программу,которая отлично работает в BC и не вижу изображения. Подумал,что проблема в масштабировании..не знаю.Ничего не получается. Вот кусок кода GLfloat u(GLfloat x) { return sin(2*x)*cos(x);} GLfloat ut(GLfloat x) { return sin(2*x+M_PI/10);} void RenderScene(void) { int i; GLfloat a = 0.1f;GLfloat h = M_PI/100;GLfloat tau = h*h*h; GLfloat *yc,*yn,*yp,z,x; GLfloat _yc[300],_yn[300],_yp[300]; yc = _yc; yn = _yn; yp = _yp; for(i=0;i<300;i++) { x =i*M_PI/300; yp = u(x);} for(i=0;i<300;i++) { x =i*M_PI/300; yc = yp + ut(x);} for(i=1;i<300-1;i++) { yn = a*tau*tau/(h*h)*(yc[i-1] - 2*yc + yc[i+1]) + yc - yp; } for(i=0;i<300;i++) { x =i*M_PI/300; glVertex3f(100*x,200-100*yn,0.0f); } С цветами все в порядке. Выводится просто черное окошко,а графика не видно. Думаю,ошибка как раз в последней строке,когда рисую точки.Может они вылезли за границы..Помогите пожалуйста.
#define M_PI 3.1415f GLfloat u(GLfloat x) { return sin(2*x)*cos(x);} GLfloat ut(GLfloat x) { return sin(2*x+M_PI/10);} void RenderScene(void) { int i; glBegin(GL_POINTS); GLfloat a = 0.1f;GLfloat h = M_PI/100;GLfloat tau = h*h*h; GLfloat *yc,*yn,*yp,z,x; GLfloat _yc[300],_yn[300],_yp[300]; yc = _yc; yn = _yn; yp = _yp; for(i=0;i<300;i++) { x =i*M_PI/300; yp = u(x);} for(i=0;i<300;i++) { x =i*M_PI/300; yc = yp + ut(x);} for(i=1;i<300-1;i++) { yn = a*tau*tau/(h*h)*(yc[i-1] - 2*yc + yc[i+1]) + yc - yp; } //z=-50.0f; for(i=0;i<300;i++) { x =i*M_PI/300; glVertex3f(200*x,200-50*yn,0); //z+=0.5f; } glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glEnd(); glPopMatrix(); glutSwapBuffers(); } void SetupRC() { glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); glColor3f(0.0f, 1.0f, 0.0f); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Points Example"); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); return 0; } Просто когда я программировал другой график,все было отлично и все видо. А этот не видно..
4k0b Очистку надо делать в начале сцены. А вот это я вообще не понял. glPushMatrix(); glEnd(); glPopMatrix();
о,нашелся график все-таки. glVertex3f(x,yn,0); Спасибо _DEN_.Хотелось бы с тобой посоветоваться кое в каком вопросе. В личке сообщение тебе
4k0b Вобще хорошо бы отказаться от бредовых библиотек типа glut, и делать все по-человечески. И кстати хорошо бы все матрицы инициализировать. Модельвьювную и проекционную хотя бы.