XRender

Inherited from QOpenGLWidget,XView,

Inherited by NULL

Friend class NULL

Description

XRender类从XView继承,是用于三维视图的渲染和用户交互的视图基类,它支持多种渲染模式和显示状态,交互上它支持多种不同的对象选择和拾取方法,以及视图的操作(如旋转、平移、缩放),还支持云图渲染以及变形渲染,以及基于GLSL着色器语言的高级渲染技术。除此以外它还提供了用于指定裁剪平面和局部视图的方法接口以及定制功能专用数据的预览显示接口,可以根据需要显示多种标记。

为了提高渲染速度,XRender首先在帧缓冲区对象中渲染,然后通过纹理渲染到正常渲染上下文中。

XRender为三维场景提供了较完备的渲染以及交互方法,开发者可以从它继承很方便的定制更多专用三维场景的显示与交互。

Members

Public interface

Protected interface


MainFrame * m_pParApp

框架对象

QPoint m_qLastPos

鼠标操作的最后位置坐标

Vector2i m_PrevPt

鼠标操作的前一个位置坐标

Vector2i m_CurPt

鼠标操作的当前位置坐标

QPoint m_qRubberBandPos

鼠标操作的橡皮筋显示(虚线显示选择框)

real m_fRotAngle[3]

视图旋转角度

real m_dCenter[3]

视图中心

Matrix4d m_dModelViewMatrix

模型视图变换矩阵

Matrix4d m_dProjectMatrix

模型视图投影矩阵

GLdouble m_dViewBox[6]

视图包围盒

GLint m_iWndWidth

视图宽度

GLint m_iWndHeight

视图高度

GLuint m_uiFboId

帧缓冲区对象ID

ulong m_ulCurrentShader

当前着色器ID

ShaderVarLocation m_SVLoc

着色器变量位置结构体

ulong m_ulGLExt

OpenGL扩展标志

ulong m_ulEnable

帧缓冲区对象的激活标志

bool m_bTexReady

纹理是否准备好

bool m_bEncodeReady

对象编码数据是否准备好

bool m_bContextMenuReady

右键菜单是否准备好

ulong m_ulImageTextureID

纹理图片ID号

ulong m_ulOpFlag

交互操作状态标志

ulong m_ulPickEntityId

拾取对象ID

QElapsedTimer * m_pTimer

渲染计时器

ulong m_ulPrevTime

上一个渲染时间点

double m_dScale

渲染空间大小与像素的比例系数

QPolygonF * m_PolygonPickPts

多边形拾取模式下的点坐标数组

unordered_map<ItemPtr, ValueLabel> * m_pTextLabels

文本标签数组

uint8 m_BGTopColor[3]

背景上部颜色

uint8 m_BGBotColor[3]

背景下部颜色

RGBAColor m_TextColor

文本显示颜色

FBObject m_ColorEncodeFbo

对象编码帧缓冲区对象

QOpenGLFramebufferObject * m_pOverlayFbo

Overlay缓冲区对象

XVertexBuffer m_VBO[VBO_MaxType]

顶点缓冲区对象数组

XArray<ulong> g_ulColorEncode

对象编码值(从编码帧缓冲区中读取)

XArray<float> g_fDepth

渲染深度值数组

QTimer * m_pAnimationTimer

动画计时器

ulong m_SceneBeginTime

场景渲染起始时间

static float g_fOffsetFarest

最远深度偏移值

static float g_fOffsetFar

较远深度偏移值

static float g_fOffsetNear

较近深度偏移值

static float g_fOffsetNearest

最近深度偏移值

static ulong g_ulOp[Op_Type_Count]

交互操作标志

OpenGLAPI * m_API

OpenGL函数接口句柄

GifGenerator m_pGif

GIF动画生成器


XRender(MainFrame * pParApp, XDocument * doc)

virtual ~XRender()

virtual void onViewDataUpdated()

void onAnimationFrameUpdated()

virtual void createContextMenu()

virtual void setOpFlag(OpType op)

virtual void refresh()

virtual void updateShader()

virtual void clearShader()

MainFrame * getFrame()

virtual void updateViewBox(const real * range)

void setModelViewMatrix(double *matrix)

void saveVisualAngle(XVisualAngle * va)

void loadVisualAngle(const XVisualAngle * va)

void setVisualAngle(const double * viewRange, const double * dir)

void synchronize(XView * refView)

void saveImage(const char * path, bool bOffScreen = true)

void updateOverlay()

void updateColorEncode(bool forced = false)

int countColoredPixel(const XRenderData * rd)

void updateColorSetting()

virtual void createShader()

void clearPickPolygon()

bool isPolygonAvailable()

float getDepthOnPoint(int x, int y)

GLuint loadTexture(const char* file_name)

void fitLocal(const real * localBox, bool bResetCenter = false)

void drawLabel(int x, int y, int w, int h, const char * str)

void drawPointLabel()

void drawValueLabel(ValueLabel * vl, bool bDrawLine = true, int width = 120, int height = 28)

void setValueLabel(const char * str, ValueLabel * vl, RGBAColor c = RGBAColor(108, 0, 108, 64))

virtual void updateValueLabel()

void clearValueLabel(vector<ItemPtr> * keepObjs = NULL)

void addGifFrame()

void endGifRecord()


void initializeGL()

void resizeGL(int width, int height)

void paintGL()

void keyPressEvent(QKeyEvent *event)

void keyReleaseEvent(QKeyEvent *event)

void wheelEvent(QWheelEvent * e)

void mousePressEvent(QMouseEvent *event)

void mouseMoveEvent(QMouseEvent *event)

void mouseReleaseEvent(QMouseEvent *event)

void contextMenuEvent(QContextMenuEvent * event)

void getPlaneBy2Point(int x0, int y0, int x1, int y1, XPlane * plane)

bool createShaderProgram(const char * src_code, const char * fragment, ShaderProgram * sp)

void deleteShaderProgram(ShaderProgram * sp)

void useShaderProgram(ulong spid)

void updateShaderAttribLocation(ulong spID, ShaderVarLocation * varLoc = 0)

void updateClipPlane(bool bUseShader = true)

void disableClipPlane()

void enableClipPlane()

void highlightElement(const XElement * el)

void drawPickedElements(const XRenderData * rd, bool bUseIndex = false)

bool isOperationType(int op)

virtual void setViewAngle(GLViewAngle va, const real *rot_angle = 0)

virtual void setCenter(const real * center)

void drawSolid(const XGeometry * g, bool bEncode, bool bSecond = false)

void drawPart(const XPart * p, bool bEncode, bool bSecond = false)

void drawTransform(ulong spID, ShaderVarLocation * contourVarLoc = 0)

void initShaderContext(XShaderContext * sc)

void useShaderContext(XShaderContext * sc)

void unuseShaderContext(XShaderContext * sc, bool bRelease = false)

virtual void setShaderContext(ulong spID)

void checkGLExtension()

void onPick()

bool calcPickCoord(real * coord)

ErrorCode error()

void drawString(const char *str, const double * loc)

void drawString(const char *str, float x, float y, float z)

void drawString(const char * str, int x, int y, bool bNewMatrix = true)

void chooseGLFormat()

void saveGLState()

void restoreGLState()

void drawBackground()

virtual void drawForeground()

void drawAxis()

void drawCoordSys(const XCoordSystem * cs)

void drawDatumAxis(const XDatumAxis * cs)

void drawGuidePlane()

void drawRubberband()

void drawEntity(DrawingBaseEntity * pEnt, void * quadratic = 0)

void drawOverlay()

void drawColorIndex(const char * label)

void drawColorIndex(const char * label, float min, float max, int div)

void drawLocalContour()

void drawInstancedVectorVBO(ShaderProgram * sp, float vecScale, float coordScale, const XRenderData * rd)

void drawElemEncode(XModel * mdl)

void drawNodeEncode(XModel * mdl)

void drawFaceEncode(XModel * mdl, bool bSecond = false)

void drawEdgeEncode(XModel * mdl, bool bSecond = false)

void drawVertexEncode(XModel * mdl, bool bSecond = false)

void drawPrimitive(int mode, int count, int type = GL_UNSIGNED_INT, const void *indices = NULL, int rangeStart = -1, int rangeEnd = -1)

void drawModelGeometry(XModel * mdl, TypeID geomType, TypeID drawType)

void drawFPS(double fps)

void drawScale(double scale)

void zoomStepIn()

void zoomStepOut()

void beginPixelDraw(int px, int py)

void endPixelDraw()

void renderFromFBO(FBObject &fbo)

void bindFBO(FBObject &fbo)

void releaseFBO()

void resizeFBO()

void updateModelViewMatrix()

void calcSigntLine(int x, int y, double depth, double * l_pt, double * l_dir)

bool isGuidePlaneActived()

void panGuidePlane(int wx, int wy)

bool isSceneTimeOut()

virtual void drawEncodeColor()

virtual void drawHighlight()

virtual void drawAnimation()

bool getPickPosition(real * pos)

bool getPickCuboid(int left, int right, int bot, int top, XObBox * box)

virtual void drawModel()

virtual void drawSolid()

virtual void drawClip()

virtual void drawPreview()

virtual void drawIsoline()

virtual void drawStreamline()

virtual void drawPicked()

virtual void drawMarker()

void drawMarkerText(const char * str, const double * startPos, const char * endPos, TypeID extendAxis, double extendH)

void drawTris(XModel * mdl)

void drawLines(XModel * mdl)

void drawAxis(const double * dir, GLUquadricObj * pQuadric, const char * label = 0, double axisLen = 5)

void drawCross(const double * center, double scale, bool bOblicque = false, RGBAColor c = RGBAColor(0,255,0))

void drawArrow(const double * dir, GLUquadricObj * pQuadric)

void zoomLocal()

double getScaleFactor()

void initOpFlag()

void initFBO()

void initLight()

ulong getColoredEnitityId(int x, int y, int range = 10)

int getColoredEnitityId(int xb, int yb, int xt, int yt, IDHash * eid_hash)

int getColoredEnitityId(IDHash * eid_hash)

void setGLState(KGL_STATE st)

void saveGLformat()

void bindIndexDataFromArray(XArrayPool<ulong> * pArray, int offset, int count, int bufId)

void bindColorDataFromArray(XArrayPool<ulong> * pArray, int offset, int count, int bufId)

void checkClipPlane()

virtual void updateAnimationFrame(VertexFrameFile * vff)

void drawModelVFF(const VertexFrameFile * vff, int activeMode = Active_Normal)

void drawVFF(const VertexFrameFile * vff, int target, int mode = Active_Normal)

void drawScene()

virtual void updateSceneVBO(TypeID updateFlag)

void resetVBOCount(TypeID updateFlag)

void resetSecondVBOCount(TypeID updateFlag)

void updateVBOSize(TypeID updateFlag = (Update_Face | Update_Edge))

void updateSecondVBOSize(TypeID updateFlag = (Update_Face | Update_Edge))

void bindVBOVertexArrayAttribute(TypeID vbType, ulong vaID)

void updateRenderDataToVBO(const XRenderData * rd, int mode, ulong color, int contourVAID, const int * deformVAID)

void updateSecondRenderDataToVBO(const XRenderData * rd, int mode, ulong color)

int updateRenderDataToLineIndex(const XRenderData * rd, vector<int> * lineIndex, int offset = 0)

void updateLocalContourDataToVBO(const XRenderData * rd, const XArray<ulong> * pcolor)

void drawModelVBO(int activeMode = Active_Normal, int edgeIndexCnt = 0)

void drawSecondModelVBO(int activeMode = Active_Normal)

void drawRenderData(const XRenderData * rd, int mode = Active_Normal, int contourVAID = 0, const int * deformVAID = NULL)

void drawVBO(int target, int mode = Active_Normal)

void drawTriEdgeVBO(int mode, int triEdgeIndexCnt = 0)

void drawSecondVBO(int target, int mode = Active_Normal)

void createVBO(XVertexBuffer & bs, int count, int unitSize = sizeof(float), int dim = 1)

void drawInstancedVector(ShaderProgram * sp, const XRenderData * rd)