久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網運營的一線實戰(zhàn)洞察。

QOpenGLWidget大圖查看器:紋理上傳、MVP矩陣與光標縮放

QOpenGLWidget大圖查看器:紋理上傳、MVP矩陣與光標縮放 簡介這份Qt示例工程面向具備一定C基礎、正在學習Qt與OpenGL圖形顯示的開發(fā)者聚焦QImage圖片在QOpenGLWidget中的紋理上傳與交互變換問題。壓縮包為rar格式共10個文件、約347KB以3個cpp和2個h源碼為核心配合ui界面、qrc資源、pro工程配置及jpg示例圖組成可直接參考的完整工程結構。已有783人學習說明其在圖像顯示類練習中具有一定參考價值。工程內容覆蓋initializeGL與paintGL的初始化與繪制流程、紋理過濾和邊角模式設置以及通過模型視圖矩陣實現縮放、旋轉和平移的思路同時結合鼠標、鍵盤輸入更新變換參數并控制重繪以保持交互流暢。讀者可據此理解QImage轉紋理、視口適配和交互變換的組織方式作為圖像查看器或圖形界面二次開發(fā)的起點。1. QOpenGLWidget 貼圖這件事從 QLabel 換到 GL 畫布的那一步拿 QLabel 顯示圖片一開始都很順直到你放進去一張 8000×6000 的掃描件。滾輪一放大QPixmap 要重新做一次 CPU 插值幾十毫秒就過去了按住鼠標拖動主線程直接被堵住畫面一卡一頓松手才啪地跳到最終位置。做圖像標注、圖紙預覽、看圖工具這類要長時間盯細節(jié)的軟件這個體驗基本沒法交付。換成 QOpenGLWidget 的思路其實很樸素讓 QImage 只走一次內存到顯存的拷貝變成一張紋理之后所有縮放、旋轉、平移都只是改一個 4×4 矩陣里的幾個數重繪交給 GPU大圖縮放穩(wěn)定在一幀一次 draw call。這份源碼素材-template 拆的就是這個最小閉環(huán)四類操作背后只有一條數據鏈路和一組矩陣把這條鏈走通再加任何功能都是往上疊。適合剛接觸 Qt 與 OpenGL 的同學照著跑通也適合手上正有一個 QLabel 看圖控件準備換掉的開發(fā)者。2. 工程骨架與數據鏈路一張 QImage 走到屏幕要過哪幾道關2.1 四個環(huán)節(jié)解碼、上傳、變換、繪制整條鏈路拆開只有四步邊界清楚到可以用一句話描述QImage 在 CPU 側被規(guī)范化成 RGBA8888 并垂直翻轉通過 glTexImage2D 上傳成 2D 紋理繪制時用一個正交投影矩陣把像素坐標系映射到 NDC再把平移、旋轉、縮放疊成一個模型矩陣最后畫一個和圖片等尺寸的四邊形采樣紋理輸出。四個環(huán)節(jié)各自有獨立的失敗點這是排查時最省時間的一張地圖環(huán)節(jié)關鍵函數典型失敗表現解碼QImage::load / convertToFormat通道錯位、透明區(qū)變黑上傳glGenTextures / glTexImage2D黑屏、斜條紋、越界讀變換QMatrix4x4 組裝縮放跑偏、旋轉不繞中心繪制glDrawArrays shader有頂點無像素、上下顛倒很多人第一次寫會把這四步揉在 paintGL 里結果一改縮放就得重新傳紋理幀率立刻掉到個位數。正確的切法是上傳只在換圖時發(fā)生一次paintGL 里只做變換和采樣。2.2 類結構與目錄組織工程不需要很復雜一個畫布類吃下所有 GL 相關代碼主窗口只管 UI 和文件對話框這樣二次開發(fā)時改動面可控。目錄大致長這樣ImageViewerGL/ ├── CMakeLists.txt ├── main.cpp ├── widgets/ │ ├── ImageCanvasWidget.h # 畫布本體GL 代碼全在這里 │ ├── ImageCanvasWidget.cpp │ ├── ImageViewerWindow.h # 主窗口打開、復位、關于 │ └── ImageViewerWindow.cpp ├── shaders/ │ ├── image.vert │ └── image.frag └── resources.qrc # 把 shader 打成資源省掉運行時路徑問題Qt6 里 QOpenGLWidget 已經從 Widgets 拆到了獨立模塊CMake 配置少寫一行就是鏈接報錯find_package(Qt6 REQUIRED COMPONENTS Widgets OpenGLWidgets) add_executable(ImageViewerGL main.cpp widgets/ImageCanvasWidget.cpp widgets/ImageViewerWindow.cpp ) # 注意 OpenGLWidgets 是獨立組件只鏈 Widgets 會在 QOpenGLWidget 構造函數上炸 target_link_libraries(ImageViewerGL PRIVATE Qt6::Widgets Qt6::OpenGLWidgets) set_target_properties(ImageViewerGL PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE )提示Qt5 用QT opengl就夠了Qt6 必須顯式找 OpenGLWidgets兩套 CMake 寫法不通用從舊工程遷移時優(yōu)先查這一行。畫布類的公開接口刻意收得很窄外層只認識三個方法加載圖片、復位視圖、設置背景色。內部狀態(tài)全部私有這樣后面加標注層、加 ROI 框選時外部邏輯不需要知道矩陣怎么算。2.3 初始化順序initializeGL 里到底該放什么QOpenGLWidget 的三個虛函數有嚴格調用時機initializeGL只在上下文第一次成功建立后調一次resizeGL在尺寸變化時調paintGL每幀調。順序錯了就是典型黑屏——在initializeGL之前調任何gl開頭的函數要么空指針要么靜默失敗。class ImageCanvasWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: explicit ImageCanvasWidget(QWidget *parent nullptr); ~ImageCanvasWidget() override; bool loadImage(const QString filePath); // 唯一換圖入口 void resetView(); // 復位縮放 1.0、旋轉 0、居中 void rotateBy(float degrees); // 相對旋轉供工具欄和快捷鍵調 protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; void wheelEvent(QWheelEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; private: void uploadTexture(const QImage img); // QImage - GL 紋理只在換圖時調 void rebuildQuad(); // 按圖片尺寸重建頂點緩沖 QMatrix4x4 buildMvp() const; // 投影 * 模型逐幀組裝 GLuint m_texture 0; QOpenGLShaderProgram m_program; QOpenGLBuffer m_vbo{QOpenGLBuffer::VertexBuffer}; QOpenGLVertexArrayObject m_vao; QImage m_image; // 保留原圖導出/重傳都靠它 QSize m_texSize; // 原圖尺寸算初始縮放用 float m_scale 1.0f; // 縮放系數1.0 表示 1 像素對 1 像素 float m_rotation 0.0f; // 旋轉角度單位度逆時針為正 QVector2D m_translation{0.0f, 0.0f}; // 平移量單位屏幕像素 QPointF m_lastPos; // 上一幀鼠標位置拖拽用 bool m_dragging false; };繼承QOpenGLFunctions是為了拿到跨平臺的 GL 函數指針集合——Qt 幫你做了QOpenGLContext::getProcAddress那一套你不必再引 GLEW 或 glad這在只有 Widgets 依賴的項目里很省事。代價是只能用 OpenGL ES 2.0 / 2.1 這個基線如果你要用 compute shader 或幾何著色器就得換成QOpenGLExtraFunctions或者自己加載。initializeGL里的順序不能亂void ImageCanvasWidget::initializeGL() { // 1. Qt6 必須顯式初始化函數解析表少了這行后面所有 gl* 都是空指針 initializeOpenGLFunctions(); // 2. shader 編譯鏈接失敗必須立刻暴露不要靜默跳過 if (!m_program.addShaderFromSourceCode(QOpenGLShader::Vertex, kVertexShader) || !m_program.addShaderFromSourceCode(QOpenGLShader::Fragment, kFragmentShader) || !m_program.link()) { qWarning(shader 編譯失敗: %s, qPrintable(m_program.log())); return; } // 3. VAO/VBO 只創(chuàng)建不填充頂點數據要等圖片尺寸確定后才能寫 m_vao.create(); m_vbo.create(); // 4. 固定管線那套混色狀態(tài)深色背景配半透明圖片時需要 glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }第 4 步的GL_BLEND是給帶 alpha 通道的 PNG 準備的如果你只顯示不透明圖片這一行可以省。第 2 步的qWarning打印m_program.log()很關鍵——shader 編譯錯誤不會拋異常只會在日志里留一行不打印出來就是純黑屏加一頭霧水。3. 核心渲染鏈路拆解紋理上傳、著色器與 MVP 矩陣3.1 QImage 轉紋理格式、對齊、翻轉三件事這是整個項目里最容易翻車的一段因為三個坑全藏在兩行代碼里。QImage 的像素格式五花八門Format_ARGB32、Format_RGB888、Format_Grayscale8……OpenGL 只認它自己那一套枚舉中間必須做一次格式收斂。選Format_RGBA8888是因為它的內存排布是 R、G、B、A 順序和GL_RGBA的期望完全一致不需要再做通道重排。void ImageCanvasWidget::uploadTexture(const QImage img) { // 1. 格式收斂RGBA8888 的內存序和 GL_RGBA 嚴格對應省掉通道交換 QImage normalized img.convertToFormat(QImage::Format_RGBA8888); // 2. 垂直翻轉QImage 原點在左上GL 紋理原點在左下這里翻一次 // 著色器里的 uv 就可以老老實實寫 (0,0)-(1,1)邏輯只留在一個地方 normalized normalized.mirrored(false, true); if (m_texture 0) { glGenTextures(1, m_texture); } glBindTexture(GL_TEXTURE_2D, m_texture); // 3. 行對齊寬度不是 4 的倍數時默認 4 字節(jié)對齊會讀串行畫面呈斜條紋 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, normalized.width(), normalized.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, normalized.constBits()); // 4. 縮小時用 mipmap 三線性放大時用線性只用 GL_LINEAR 縮小會明顯閃爍 glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 5. 邊緣 clamp避免紋理采樣越界時出現半透明黑邊 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, 0); m_texSize normalized.size(); m_image img; // 存原圖導出時不要再從 GPU 讀回來 }參數逐個說清楚GL_RGBA8是內部格式8 位每通道夠用且顯存占用可控如果做醫(yī)療影像要 16 位精度這里換成GL_RGBA16同時 QImage 那邊轉Format_RGBA64。glPixelStorei(GL_UNPACK_ALIGNMENT, 1)是必須的。寬度 3 的倍數、又不是 4 的倍數的圖比如 RGB888 的 1023 像素寬默認 4 字節(jié)對齊會讓驅動多讀幾個字節(jié)畫面直接變成斜著的色帶。這個現象非常迷惑因為圖不大就完全正常圖一大就錯。mirrored(false, true)和第二參數true是垂直鏡像。如果你不想在 CPU 側翻也可以在頂點數據里把 v 坐標寫成1.0 - v但兩邊千萬別都做否則畫面上下顛倒回來又顛倒回去最后看起來正常一換圖就露餡。紋理尺寸還有硬限制GL_MAX_TEXTURE_SIZE在老舊集顯上可能只有 8192 或 4096。超過這個尺寸glTexImage2D直接報GL_INVALID_VALUE畫面全黑。工業(yè)相機、衛(wèi)星圖、切片掃描這類動輒兩萬像素的材料很正常比較穩(wěn)妥的做法是分塊tile上傳或者先等比縮到合法尺寸再傳原圖留給導出用。3.2 頂點數據與著色器一張四邊形的完整定義幾何部分簡單到不需要索引緩沖四個頂點畫一個 triangle strip 就完事。頂點坐標直接用圖片像素坐標0,0 到 w,h這樣正交投影矩陣寫起來最直觀鼠標坐標也能直接參與運算不用來回做歸一化換算。void ImageCanvasWidget::rebuildQuad() { const float w static_castfloat(m_texSize.width()); const float h static_castfloat(m_texSize.height()); // 布局x, y, u, v 交叉排列一次 allocate 搞定位置和紋理坐標 const GLfloat verts[] { 0.0f, 0.0f, 0.0f, 0.0f, // 左上 w, 0.0f, 1.0f, 0.0f, // 右上 0.0f, h, 0.0f, 1.0f, // 左下 w, h, 1.0f, 1.0f, // 右下 }; m_vao.bind(); m_vbo.bind(); m_vbo.allocate(verts, sizeof(verts)); m_program.bind(); // 參數含義location0類型 float起始偏移 0每頂點 2 分量跨距 4 個 float m_program.enableAttributeArray(0); m_program.setAttributeBuffer(0, GL_FLOAT, 0, 2, 4 * sizeof(GLfloat)); // location1從第 3 個 float 開始2 分量跨距同上 m_program.enableAttributeArray(1); m_program.setAttributeBuffer(1, GL_FLOAT, 2 * sizeof(GLfloat), 2, 4 * sizeof(GLfloat)); m_program.release(); m_vbo.release(); m_vao.release(); }setAttributeBuffer的最后一個參數是 stride這里寫4 * sizeof(GLfloat)表示每隔 16 字節(jié)取下一個頂點。如果寫成 0讓驅動自己推某些老驅動會算錯顯式寫死更保險。location0 / 1是靠 shader 里的layout(location ...)硬綁定的兩邊必須對得上對不上就是純黑。兩個 shader 保持最小// image.vert #version 330 core layout(location 0) in vec2 aPos; layout(location 1) in vec2 aTexCoord; uniform mat4 uMvp; out vec2 vTexCoord; void main() { vTexCoord aTexCoord; // 注意這里乘的是完整 MVP任何變換都在 CPU 側算好shader 不做二次加工 gl_Position uMvp * vec4(aPos, 0.0, 1.0); }// image.frag #version 330 core in vec2 vTexCoord; uniform sampler2D uTexture; out vec4 fragColor; void main() { fragColor texture(uTexture, vTexCoord); }片元著色器里不寫任何 if 和分支——GPU 最怕這個。如果你想加灰度化反色亮度對比度直接在texture()之后做一個mix或加減代價幾乎為零但如果寫if (vTexCoord.x 0.5)性能曲線會立刻變得難看。3.3 buildMvp平移、旋轉、縮放的合成順序矩陣這塊是玄學重災區(qū)。QMatrix4x4 的乘法和數學課本一致但代碼里鏈式調用的順序和直覺是反的m.translate(); m.rotate(); m.scale();實際效果是先縮放、再旋轉、最后平移因為每次調用都在右乘新矩陣。設計意圖很明確圖片自己的坐標系里先繞圖片中心縮放再繞圖片中心旋轉然后整體移動到畫布中心并疊加用戶的平移量。所以順序必須是 translate → rotate → scale → 反向平移回原點。QMatrix4x4 ImageCanvasWidget::buildMvp() const { QMatrix4x4 proj; // y 軸向下bottom h, top 0和屏幕坐標系一致 // 鼠標坐標可以直接當世界坐標用不需要再做 y 翻轉 proj.ortho(0.0f, static_castfloat(width()), static_castfloat(height()), 0.0f, -1.0f, 1.0f); QMatrix4x4 mv; // 1. 把畫布中心 用戶平移量當作圖片中心的落點 mv.translate(width() * 0.5f m_translation.x(), height() * 0.5f m_translation.y()); // 2. 繞 Z 軸旋轉正數為逆時針 mv.rotate(m_rotation, 0.0f, 0.0f, 1.0f); // 3. 等比縮放 mv.scale(m_scale, m_scale); // 4. 把圖片自身中心挪到原點 —— 少了這行縮放和旋轉會繞畫布左上角 // 表現就是放大時圖片往右下角飛出屏幕 mv.translate(-m_texSize.width() * 0.5f, -m_texSize.height() * 0.5f); return proj * mv; }第 4 行的反向平移是整個矩陣的靈魂。它的物理含義是把圖片坐標系的中心挪到原點這樣第 2、3 步的旋轉和縮放天然繞中心發(fā)生。很多人圖省事把 scale 寫在 translate 前面代碼看起來只差一行運行起來圖片就是繞著左上角放大越放越偏還以為是自己縮放算法寫錯了。proj * mv的乘法順序也不能改投影矩陣在最左模型矩陣在右。寫成mv * proj的后果是畫面上什么都沒有且沒有任何報錯。3.4 paintGL一幀的完整執(zhí)行順序void ImageCanvasWidget::paintGL() { glClearColor(0.13f, 0.14f, 0.16f, 1.0f); // 深灰底淺色圖邊緣更清楚 glClear(GL_COLOR_BUFFER_BIT); if (m_texture 0 || m_texSize.isEmpty()) { return; // 還沒加載圖片只清屏 } m_program.bind(); m_program.setUniformValue(uMvp, buildMvp()); m_program.setUniformValue(uTexture, 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_texture); m_vao.bind(); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); m_vao.release(); m_program.release(); }逐行解釋關鍵點setUniformValue(uTexture, 0)里的 0 是紋理單元編號必須和glActiveTexture(GL_TEXTURE0)對上對不上就是采樣到一張空紋理畫面純黑。GL_TRIANGLE_STRIP用 4 個頂點畫兩個三角形比GL_TRIANGLES少傳兩個頂點雖然在這里省不了多少但習慣值得保留。整個paintGL里沒有任何glTexImage2D這是幀率能穩(wěn)住的前提。換圖時才調uploadTexturerebuildQuad然后update()一次。4. 交互層實現滾輪縮放、拖拽平移與旋轉的坐標換算4.1 鼠標事件分發(fā)與狀態(tài)管理三個鼠標事件各管一攤互不打擾左鍵按下開始拖拽左鍵移動累加平移量滾輪改縮放系數右鍵拖拽改旋轉角。狀態(tài)用一個m_dragging布爾量 一個m_lastPos就能覆蓋不需要維護狀態(tài)機。void ImageCanvasWidget::mousePressEvent(QMouseEvent *e) { if (e-button() Qt::LeftButton) { m_dragging true; m_lastPos e-position(); // Qt6 用 position()Qt5 是 pos() setCursor(Qt::ClosedHandCursor); } QOpenGLWidget::mousePressEvent(e); } void ImageCanvasWidget::mouseMoveEvent(QMouseEvent *e) { if (!m_dragging || !(e-buttons() Qt::LeftButton)) { return; } const QPointF delta e-position() - m_lastPos; m_lastPos e-position(); // 平移量直接在屏幕像素空間累加和 ortho 的像素單位完全一致 // 中間不需要任何比例換算這也是選像素坐標系的最大好處 m_translation QVector2D(static_castfloat(delta.x()), static_castfloat(delta.y())); update(); // 單幀請求重繪不要用 while 或 timer 去刷 } void ImageCanvasWidget::mouseReleaseEvent(QMouseEvent *e) { if (e-button() Qt::LeftButton) { m_dragging false; unsetCursor(); } QOpenGLWidget::mouseReleaseEvent(e); }e-position()返回的是邏輯像素DPI 無關而m_translation也是邏輯像素兩邊單位一致。如果你不小心一邊用了devicePixelRatio乘過的物理像素拖拽速度就會變成 2 倍或 0.5 倍高 DPI 屏上線普通屏上一切正常——這種問題最難查因為開發(fā)機往往是普通屏。4.2 以光標為錨點的縮放最樸素的實現是滾輪一下m_scale * 1.15圍繞畫布中心放大。用起來會讓用戶很煩想看清楚畫面右上角的細節(jié)滾幾圈之后那塊內容已經跑到屏幕外面去了得不停拖回來。好用的看圖工具都做光標錨定——放大時鼠標指針下面那個像素點保持不動。推導不復雜把屏幕坐標到世界坐標的映射寫成一行screen R · S · (world ? c) center t其中 R 是旋轉S 是縮放c 是圖片中心t 是平移量。要求縮放從 S 變到 S 之后同一個 screen 對應的 world 不變解出新的平移量t pivot · (1 ? k) t · k, 其中 k S/Spivot 鼠標位置 ? 畫布中心落到代碼里只有六行void ImageCanvasWidget::wheelEvent(QWheelEvent *e) { const float steps e-angleDelta().y() / 120.0f; // 一格滾輪 120 if (qFuzzyIsNull(steps)) { return; } const float oldScale m_scale; // 1.15^steps往上滾放大往下滾縮小指數形式保證放大縮小完全對稱 m_scale std::clamp(oldScale * std::pow(1.15f, steps), 0.02f, 64.0f); // 錨定公式k 是新舊縮放比pivot 是鼠標相對畫布中心的偏移 const float k m_scale / oldScale; const QPointF pos e-position(); const QVector2D pivot(static_castfloat(pos.x() - width() * 0.5), static_castfloat(pos.y() - height() * 0.5)); m_translation pivot * (1.0f - k) m_translation * k; update(); e-accept(); }幾個參數值得說明std::pow(1.15f, steps)里的 1.15 是手感系數試過 1.1、1.2、1.31.15 在大圖上大概是滾三格看清楚一小塊的節(jié)奏再大就容易失控。std::clamp的上下限 0.02 和 64 是防呆——低于 0.02 時一張 10000 像素的圖只剩 200 像素寬用戶會以為圖沒了高于 64 時浮點精度開始不夠用邊緣會出現抖動。這兩個邊界值不是隨便定的是長時間試出來的。還有一點容易忽略公式里的pivot用的是畫布中心而不是圖片中心。這里有個前提buildMvp里平移量的基準點也是畫布中心兩邊必須統(tǒng)一。要是某天你把基準改成圖片中心這個公式就得跟著重寫。4.3 拖拽旋轉與視圖復位旋轉不用太花哨右鍵橫向拖動改角度加上一個鍵盤 R 鍵做 90° 步進覆蓋絕大多數用法。void ImageCanvasWidget::setRotationFromDrag(qreal dx) { // 每拖 2 像素轉 1 度符號取反是因為屏幕 y 向下、逆時針為正 m_rotation std::fmod(m_rotation - static_castfloat(dx) * 0.5f, 360.0f); if (m_rotation 0.0f) { m_rotation 360.0f; // 歸一化到 [0, 360)避免數值越滾越大 } update(); } void ImageCanvasWidget::rotateBy(float degrees) { m_rotation std::fmod(m_rotation degrees, 360.0f); update(); } void ImageCanvasWidget::resetView() { m_scale 1.0f; m_rotation 0.0f; m_translation QVector2D(0.0f, 0.0f); update(); }std::fmod那一步是后悔藥。如果不做歸一化用戶按住右鍵轉十圈m_rotation就變成 3600浮點精度一點點累積轉回 0 度時畫面會有微小傾斜。歸一化之后最多只有 359 的誤差肉眼看不出來。復位按鈕也別只復位縮放——把旋轉和平移一起歸零否則用戶點了復位發(fā)現圖還是歪的體驗很怪。5. 避坑與排查黑屏、倒像、斜條紋、泄漏這四類問題5.1 環(huán)境與初始化類一進來就是純黑現象程序能起來窗口也有但畫布區(qū)域一片黑什么都看不到日志里也沒有異常。原因絕大多數是initializeOpenGLFunctions()沒調或者 shaderlink()失敗后被靜默跳過。Qt6 里QOpenGLFunctions的函數指針要靠這個調用填充不調的話第一次glGenTextures就是空指針在部分平臺上直接崩在另一些平臺上靜默返回 0。另一個高頻原因是鏈接時只帶了Qt6::Widgets沒帶Qt6::OpenGLWidgets編譯期不報錯運行時構造 QOpenGLWidget 才炸。解決把addShaderFromSourceCode和link()的返回值全部檢查失敗時用qWarning打印m_program.log()initializeGL第一行固定寫initializeOpenGLFunctions()。如果還是沒有輸出檢查QSurfaceFormat有沒有在QApplication構造之前設置——setDefaultFormat必須在main里QApplication a(argc, argv);之前調之后調無效這是個經典的時間窗口問題。5.2 畫面表現類圖片上下顛倒或出現斜條紋現象 A圖能顯示但是上下倒著的文字也反了。原因 AQImage 原點在左上、GL 紋理原點在左下兩邊坐標系不一致。如果只在uploadTexture里做了mirrored(false, true)卻又在頂點數據里把 v 坐標寫成1.0 - v等于翻了兩次看起來又正了一旦換一種加載路徑比如從內存 buffer 而不是文件只走其中一處翻轉立刻就顛倒。解決 A翻轉只做一次且固定在一個地方。這個項目的做法是統(tǒng)一在uploadTexture里翻頂點 uv 永遠寫(0,0)-(1,1)誰改了翻轉邏輯必須同步檢查另一處。現象 B圖片邊緣出現斜著的彩色條紋或者右下角有一片噪點。原因 BglPixelStorei(GL_UNPACK_ALIGNMENT, 1)沒寫驅動按 4 字節(jié)對齊讀行寬度不是 4 的倍數的圖必然讀串行。解決 B上傳紋理前固定加一行glPixelStorei(GL_UNPACK_ALIGNMENT, 1)。這個設置是全局狀態(tài)會一直保留但建議每次上傳前都設避免被別處改掉后踩坑。5.3 交互與數值類放大后圖片往角落跑現象滾輪放大幾次之后圖片不是圍繞光標放大而是快速往右下角飛出去最后完全看不見或者拖拽時手感明顯黏跟手的距離對不上。原因buildMvp里少寫了最后那句反向平移mv.translate(-w/2, -h/2)縮放和旋轉就繞畫布左上角發(fā)生。拖拽黏的原因通常是單位不統(tǒng)一——e-position()返回邏輯像素而平移量如果按物理像素累加高 DPI 屏上速度就變成 2 倍。解決矩陣鏈的尾部必須補上把圖片中心移到原點這一步坐標換算全程只用邏輯像素如果確實需要物理像素統(tǒng)一在resizeGL里乘一次devicePixelRatioF()別散落在各個事件處理里。檢查方法很簡單把m_texSize打出來再打印一次鼠標位置經過buildMvp().inverted()映射后的世界坐標看看是不是落在[0, w] × [0, h]里。5.4 性能與資源類連續(xù)換圖幾十次后卡死現象反復打開不同的圖片內存占用一路漲最后系統(tǒng)卡頓甚至進程被殺或者大圖切換時有一秒多的白屏。原因glGenTextures每次換圖都新建紋理舊的沒glDeleteTextures顯存泄漏。另一種是每次paintGL都調glTexImage2D重新上傳一張 8000×6000 的 RGBA 圖每幀要拷 180MB 到顯存幀率自然崩。解決uploadTexture里先判m_texture ! 0就復用現有紋理 ID只在尺寸變化時重建paintGL里絕不重新上傳。如果是同一尺寸的圖頻繁刷新比如視頻幀用glTexSubImage2D替換整張glTexImage2D后者要重新分配顯存前者只覆蓋數據快一個數量級。析構函數里記得makeCurrent()之后再glDeleteTextures直接刪會因為沒有當前上下文而失敗。注意QOpenGLWidget在銷毀時上下文可能已經失效~ImageCanvasWidget里刪紋理必須自己makeCurrent()Qt 不會幫你。6. 二次開發(fā)從單圖查看器擴到多圖層標注器的改造思路這個畫布跑通之后最有價值的延伸是把它往多圖層方向改。單圖查看器的瓶頸在m_texture只有一個一旦要做底圖 標注層 ROI 框選就得把紋理和矩陣抽成獨立的圖層結構struct Layer { GLuint texture 0; QSize size; QMatrix4x4 localTransform; // 圖層自身的偏移/縮放相對畫布為恒等 float opacity 1.0f; bool visible true; }; QVectorLayer m_layers;改造的關鍵是把buildMvp拆成兩級投影矩陣proj全局一份每個圖層自己的模型矩陣單獨算繪制時proj * layer.localTransform逐個上傳。這樣拖拽平移只改全局的視圖矩陣單獨挪某個標注框只改對應圖層的localTransform互不干擾也不用重新上傳紋理。第二個常見需求是導出當前視圖。不要用QPixmap::grabWidget那截的是窗口會被遮擋、被 DPI 縮放。正確做法是grabFramebuffer()它直接讀 FBO拿到的是純繪制內容bool ImageCanvasWidget::exportView(const QString path) { makeCurrent(); // 讀 FBO 前必須綁定上下文 const QImage frame grabFramebuffer(); doneCurrent(); return frame.save(path); // 格式由后綴決定 }第三個方向是精度。如果做的是工業(yè)檢測、遙感、病理切片圖片動輒兩萬像素以上GL_MAX_TEXTURE_SIZE直接卡死。這時要么按 2048 或 4096 切塊每塊一張紋理按可視區(qū)域只畫可見的塊視錐裁剪要么把原始QImage拆成金字塔縮放級別切換時換用不同分辨率的紋理顯存占用能壓下來一大截。這兩條路的共同點是始終保留 CPU 側的原始 QImageGPU 上的紋理只是顯示用的副本任何需要精確像素的操作取色、測量、導出都回到原圖算不要從紋理讀回來。關于驗證我的習慣是準備一組刁鉆圖當回歸樣本一張 1×1、一張 1023×769寬度不是 4 的倍數、一張帶 alpha 的 PNG、一張 20000×20000 的大圖、一張灰度圖。每次改完矩陣或者紋理上傳邏輯就把這五張挨個過一遍縮放拖到 0.05 和 30 兩個極端右鍵轉兩圈看有沒有抖動、有沒有黑邊、邊緣有沒有斜紋。這套流程是被坑出來的血淚經驗——只測一張 4K 的彩色 JPG永遠發(fā)現不了對齊和格式的問題。從那以后我每次動渲染相關的代碼都會在提交前把這組圖跑一遍寧可多花十分鐘也不想再收到大圖打開是斜的這種沒有截圖、沒有復現步驟的反饋。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
330Dv国产女人终合视频极品人与兽| 久久久精品一区二区| 草b在线| 色97综合中文字幕| A V视频日本| 夜夜中出国产| 国产97视频| 成人午夜视频免费播放| 国产少妇高潮| 五月丁香啪| 亚洲另类天堂| 青女在线| 日韩AC| 本道综合精品| 婷婷久久综合久| Aa东京男人的天堂| 国产在线76页| 中文字幕精品资源在线| 亚洲男人天堂2017| 天天操天天日天天干| AA特级绝黄| 91精品人妻一区二区三区蜜桃| 强奸乱伦大香蕉网| 精品乱码在线观看| 亚洲欧美在线观看免费| 97超碰香蕉| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 超碰97玖玖爱| 大香樵伊人网| 精品亚洲国产成人AV制服丝袜| 少妇久久久| 中国熟女91| 亚洲精品97在线| 欧美欧美啪啪视频| 国产成人网| 天天草天天日| 啊啊啊免费视频| 欧美 日韩 另类 亚洲| 四虎av在线| 少妇一线天久久久久久| 无码少妇精品一区二区60岁老人| 欧美性爱1080p| 精品人妻一区二区三区免费视频| 国产怡红院在线| 日韩中文9| 女人的天堂大香蕉网| 午夜色婷婷| 亚洲高清无码在线桃色| 黄色性爱网网| 一区二区激情国产熟女| 婷婷丁香五月综合| 九九天堂| 最新国内自拍av免费| 亚洲情色 自拍| 欧美综合在线91| 激情图片亚洲色图| 成 人 影视 一区 二区 三区 四区| 久九九九| 亚洲天堂人妻熟妇视频| 99激情视频| 这里只有精品视频在线观看麻豆| 无码操逼网| 亚洲国产一区二区入口| 日本日皮视频逼| 91chinese在线| 97精品综合久久| 国产精品宅男免费| 97资源制服丝袜| 欧美视频一区二区三区| 亚州综合| AA特级绝黄| 欧美亚男人的天堂| 激情综合五月天| 国产三区免费在线观看| 激情综合五| 人妻久久久| 999日韩中文精品观看视频。| 欧美黄页在线| 日本一卡二区在线| 亚洲国产婷婷在线播放| 激情丁香五月| 人妻夜夜爽天天爽麻豆三区网站| 97国产精选| 久久精品一区二区三区四区五区| 天天日天天干天天整| 自拍偷拍2025在线观看| 中文字幕综合人妻| 日韩AV一区二区三区四四| 97色97好| 丝袜AV一区二区三区| 成人性爱av| 亚洲精品日韩国产欧美| 欧美熟妇视频| 亚洲色图欧洲| 婷婷五月天成人| 99热国产精品| 91狼人| 久久精品72| 国产精品久久久久久久久久久久久久吹 | 在现视频女上位好爽| www.av不卡中文字幕| 国产多人在线观看视频| 玖玖爱综合| 看全色黄大色大片免费视频| 熟啊v色欧美热| 国产精品国产精品国产| 男人的天堂在线有码| 欧美日韩欧美| 一二三四日本视频高清| 国产特级毛片AAAAAA高潮流水 | 色色婷| 精…码一二三区| www.色五月| 新怡红院| 91大神电影天堂| 亚洲婷婷综合网| 91草草草| 五月天综合| 97中文天堂| 98超碰日本| 一中国女人毛片水真多| 北京专精特新企业招聘信息| 凹凸视频在线观看伊人| 青青青青青手机视频| 99热| 精品一区二区三区麻豆| 天天摸天天舔天天操| 男插女青青影院| 中文字幕久久精视频久久大全| 中文久久| 97视频在线免费| 日韩亚洲美州欧洲综三区一品在线| 日韩免费在线观看不卡| 欧美日韩人妻精品一区二区三区| 美女啊啊啊啊啊| 久草视频分类在线| 亚洲玖玖爱| 欧美亚洲丝袜美女电影| 熟女六十路| 黑人操一区二区| 欧美激情性久久久久久| 日韩电影在线观看网址| 综合少妇网| 亚洲欧美综合图片| 久久曰曰| 在现视频女上位好爽| 神马久久久久久伦理片| 亚洲成人性爱网站在线播放| 91精片| 国产精品久久久久999| 香蕉综合网| 日韩激情中文字幕有码| 蜜臀99久久国产| 91 丝袜在线| 久久曰曰| 青操影院| 劲爆欧美人妖三区91| 国内自拍 日韩激情 99| 亚洲国产成人精品999| 久久宗合亚洲| 久久99草| 91老司机精品| a'v在线资源| 日本潮催一卡操| 国产在线能看的你懂的| 九九黄色视频在线观看| 日韩AC| 青青草在线视频播放器| 欧美牲| 久久久亚洲精品中文字幕人妻| …中文字幕亚洲乱,97人妻无码费视…| 91久久伊人婷婷青青草| 亚洲日韩美女丝袜美腿人妻视频| 日本欧美m v精品网站加| 亚洲久久天堂| 国产精品久久久久亚洲av| 屁屁影院一区二区三区国产| 图色综合网| 中文字幕精品专区搜索结果91| 亚洲人妻色图| 免费少妇一区二区| 中文字幕艹艹| 夜色97| 国产视频一区二区三区在线免费观看 | 亚洲无码视频免费在线观看网址! J?P?NESEHD熟女熟妇伦 | 国产一区二区精品在线视频| 欧美黄页在线| 亚洲第一页综合在线| 天天弄天天操| 神马久久中文字幕| 欧美日韩国产黄色片| 亚洲人精品久久久喷水| 91综合网站| 在线观看黄色电话| 久久久天美| 精品国模无码| 中文字幕片| 婷婷伊人五月| 精品国产72| 免费岛国一级片| 国产亚洲综合欧美一区| 精品美女少妇一区二区| 强免费黄色网址| 这里只有97精品| 久碰视频| 人人看黄色视频| 日韩在线AB| 26uuu久久| 77国产精品| 免费网色网站| 亚洲一级特黄大片在线播放91| 99色婷婷中文字幕乱色| 天天躁日日躁AAAXX| 天天爱天天操| 人人妻人人操人人乐| 一级乱伦网站| 口爆欧美91| 交换娇妻呻吟声不停中文字幕| 1204金沙人妻懂旧版免费| 日韩欧美中文日韩欧美色| 啊啊啊啊啊啊啊网址在线观看| 日韩乱伦影音先锋| 日本女人久久久| 极品久久久久久久久久久久久久| 亚洲日韩美女中文字幕乱| 小草av不卡亚洲二区| 久草视频分类在线| 日本大香蕉综合网红本杳社区| 五月丁香婷婷综合| 国产女人与拘做受视频免费| 97久久久久| 免费视频在线一区二区不卡| 99re在线视频这里只有精品| 9/A片| 人、人、摸,人、人、草| 人人操人人摸人人骑| 97超级色碰碰| 4虎在线视频| 欧美在线官网| 亚洲色图殴美色图激情乱伦| A级毛片在线看免费| 精品人妻一区二区免费看| 大香蕉伊人亚洲| 免费啪啪啪网站18岁| 欧州一区二区三区四区| 大JI巴好深好爽又大又粗视频| 家庭乱伦国产精品| 亚洲欧洲综合视频在线| 亚洲揄拍网| 青青11操操操操操操操操| 中亚av| 日韩精品亚洲专区在线影视| 99青草| 老司机福利社视频在线观看| 久久av一级av少妇av高潮| 久久国产99精品72福利 | 精品视频久久| 亚洲免费成人在线高清无码视频 | 91福利网在线观看| 一级片在线观看高清无码| 国产精品自拍xxxx| 亚洲综合中文字幕有码| 亚洲日韩资源| yw尤物av无码点击进入麻豆| 91天天综合日韩欧美| 精品女人999| 天天伊人| 久久精品一区| 亚洲影院无码在线| 久久99热这里只频精品6学生| 91久久久亚洲| 一区二区三区国产精产| 日本操逼视频不卡直接放| 亚洲国产欧美一区二区潘金莲| 久久精品超碰| 91欧美情色| 啊啊啊啊网站| 日本1区2区不卡视频| 天天综合网日韩7799| 97人人草| AV天堂男人的天堂| 欧美日韩人妻精品一区二区三区| 精品人妻丰满熟妇一区二区三| 天美传媒AV在线播放| 91精品微拍福利| 色狠狠综合| 国产精品。| 夜夜国自区| 亚洲色人| 久久人妻视频网| 亚洲永久永久永久永久一级一级一级精品 | 一区二区三区亚洲| 久久成人午夜精品影院| 大香蕉手机在线视频| 91色久| 日韩 欧美 国产 麻豆| 久久精品一区二区| 免费AV播放| 懂色AV中文| 九九九九九九视频免费| 久久久久久欧美精品se一二三四| 嗯嗯啊啊操死我| 亚洲色图欧美色18直播在线| 呦呦一区| 四虎免费看黄| 五十路六十路七十路熟婆| 久久啊哟| 视频一区二区三区精品| 超碰97色色| 久久久久九九九九九| 色官网色综合| 国产精品毛片| 人妻乱仑一区二区三区| 久久亚州精品成人Av无| 狠狠干综合| 天天天干977| 狠狠色婷婷7777久| 91久久青青草原精品| 激情一区二区三区在线观看| 精品人妻一区二区免费蜜桃视频| 丁香五月综合| 国产精品懂色tv影视免费观看 | 60秒免费小视频| 操逼操网| 看一级黄色视频| 天操天操夜操夜月操月年年操操| 黑人无码一区二区| 欧美综合天堂| 新97国产超碰| 99亚洲天堂| 九九九久千久久激情蜜桃在线看 | 欧美色性情| 国产精品久久久久久夜夜夜| 手机在线视频国内精品| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 国产免费一区在线观看| 人人综合| 欧美白嫩在线放| 日韩无码AB| 97精品视频在线| 欧美偷拍| 黄页网站成人免费| 综合网亚洲| 秋霞午夜成人福利片片| 伊人网青青| 丝袜剧情| 黑操B| 蜜臀久久在线视频| 性高潮久久久| 岛国福利在线精品播放| 国产精品久久久鸭无码的功能| 这里只有精品视频在线| 久久AV无码AV| 中文字幕123| 日逼视频日本| 亚洲天堂人妻一区二区| 大香蕉伊然在亚洲91| 97在线免费看视频| 啪啪视频亚洲第一| A V少妇特黄三级| 欧美AB在线观看| 色九月综合| 伊香蕉综合久久久久久久噜噜噜| 色在线综合| 欧美一区二区成人一卡| 亚洲国产精品无码AV久久久| 亚洲欧洲综合视频在线| 国产日韩美女小穴视频网站不卡| 色5月婷婷| 加勒比性爱成人在线| 久操免费视频| 久久久久久裸体| 欧洲射精91| 日本在线一二| 久久综合激情| 中文字幕亚洲热播人妻| 国产精品电影大全| 久久线上视频免费看| 370p日韩欧美亚洲精品| 亚洲中文sv| 久久久九九| 欧美综合综合| 久操免费视频| 久久黄色性爱视频| 精产国品一区二三产品| 自拍六区| 五月丁香六月婷综合成人综合 | 亚洲精品丝袜-不卡成人免费……| 亚洲精品欧洲精品| 一级做a爰片性色毛片久久| 精品偷拍13p欧美dodk视频| 六月丁香五月婷婷| 97久久久久久久久久| 激情五月天插| 丁香五月久久| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 野狼福利社区| 九一性生活免费视频| 夜草欧美| 91社区拍啪人妻| 97AV爱| 97就爱干| 欧美激情中文字幕另类小说| 中文乱码99| 岛国毛片在线观看免费| 精品少妇一区二区三区| 99热最新| 国产真乱mangent| 天天天干977| 狠狠色噜噜狠狠狠狠狠色综合久久 | 欧美超碰人妻97| 久久一区二区三区入口| 国产Aα| 国产毛片片精品天天看视频| 国产人妖视频一区在线观看| 日韩精品电影| 国产成人午夜视频网址| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 人妻少妇久久久| 日韩无码人妻| 亚洲欧美日韩免费观看| 精品毛片久久久精品毛片| 亚洲日韩97| 欧美成年人性爱视频免费观看| 日韩一999精品| 狠狠亚洲| 亚洲情色在线| 人妻干天天| 少妇三P| 国产熟女少妇一区| 90后性网国产欧美| 美中日韩无码| 国产又黄又爽又刺激久久久久久| av天堂电影网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国语精品内射在线观看| 91超级碰| 日韩精品一区的| 国产欧美成人第一页在线观看| 翔田千里AV无码秘 三区| 91操熟妇| 亚洲综合另类色图| 激情另类激情| 国产超碰97| 欧美少妇色综合| 久久一留热品黄| 久久99视频| 桃色五月天| 97视频在线播放| 99精品国产户外露出| 日韩av三四区| 大香蕉欧美伊| 亚洲一区日韩| 欧美大香蕉久| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 国模无码人体一区二区三| 一区二区精品更新提醒| 九九无码视频| 国产狂喷潮在线精品| 91 国产丝袜在线播放-百度| 春色校园综合网| 一块操欧美| 日韩中文字幕国产| 草草草草视频| Aa东京男人的天堂| 防屏蔽在线视频| 熟女啪啪视频| 人人操人人大香蕉| 国产传媒午夜理伦精品| 久久久人妻| 69丨亚洲丨精品丨入口免费播放| 中文有码第五页| 久久人人舔人人爽舔人人av片| 少妇久久久久久| 欧美,亚洲,日韩,v,天堂,手机在线观看| 91精品国产综合久久久蜜臀| 99久久99九九99九九九| 午夜福利在线合集| 啪啪视频亚洲第一| 成人性爱免费播放| 九热中文字幕| 精品人妻一区二区三区免费视频| 超碰97首页| 夜夜騷av、一區二區| 97人肏| 丁香婷婷久久| 天天天天天干夜夜夜夜夜操| 超碰在线观看av不卡| 香蕉国产精品麻豆亚洲欧美日韩| 欧美激情专区| 国产9l 大屁股| 欧美亚洲日韩16色| 嗯嗯,好大,好爽,好骚| 人人手机欧洲亚洲国产人妻| 色狠狠综合| 综合久久中文字幕综合日韩精品| 男女真人网18| 国产极品精品美女视频| 免费人成在线观看网站品爱网| 啪啪啪综合| 999九九九九国产动| 加勒比伊人综合| 日产123区精品免费观看| 日本蜜桃| 1二区9| 青青草在线视频人人想人人上 | 欧洲自拍第一页| 欧美最大综合网| av草草在线电影| 日本欧美m v精品网站加| 天天操美美| 天天热精品| 大香蕉2017| 天天夜夜rb| 亚洲se91| AV乱伦国产| 国产精品夜夜夜| 熟女高潮精品一区二区| 日韩欧美~中文字| 97中文字幕一区| 亚洲激情色片| 91在线一起| 日韩精品一区二区人人人| 97超碰日韩| 日韩欧美性爱电影在线观看| 成人无码在线超碰网| 国产精品美女在线一区| 国产91久久九九免费精品无码| 久色网| www.欧精品| 97 国产一区| 蜜桃狠狠色伊人亚洲综合| 国产日产欧产美韩系列麻豆免费| 日逼97| 97超碰磁| www.丁香五月| 亚洲棕合电彰| 欧美久久人体| 蜜乳AV免费观看| 日韩av一级黄片| 午夜精品久久久久久久男人的天堂 | 久湿久久| 精品视频在线观看| 99精品久久久久久久婷婷| 99精彩视频| 久久九七| 久久啊啊| 午夜电影在线观看无码专区| 激激五月| 国产天天噜一噜久久久| 人人人摸人人| 思思热在线观看| 操人妻逼91| avav青青草久久夜| 欧美的性爱网站免费| 97人妻碰碰中文无码久热丝袜| 色九月综合| 欧美色亚洲色| 亚洲小电影免费涩涩成人在线高清| 欧美性暴力| 亚洲超碰AV| 欧美三级免费伊人| 国产美女自拍视频| 大香网站| 好看的久久不射无码影视影院| 亚洲一区二区AV| 国产拍偷精品网站| 99青草| 欧美狠狠弄| 天天综合网在线观看| AA特级绝黄| 精品丰满人妻一区二区三区免费观| 亚洲中文字幕妇伦久久| 欧美97免费| 日韩亚洲中文字幕在线| 九九九九九九成人| 欧洲黄色网| 丰满人妻-区二区三区免费| 欧美日日人人天天| av在线免费一区二区| 美女97超碰| 97欧美日韩| 日韩成人网址| 天天天做天天天爱天天天爽| 先锋激情∨在线视频播放| av婷婷色网| 午夜视频久久久| 亚洲国产精品99久久久| 六六久久日韩不卡| 欧美,亚洲,日韩,v,天堂,手机在线观看| 亚洲成aⅴ人片不卡无码| 日本天堂网| 男人的天堂网页| 97人人草| 大香蕉欧美| 色av中文字| 欧美999| 欧美大香蕉卡久久| 97精品一区二区视频| 久久9精品视频| aV中亚| 黄网站黄视频网站进入口| 亚洲日韩精品久久久久一区壹牛| 992这里有精品| 蜜桃久久一区二区| 午夜呻吟欧美| 亚洲成aⅴ人片不卡无码| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美色图99| 翔田千里无码一区| 久久亚洲不卡一区二区三区| 桃花色综合影院| 欧美中文狠| 国产精品嫩草影院免费| 人妻蜜桃臀| 情色AV电影| 亚洲学生妹高清av| 一直超碰| 五月天激情影院| 欧美色乱| 久久久久久9999| 亚瑟国产精品久久无码| 丝袜狂射91| 青青草日韩无码| CCYY草草影院地址入口| 综合久久99亚洲人妻中文在线| 国产92麻豆天美精品色欲5| 亚洲丝袜在线观看| 久久综合乱子伦国产免费| 国产老太乱伦一区| 日韩中文字幕2020| 狠狠穞A片一區二區三區| 人妻夜夜爽天天爽三区麻豆AV网站| 欧美天天谢综合网| 超碰国产精品无码| 欧洲一区二区三区四区在线观看| 夜夜一区二区| 欧美色视频在线| 精品国产乱码久久久| 97一区二区蜜臀| 久久久精品无码亚免费| 蜜臀中文字幕| 综合情欲网| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 精品人妻一区二区三区在线视频不卡| 精品国产一区二区三区久久久蜜臀| 狠狠色噜噜狠狠狠狠狠色综合久久 | 国产 日韩 欧美 人妻 熟女 中文| 少妇被c 黄 免费观看| 泰国AV在线观看| 日韩av一级黄片| 国产无码久久高清| 台湾大香蕉99热| www超碰| 国产成人精品必看 | 日本污ww视频网站| 国产丝袜欧美在线视频| 97操B| 国产精品视频| 看黑人AV不卡| 99性爱视频| 久久黄色性爱视频| 夜夜草我| 91老熟女视频| 色婷婷日韩精品一区二区三区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美日韩激情无码专区| 国产毛片片精品天天看视频| 97在线日韩中文字幕| 亚洲男人的天堂AV| 偷拍欧美激情| 韩国久久97| 人妻少妇av在线观看| A V视频日本| 亚欧毛片基地国产毛片基地| 女人综合网| 9精品久久久久| 九九人妻| 97精品久久久久中文字幕| 黑人中出21连凳花野真衣| 人妻天堂综合网| 91九色首页| 日韩欧美亚洲一区二区三区影院| 欧美性爱中文字幕无线码| 69视频入口| 老熟女91| 亚洲欧美另类激情小说| 成人一二三区| 日日夜夜国产综合| 青青草在线视频欧美| 久久一区无码| 久久9精品视频| 91美女在线精品视频| 97久久资源| 日韩女优中文字幕| 99自拍B亚洲 | 中国少妇XXXX做受| 日本日逼高清| 国产精品极品美女视频| 园内精品自拍视频在线播放| 亚洲91在线播放影院| 香蕉久久AⅤ...| 国内毛片婷婷六月色| 国产AAAAAABBBBB| 国产精品久久久久久高清无码免费看| 97精品一区二区视频| 日韩欧美大片免费高清啪啪| 免费av高清无码| 亚洲天堂中文字| 亚洲二区精品在线观看| 国产做?爰片久久毛片?片美国| 亚卅熟女乱色| 青青草操逼逼视频| 国产美脚女优尤物在线观看| 亚洲美女30b| 97超碰人操| 中出91视频| 综合 亚洲 欧美| 午夜性生活av免费在线看| 亚洲一区在线观看欧洲| 欧美日韩国产一区二区小黄片大全| 色y情视频免费看| 国产AV激情无码久久无码| 图片区小说区| 日韩久久三区| 插老姨肥穴| 破处bbq| 舔人妻中文免费视频| 日日操夜夜操天天操免费观看麻豆| 国产精品视频内谢女人| 欧美顶级黄色大片免费| 久草婷婷| 秋霞一区二区三区四区五区六区七区| 亚洲影视第一页| 国产97在线 | 亚洲| 亚洲自拍天堂| 一二三四视频在线社区中文字幕| 久久99网站| 欧美三级免费伊人| 日韩天天综合| 超碰97人妻免费在线| 日本五十路熟女一区二区| 欧美后进式| 日本久操视频| 亚洲综合草草| 性无码专区2020| 黄片免费看黄片免费看| 夜夜爽妓女| 久草成人影片| 中文字幕美女91| 国产高潮AA片免费看| 欧美亚男人的天堂| 另类老少妇| 亚洲日韩精品一区二区| 综合影视国产无码| 性欧美天天| 久久精品噜噜噜成人看免欧美大片| 国产AAAAAABBBBB| 日韩精品99999| 在线五区| 操操吧亚洲乱伦视频| 开心五月婷婷| 好爽要喷了| 99无码| 国内三级自拍小视频在线观看 | 久久av无码| 九九色婷婷| 中文字幕少妇色| 78超碰| 色色色色网站| 爱干爱射网啊啊啊| 精品人妻一区二区三区免费视频| 天堂无码精品国产久| 午夜福利久久久噜久噜久久综合 | 国产亚洲综合欧美一区| 天天综合网AV91| 日本精品中文字幕视频| 97资源制服丝袜| 国产后入式在线观看| 大香蕉久| 日本丝袜美腿人妻九九| 亚洲国产综合图区中文字幕| 99综合免费视频| 久久风骚城市人| 国产成人亚洲精品无码古代早漏男| 蜜臀av中字字幕网站| 91九色丨风韵犹存| 99色热| 老熟女综合网| 香蕉黄色一级视频| 日韩丝袜人妻AV| 91麻豆天美| 玖玖人人爱| 蜜臀99久久精品久久久久| 色人久久| 97av,com| 极品美女福利在线观看| 大屁股国产在线视频| 黄色AAAAAAAAAAA大片| 欧美韩国你懂得在线| 九九视频黄色片| 国产丰满熟夫69mpp| 日本1区2区不卡视频| 好淫网一二三视区| 精品久久久av无码免费| 中文字幕天天天天天| 波多野结衣AV无码一区| 九九亚洲精品| 五十路三级片| 青青草一区二区三区四| 黑人黄片在线免费观看| 四虎884| 91欧美| 淫荡网址| 秋霞男人网| 又大又长又粗又爽又黄| 99re在线精品78| 免费黄色A片| 男女啊啊啊| 中文字幕视频在线观看一区二区| 中文字幕第2页| 国产九九久久久精品| 秋霞成人一级在线观看| 人妻天天爽夜夜爽2| 国产成人网址| 国色综合天| 亚洲一区二区三区麻豆传媒| 免费啪啪av| 免费1级a做爰片观看| 嫩草 人人网精品| 人妻人人澡人人爽人人| 日日干男人的天堂| 男人天堂久久精品不卡| 999国产精品999久久久久久| 亚洲天堂男人的天堂| 无码不卡八戒| 黄色高清无码无码破解免费暗网| 99热国产| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久久伦理视频久久大香蕉视频| 是还免费视频1727我| 欧美亚洲图片| 国产久久av| 97亚洲国产影视| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 久久97| 欧美综合站| 久久精品男人的天堂| 高清国产精品福利网站| 国产激情在线| 97精品国产精品免费观看| 亚洲人妻色图| 2017人人操,人人摸| 99热官网| 国产精选视频| 蜜乳AV一区二区三区四| 色网综合网| 91啦人妻| 嗯嗯啊啊操死我| 色综合一区二区三区| 色九九九综合| 91综合网站| 日本一级一级一级一级| 久久风骚城市| 成人免费福利网站国产| 久久m| 日本人人操人人操| 日韩欧美中文字| 国产亲戚伦亲在线| 欧美伦乱爱| 天天视频综合在线观看视频| 亚洲淫色网中文| 黄页网站免费高清在线观看| 婷婷色网| 日韩丝袜二区| 97伊人| 花野真衣| 操www| 亚州色图片在线色| 天天操天天舔| 免费视频一二三区| caopeng97人妻| 欧美一区二区三区互相| 天天插天天操天天摸天天射天天看| 一本久道在线综合视频| 国产欧洲精品亚洲午夜拍精品| 欧美性生活免费网| 亚洲图片视频小说| 国产欧美精品日韩区二区麻豆天美| 久久久精品网站| 六月天婷婷| gogogo免费高清看中国国语| 91网站在线播放| 国产视频一区二区在线观看| 无码天堂| 美熟女逼导航AV操逼| 青青草日韩无码| 亚洲国产欧美另类自拍| 一二三四区电影| 久久免费看高潮毛片韩国| 国产在线能看的你懂的| 99热婷婷一区二区三| 白 大 人妻 区 在线| 国产69精品久久久久99尤物| 色五月av| 秘书高跟黑色丝袜国产91在线| 丁香五月婷婷基地| 国产高清在线观看欧美| 牛牛AV人人夜夜澡人人爽| 性生活性生大爱77AV国产| 99色日| 国产精品网站www| 日韩三四五区| 久久五月丁香| 黄页视频网站野外| 色欲Av人妻精品一区二| 久草这里只有精品| 久久老熟女| 少妇熟女视频一二三区| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 久午视频| 97天天插| 久久久96精品| 公司1区2区3区精产精| 中文字幕精品久久久久人妻红杏ⅰ| 欧美一级欧美三级在线观看| 色欧美天天| 啪一啪免费视频| 亚洲成人久久一区二区| 2019天天干天天操| 在线观看综合精品亚洲| 欧美大香蕉专区网| 久久东京国产精品视频| 免费一级视频特黄色大片| www.色操逼| 超碰色中文| 熟女91网| 中文字幕精品探花视频| a在线视频免费观看| 日本一久是| 人人爱人人乐人人操| 欧美少妇高潮久久91| 97天天爽| 67914在线兔费成人视频| 强奸乱伦AV网站| 亚洲欧美另类少妇精品| 九月伊人中文字幕| 太久视频| 五月丁香亭亭| 久久久专区| 国产91乱伦| 国产蜜臀在线| 亚洲最大网站av| 国产AB视频| 亚洲精品亚洲人成人网| 嗯嗯嗯啊啊在线观看| 日韩精品一区二区三区色欲| 伊人欧美大香蕉视频| 日日爽夜夜爽| 精品欧美不卡在线播放| 欧美亚洲20p| 欧美极品性爱天天射| 天天热精品| 五月天激情小说| 一区二区三区美女超清| 久久999久| 国产三级多多影院2022国产AA一级毛片无码 | 欧美日韩1234| 神马久久久久久久久久久久| 精品少妇人妻av久久免费| 国产91专区| 天天欧美欧美亚洲网| 亚洲国产欧美一区二区潘金莲 | 秋霞午夜成人福利片片| AV99热18这里只有精品| 欧美久热| 丰满人妻一区二区三区四区| 婷婷丁香人妻 | 啪啪视频亚洲第一| 九久久精| 国产偷人妻精品一区二区在线| 九九av| 国产精品亚洲一级av第二区| 97超碰大| 国产自偷| 综合97亚洲| 蜜奶av| 午夜噜噜噜| 一区,二区,三区网站| 午夜色婷婷| 粉嫩粉嫩一区性色AV片| 亚洲在线网站| 久久久9999| 九九草| 欧美姓爱综合网| 大香蕉在线SuP| 日本五十路在线| 日日干日日操五月天伦理视频| 九九热最新| 久久丁香五月天| 色吧五月| www99热| 五月天偷拍| 欧美日不卡| 亚洲无套久久嗯嗯| 久久精品人体| 91暧暧| 无码视频一区二区| 精品十三区| juliaann丝袜大战黑鬼| 97国产天堂岛| 日韩二区三四区五区六区在线看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 四虎AV无码| 午夜精品视频777| 国产家庭乱伦性爱视频| 97色在线视频| 亚洲欧美91√| 亚洲十八禁止| 国产精品熟女九九九| 婷婷亚洲中文字幕在线| 十八禁视频网站| 成人三一级一片aaa| 欧美18老人禁| 亚洲婷婷综合网| 看全色黄大色大片免费视频| 中韩中文字幕在线观看| 精品人妻一区二区蜜桃视频| 午夜后入| 欧美后入视频| 天天插夜夜爽| 久久国产精品熟女人妻| 91网亚洲| 亚洲无限观看| 屁股久久久久久久久| 欧美91丝袜| 熟女久久| 好吊色青靑草| 99久久久无码国产精品性啊聊| 天天亚洲| 四虎午夜影院| 欧美1区二区三区公司| 国产精品久久久久久久久久梁医生| 国内精品嫩模A∨私拍小视频| 国产精品不卡一区二区三区av| 97超碰超碰| 人人操人人摸人人看人人插| 色色香蕉| 九九九九九九九精品视频| ′ !γ}丶。。久久精品欧美一区二区三区| 丁香婷婷激情五月天无毒不卡| 夜夜嗨av午夜成人| 另类图片五月天| 一区二区影院| 久久99999| 一级黄色性爱裸体视频| 日韩一区二区精品视频| 蜜臀亚洲综合一二三四区| 日韩视频中文字幕| 黄污污污污| 超碰人妻久久| 在线看免费无码AV天堂的| 国产精品suv一区| 蜜乳成人AV| 欧美色图亚洲特色| 色视频蜜乳| 91成人在线| 久久精品日韩| 东京热熟女亚洲视频网站| 免费视频无码| 久这精品中文在线观看视频| 国产亚洲在线| 欧美少妇色图| 欧美美女在线高潮999| 极品色| 99爱久久视频频| 日日操免费视频| 91精品人妻一区二区三区蜜桃臀| 男人天堂2019| 亚洲欲色9532548967一区| 蜜臀久久99精品久久久久久| 五月天激情四射| 性91| 青青草黑寡妇男人天堂| 伦激情人妻另类人妻| 天天综合网AV91| 日韩欧美经典在线观看| 少妇天堂| 青青草原综合久久大伊人精品| 亚洲国产美女久久久久| 97天天做| 国产一级αv免费看片| 一本大道久| 有码免费观看| 伊人久久大香线蕉无码| 亚洲情色 自拍| 日韩紧密久久| 我要看免费韩日黄片| 91在线视频观看国产| 超碰97综合在线| 黄色成品网站| 色青青久久影视| 日本国产欧美一区三区二区| 久久天天躁日日躁狠狠躁 | 蜜臀无码视频在线观看| 青青草在线视频美女| 欧洲精品人妻| 亚洲 中文 女同| 色综合一区二区三巨| 日韩无码专区| 四色永久成人网站| 日本污ww视频网站| 男人的天堂一区三区| AA特级绝黄| 亚欧高清在线| 久热9| 亚洲色鬼| 大香蕉在线视频15| 亚洲国产综合久久久性感熟妇| 久久久久久久极品香蕉视频| 久久精品一区二区三区不卡| 婷婷五月综合在线| 日逼国产| 日韩欧美综合激情| 18禁的网站在线| 日本欧美韩国国产在线| a片 xxxx受爽视频| 少妇久久| 亚洲国产精品99久久久| 牛牛AV人人夜夜澡人人爽| 国产一区二区三区高清视频| 另类图片综合| 深夜福利黄片| 天天躁日日躁成人字幕aⅴ| 伊人网青青| 国产人妖视频一区在线观看| 中日韩久久久| 日本一级性爱| 一本道综合色图| 超碰97资源大奶| 东京热av男人的天堂| 四虎在线观看网站| 97国产天堂岛| 色综合99999| 无码99| 色老牛| 91白虎| 色色色色日本| 99综合视频一体| 中文字幕-区二区三区四区视频中国 | 好湿好紧好爽 视频| 国产性感在线观看| 97爱碰| 97欧美日韩| 亚欧成人综合影院| 日本 欧美 国产一区| 色av中文字| 日韩人妻精品| 亚洲激情片|