Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Mixolap от Январь 11, 2007, 22:28



Название: Поверхность при помощи OpenGL
Отправлено: 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


Название: Поверхность при помощи OpenGL
Отправлено: fanat9 от Январь 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();


Название: Поверхность при помощи OpenGL
Отправлено: Mixolap от Январь 12, 2007, 17:55
О нашел хороший урок с рабочим примером
http://pmg.org.ru/nehe/nehe34.htm

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

Правда не qt, но и самому не сложно доделать