Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Game Development
  4. Get heightmap xyz by mouse
Forum Updated to NodeBB v4.3 + New Features

Get heightmap xyz by mouse

Scheduled Pinned Locked Moved Game Development
1 Posts 1 Posters 1.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    glararan
    wrote on last edited by
    #1

    Hello,

    I looking for something what will return xyz position on my terrain.

    I used gluUnProject, but it still returning "nan" values

    gluUnProject:
    @GLint viewport[4];
    GLdouble modelview[16], projection[16], posX, posY, posZ;
    GLfloat winX, winY, winZ;

       // m_funcs = QOpenGLFunctions_4_1_Core
       m_funcs->glGetIntegerv(GL_VIEWPORT, viewport);
       m_funcs->glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
       m_funcs->glGetDoublev(GL_PROJECTION_MATRIX, projection);
    
        winX = mouse_position.x();
        winY = static_cast<float>(viewport[3]) - mouse_position.y();
    
        m_funcs->glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
        gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
    
        terrain_pos = QVector3D(posX, posY, posZ);@
    

    gluUnProject v2:
    @GLint viewport[4];
    GLdouble modelview[16], projection[16], posX, posY, posZ;
    GLfloat winX, winY, winZ;

        int indexing = 0;
    
        // passing from own Camera class QMatrix4x4 modelView, projection and viewport
        for(int i = 0; i < 4; i++)
        {
            viewport[i] = viewMatrix(0, i);
    
            for(int j = 0; j < 4; j++)
            {
                modelview[indexing] = modelViewMatrix(i, j);
                projection[indexing] = mvp(i, j);
    
                indexing++;
            }
        }
    
        winX = mouse_position.x();
        winY = /*static_cast<float>(viewport[3]) -*/ mouse_position.y();
    
        m_funcs->glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
        gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
    
        terrain_pos = QVector3D(posX, posY, posZ);@
    

    Every array and params have values in gluUnProject v2, so I don't know why it returns nan :(

    Then I tried to use some code from google, but it returns out range positions
    @QMatrix4x4 mProjection = m_camera->viewMatrix() * m_camera->projectionMatrix();
    QMatrix4x4 mInverse = mProjection.inverted();

        float in[4];
        float winZ = 1.0f;
    
        in[0] = (2.0f * ((float)(mouse_position.x() - 0) / (this->width() - 0))) - 1.0f,
        in[1] = 1.0f - (2.0f * ((float)(mouse_position.y() - 0) / (this->height() - 0)));
        in[2] = 2.0f * winZ - 1.0f;
        in[3] = 1.0f;
    
        QVector4D vIn(in[0], in[1], in[2], in[3]);
    
        QVector4D Vpos = vIn * mInverse;
    
        Vpos.setW(1.0f / Vpos.w());
        Vpos.setX(Vpos.x() * Vpos.w());
        Vpos.setY(Vpos.y() * Vpos.w());
        Vpos.setZ(Vpos.z() * Vpos.z());
    
        terrain_pos = QVector3D(Vpos.x(), Vpos.y(), Vpos.z());@
    

    Is any better way to get heightmap xyz in Qt? Or its possible with Qt OpenGL and not with basic GL?

    Using QGLWidget with QOpenGL headers and GL version 4.1

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved