OpenGl помощ!


0

В текстов файл са записани радиус, височина и цвят на конус. Да се разработи приложение с MFC и OpenGL, което прочита файла и изобразява конуса. Да се добавят опциите в меню View за изобразяване с телен/точки/плътен осветен модел. 

C++!

Пробвах някои неща, но още при изчертаването на конуса в кода ми дава грешка. Опитах 

void CGlmfcnDoc::Serialize(CArchive& ar)

{

         if (ar.IsStoring())

            {

            }

            else

            {

                        CString aLine;

                        ar.ReadString(aLine);

                        sscanf(aLine,"%f %f %f",&Red, &Green, &Blue);

                        ar.ReadString(aLine);

                        sscanf(aLine,"%f",&radius);

                        ar.ReadString(aLine);

                        sscanf(aLine,"%f",&visochina);

            }

}

това чудо да го сложа в .Doc като инициализирах разбира се радиус, височина и т.н., след това се върхах в .View и там в 

void CGlmfcnView::OnDraw(CDC* pDC)

{

            CGlmfcnDoc* pDoc = GetDocument();

            ASSERT_VALID(pDoc);

            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      // Clear Screen And Depth Buffer

            glLoadIdentity();      

           

//фунциите реализиращи осветяването на обекта:

            GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };

//Ротацията на конуса:

            glRotatef(-80, 1.0, 0.0, 0.0);

            //Транслацията на конуса:

            glTranslatef(1.5, 2.0, 0.0);

            //Изрисуването на конуса с параметри от файла:

            auxSolidCone(pDoc->radius, pDoc->visochina);

 

            glFlush();

BOOL ok=SwapBuffers(m_hDC);

}

И, както съм обозначила тук с червено двете думи така и програмата не харева точно тях и съм просто до там. Помощ!


в Други от litovka (0 точки)


Отговори



1

CGlmfcnDoc какво е?


от atomcat (0 точки)


0
CGlmfcn e името на проекта, a когато програмираш на MFC режим с OpenGL нали в папката source има Doc и View файл, където по принцип си има готови функции, в които евентуално можеш да допълваш някакъв код, за да тръгне програмата. Моля да ме извините за неточните обяснения, но и в университета не обясняват много много за какво става въпрос, а отгоре отгоре и после ти хвърлят да правиш курсови и спасявай се.

от litovka (0 точки)

0
Никога не съм се занимавал с MFC. От това
CGlmfcnDoc* pDoc = GetDocument();
предполагам, че CGlmfcnDoc е някаква структура/клас и без да видя дефиницията ми е трудно да определя дали има проблем в него. Ако проблемът наистина е при това, което е в червено, най-вероятно полетата 'radius' и 'visochina' ги няма и това е компилационна грешка, т.е. няма да компилира проекта. Ако грешката е по време на изпълнение и си установила, че е там навярно pDoc е NULL и компилираш в релийз режим и ASSERT_VALID не го хваща(според обясненията тук http://msdn.microsoft.com/en-us/library/1a65h853.aspx). Коментарът на Николай съдейки по това - http://opengl.czweb.org/ch03/061-064.html е грешен(GLdouble си е double, а не int). В кой университет ви мъчат с MFC?

от atomcat (0 точки)