Russian Qt Forum
Сентябрь 30, 2024, 16:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поверхность при помощи OpenGL  (Прочитано 8409 раз)
Mixolap
Гость
« : Январь 11, 2007, 22:28 »

Нижеприведенный код, исходя из моих желаний, должен строить поверхность (набор точек соединных линиями), но его возможностей только хватает на прорисовку точек. Подскажите, пожалуйста, чего сюда надо еще подписать или дайте ссылку на код cтроящий какую-нить поверхность (не Qwt ).


void GLWidget::initializeGL()
{
    glClearColor(1.0,1.0,1.0,0.0);
    glLineWidth(2.0);
    glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);
    glEnable(GL_MAP2_VERTEX_3);
    glMapGrid2f(20,0.0,1.0,20,0.0,1.0);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_FLAT);
}

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();


   glRotatef(85.0, 1.0, 1.0, 1.0);
   glColor3f (1.0, 0.0, 0.0);
   glEvalMesh2(GL_LINE, 0, 20, 0, 20);
   glBegin(GL_POINTS);
    for(int i=0;i<=3;i++)
    for(int j=0;j<=3;j++)
      glVertex3fv(&ctrlpoints[j][0]);
     
   
   glEnd();
}


QT4.2.2 , Linux FC6
Записан
fanat9
Гость
« Ответ #1 : Январь 11, 2007, 23:47 »

Поверхность, в терминах gl, это скорее полигоны соединенные между собой, чем линии и точки.
По-этому чтобы нарисовать поверхность так как ты описал - нужно соединить между собой каждые две точки: glBegin(LINES)

А вот поверхность полигонами, примерно так:
Код:

glBegin(GL_QUADS);
glColor4g(1.0,0.0,0.0,1.0);
for ( int curveNum = 1; curveNum < totalCurveNum; curveNum++ ) {
    QVector<double> &data = curvesMatrix[curveNum];
    int dataSize = data.size();
    for (int i = 2; i <= curvesMatrix[curveNum] - 1; i++) {
glVertex3d(i -1, curvesMatrix[curveNum][i-1], z);
glVertex3d(i, curvesMatrix[curveNum][i], z);
glVertex3d(i, curvesMatrix[curveNum-1][i], z-zStep);
glVertex3d(i -1, curvesMatrix[curveNum-1][i-1], z-zStep);
    }
    z += zStep;
}
glEnd();
Записан
Mixolap
Гость
« Ответ #2 : Январь 12, 2007, 17:55 »

О нашел хороший урок с рабочим примером
http://pmg.org.ru/nehe/nehe34.htm

http://nehe.gamedev.net/data/lessons/linuxglx/lesson34.tar.gz

Правда не qt, но и самому не сложно доделать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.