Russian Qt Forum
Июня 20, 2025, 00:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поверхность при помощи OpenGL  (Прочитано 8560 раз)
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]   Вверх
  Печать  
 
Перейти в:  


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