Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. could anyone told me how to render a stl using qt3d?
Forum Updated to NodeBB v4.3 + New Features

could anyone told me how to render a stl using qt3d?

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 1 Posters 572 Views
  • 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.
  • J Offline
    J Offline
    jimfar
    wrote on last edited by
    #1
    Qt3DRender::QGeometry *geometry = new Qt3DRender::QGeometry;
    
    Qt3DRender::QAttribute *m_positionAttr = new Qt3DRender::QAttribute(geometry);
     Qt3DRender::QAttribute *m_NORAttr = new Qt3DRender::QAttribute(geometry);
    
    Qt3DRender::QBuffer *m_positionBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);
     Qt3DRender::QBuffer *m_NORBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);
    
    int vsize = p3dparser->mmeshs[0].mVertices.size();
    int isize = p3dparser->mmeshs[0].mIndices.size();
    //Configure the attributes access
    QByteArray colorData;
    int size1 = sizeof(QVector3D);
    //positionData.resize(vsize * 3 * sizeof(float));
    QByteArray mNormals;
    char*pdata = (char*)&p3dparser->mmeshs[0].mVertices[0][0];
     
    
    const int nVerts = vsize;
    const int size = nVerts * 3 * sizeof(float);
    QByteArray positionBytes,noramlbytes;
    positionBytes.resize(size);
    colorData.resize(size);
    vsize = nVerts;
    memcpy(positionBytes.data(), pdata, size);
    m_positionBuffer->setData(positionBytes);
    
    
    uint facenum = vsize /3;
    uint j = 0, i = 0;
    mNormals.resize(vsize*2*sizeof(Vector3));
    Vector3*vertex = &p3dparser->mmeshs[0].mVertices[0];
    Vector3*pnormal = (Vector3*)mNormals.data();
    Vector3 n;
    uint cnt = 0;
    for ( j = 0; j <vsize*2; )
    {
    	if (j % 6 == 0) {
    		n = CalcNormal(&vertex[cnt]);
    		//n=Normalize(Cross(vertex[i] - vertex[i + 1], vertex[i+2] - vertex[i + 1]));
    	}
    	 
    	pnormal[j++] = vertex[cnt++];
    	pnormal[j++] = n;
    	
    	
    }
     
     
    
    m_NORBuffer->setData(mNormals);
    const quint32 elementSize = 3 + 3  ;
    const quint32 stride = elementSize * sizeof(float);
    m_colorBuffer->setData(colorData);
    m_positionAttr->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
    m_positionAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
    m_positionAttr->setDataSize(3);
    m_positionAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
    m_positionAttr->setBuffer(m_NORBuffer);
    m_positionAttr->setCount(vsize);
    m_positionAttr->setByteStride(stride);
    //m_positionAttr->setProperty();
    
    m_NORAttr->setName(Qt3DRender::QAttribute::defaultNormalAttributeName());
    m_NORAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
    m_NORAttr->setDataSize(3);
    m_NORAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
    m_NORAttr->setBuffer(m_NORBuffer);
    m_NORAttr->setCount(vsize);
    m_NORAttr->setByteOffset( 3 * sizeof(Vector3));
    m_NORAttr->setByteStride(stride);
    

    geometry->addAttribute(m_positionAttr);
    // geometry->addAttribute(m_colorAttr);
    geometry->addAttribute(m_NORAttr);
    return geometry;

    J 1 Reply Last reply
    0
    • J jimfar
      Qt3DRender::QGeometry *geometry = new Qt3DRender::QGeometry;
      
      Qt3DRender::QAttribute *m_positionAttr = new Qt3DRender::QAttribute(geometry);
       Qt3DRender::QAttribute *m_NORAttr = new Qt3DRender::QAttribute(geometry);
      
      Qt3DRender::QBuffer *m_positionBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);
       Qt3DRender::QBuffer *m_NORBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);
      
      int vsize = p3dparser->mmeshs[0].mVertices.size();
      int isize = p3dparser->mmeshs[0].mIndices.size();
      //Configure the attributes access
      QByteArray colorData;
      int size1 = sizeof(QVector3D);
      //positionData.resize(vsize * 3 * sizeof(float));
      QByteArray mNormals;
      char*pdata = (char*)&p3dparser->mmeshs[0].mVertices[0][0];
       
      
      const int nVerts = vsize;
      const int size = nVerts * 3 * sizeof(float);
      QByteArray positionBytes,noramlbytes;
      positionBytes.resize(size);
      colorData.resize(size);
      vsize = nVerts;
      memcpy(positionBytes.data(), pdata, size);
      m_positionBuffer->setData(positionBytes);
      
      
      uint facenum = vsize /3;
      uint j = 0, i = 0;
      mNormals.resize(vsize*2*sizeof(Vector3));
      Vector3*vertex = &p3dparser->mmeshs[0].mVertices[0];
      Vector3*pnormal = (Vector3*)mNormals.data();
      Vector3 n;
      uint cnt = 0;
      for ( j = 0; j <vsize*2; )
      {
      	if (j % 6 == 0) {
      		n = CalcNormal(&vertex[cnt]);
      		//n=Normalize(Cross(vertex[i] - vertex[i + 1], vertex[i+2] - vertex[i + 1]));
      	}
      	 
      	pnormal[j++] = vertex[cnt++];
      	pnormal[j++] = n;
      	
      	
      }
       
       
      
      m_NORBuffer->setData(mNormals);
      const quint32 elementSize = 3 + 3  ;
      const quint32 stride = elementSize * sizeof(float);
      m_colorBuffer->setData(colorData);
      m_positionAttr->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
      m_positionAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
      m_positionAttr->setDataSize(3);
      m_positionAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
      m_positionAttr->setBuffer(m_NORBuffer);
      m_positionAttr->setCount(vsize);
      m_positionAttr->setByteStride(stride);
      //m_positionAttr->setProperty();
      
      m_NORAttr->setName(Qt3DRender::QAttribute::defaultNormalAttributeName());
      m_NORAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
      m_NORAttr->setDataSize(3);
      m_NORAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
      m_NORAttr->setBuffer(m_NORBuffer);
      m_NORAttr->setCount(vsize);
      m_NORAttr->setByteOffset( 3 * sizeof(Vector3));
      m_NORAttr->setByteStride(stride);
      

      geometry->addAttribute(m_positionAttr);
      // geometry->addAttribute(m_colorAttr);
      geometry->addAttribute(m_NORAttr);
      return geometry;

      J Offline
      J Offline
      jimfar
      wrote on last edited by
      #2

      @jimfar said in could anyone told me how to render a stl using qt3d?:

      Qt3DRender::QGeometry *geometry = new Qt3DRender::QGeometry;

      Qt3DRender::QAttribute *m_positionAttr = new Qt3DRender::QAttribute(geometry);
      Qt3DRender::QAttribute *m_NORAttr = new Qt3DRender::QAttribute(geometry);

      Qt3DRender::QBuffer *m_positionBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);
      Qt3DRender::QBuffer *m_NORBuffer = new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer, geometry);

      int vsize = p3dparser->mmeshs[0].mVertices.size();
      int isize = p3dparser->mmeshs[0].mIndices.size();
      //Configure the attributes access
      QByteArray colorData;
      int size1 = sizeof(QVector3D);
      //positionData.resize(vsize * 3 * sizeof(float));
      QByteArray mNormals;
      charpdata = (char)&p3dparser->mmeshs[0].mVertices[0][0];

      const int nVerts = vsize;
      const int size = nVerts * 3 * sizeof(float);
      QByteArray positionBytes,noramlbytes;
      positionBytes.resize(size);
      colorData.resize(size);
      vsize = nVerts;
      memcpy(positionBytes.data(), pdata, size);
      m_positionBuffer->setData(positionBytes);

      uint facenum = vsize /3;
      uint j = 0, i = 0;
      mNormals.resize(vsize2sizeof(Vector3));
      Vector3vertex = &p3dparser->mmeshs[0].mVertices[0];
      Vector3
      pnormal = (Vector3*)mNormals.data();
      Vector3 n;
      uint cnt = 0;
      for ( j = 0; j <vsize*2; )
      {
      if (j % 6 == 0) {
      n = CalcNormal(&vertex[cnt]);
      //n=Normalize(Cross(vertex[i] - vertex[i + 1], vertex[i+2] - vertex[i + 1]));
      }

        pnormal[j++] = vertex[cnt++];
        pnormal[j++] = n;
      

      }

      m_NORBuffer->setData(mNormals);
      const quint32 elementSize = 3 + 3 ;
      const quint32 stride = elementSize * sizeof(float);
      m_colorBuffer->setData(colorData);
      m_positionAttr->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
      m_positionAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
      m_positionAttr->setDataSize(3);
      m_positionAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
      m_positionAttr->setBuffer(m_NORBuffer);
      m_positionAttr->setCount(vsize);
      m_positionAttr->setByteStride(stride);
      //m_positionAttr->setProperty();

      m_NORAttr->setName(Qt3DRender::QAttribute::defaultNormalAttributeName());
      m_NORAttr->setVertexBaseType(Qt3DRender::QAttribute::Float);
      m_NORAttr->setDataSize(3);
      m_NORAttr->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
      m_NORAttr->setBuffer(m_NORBuffer);
      m_NORAttr->setCount(vsize);
      m_NORAttr->setByteOffset( 3 * sizeof(Vector3));
      m_NORAttr->setByteStride(stride);

      geometry->addAttribute(m_positionAttr);
      // geometry->addAttribute(m_colorAttr);
      geometry->addAttribute(m_NORAttr);
      return geometry;

      this is sippet for create a geometry,and now it can display a stl object,,but the object show all black...it seems the normal is loaded wrongly..could anyone told me how to render stl file

      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