国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

C++物理引擎整合實(shí)戰(zhàn):從原理到Bullet集成與性能優(yōu)化

C++物理引擎整合實(shí)戰(zhàn):從原理到Bullet集成與性能優(yōu)化 1. 項(xiàng)目概述為什么我們需要親手整合一個(gè)物理引擎如果你是一名C開發(fā)者尤其是對(duì)游戲、仿真、動(dòng)畫或者任何需要模擬現(xiàn)實(shí)世界物體運(yùn)動(dòng)的領(lǐng)域感興趣那么“物理引擎”這個(gè)詞對(duì)你來說一定不陌生。市面上有成熟的方案比如Bullet、Box2D、PhysX直接拿來用不香嗎為什么還要費(fèi)勁從零開始整合這正是這個(gè)項(xiàng)目的核心價(jià)值所在。它不是一個(gè)簡單的API調(diào)用教程而是一次從底層理解物理模擬到工程化整合再到性能調(diào)優(yōu)的完整實(shí)戰(zhàn)。通過這個(gè)過程你收獲的將不僅僅是一個(gè)能跑起來的物理模塊而是對(duì)剛體動(dòng)力學(xué)、碰撞檢測、約束求解等核心概念的深刻理解以及如何將一套復(fù)雜的第三方C庫優(yōu)雅、高效地嵌入到自己的項(xiàng)目架構(gòu)中。這對(duì)于提升你的系統(tǒng)設(shè)計(jì)能力、性能優(yōu)化嗅覺和解決復(fù)雜工程問題的能力是任何現(xiàn)成教程都無法替代的。簡單來說這個(gè)項(xiàng)目適合兩類人一是希望深入理解物理引擎原理不滿足于“黑盒”使用的開發(fā)者二是正在為自己的游戲或仿真項(xiàng)目尋找物理解決方案但面臨性能、定制化或集成難題的工程師。我們將從最基礎(chǔ)的數(shù)學(xué)和物理概念開始逐步搭建一個(gè)可用的物理世界然后引入一個(gè)成熟的物理引擎比如Bullet進(jìn)行深度整合最后聚焦于上線前必須面對(duì)的優(yōu)化挑戰(zhàn)。整個(gè)過程我會(huì)穿插大量我踩過的坑和總結(jié)出的實(shí)戰(zhàn)技巧。2. 核心架構(gòu)與設(shè)計(jì)思路拆解在動(dòng)手寫第一行代碼之前我們必須想清楚整個(gè)系統(tǒng)的架構(gòu)。一個(gè)整合良好的物理引擎不應(yīng)該是一個(gè)孤立的、難以駕馭的“怪物”而應(yīng)該像血液循環(huán)系統(tǒng)一樣自然地融入你的整個(gè)應(yīng)用軀體。2.1 物理世界與游戲世界的分離與同步這是第一個(gè)也是最重要的設(shè)計(jì)決策。你的游戲世界里有一套邏輯角色位置、狀態(tài)機(jī)、動(dòng)畫播放。物理世界則完全是另一套基于牛頓定律的模擬系統(tǒng)。最糟糕的做法是把這兩套邏輯混在一起比如直接修改物理剛體的位置來響應(yīng)游戲邏輯這會(huì)破壞物理模擬的連續(xù)性導(dǎo)致各種詭異的穿透、抖動(dòng)問題。正確的思路是主從架構(gòu)。游戲邏輯是“主”物理模擬是“從”。在每一幀從物理到主游戲物理引擎完成一步模擬stepSimulation后我們從物理剛體中讀取最新的變換位置、旋轉(zhuǎn)將其同步到游戲世界中對(duì)應(yīng)的視覺對(duì)象或邏輯對(duì)象上。這是數(shù)據(jù)流動(dòng)的主要方向。從物理到主游戲物理引擎檢測到的碰撞事件通過回調(diào)函數(shù)通知游戲邏輯層觸發(fā)受傷、播放音效、得分等游戲性反應(yīng)。主游戲到從物理當(dāng)游戲邏輯需要施加一個(gè)力、改變速度比如角色跳躍、被擊中擊飛時(shí)通過調(diào)用物理引擎的API如applyCentralForce,setLinearVelocity來影響物理世界而不是直接設(shè)置位置。這種分離保證了物理模擬的獨(dú)立性和穩(wěn)定性。你的架構(gòu)中應(yīng)該有一個(gè)清晰的PhysicsSystem類它封裝了物理世界的創(chuàng)建、銷毀、步進(jìn)和查詢并對(duì)外提供干凈的接口供游戲邏輯調(diào)用。2.2 數(shù)據(jù)結(jié)構(gòu)的映射與生命周期管理物理引擎中的剛體btRigidBody、碰撞形狀btCollisionShape、約束btTypedConstraint等對(duì)象都需要與你的游戲?qū)ο驡ameObject、Entity建立關(guān)聯(lián)。這里的關(guān)鍵是所有權(quán)和生命周期。一種常見且推薦的做法是讓PhysicsSystem或每個(gè)游戲?qū)ο笞约撼钟衅鋵?duì)應(yīng)物理對(duì)象的智能指針如std::unique_ptr。當(dāng)游戲?qū)ο蟊讳N毀時(shí)其對(duì)應(yīng)的物理對(duì)象也必須從物理世界中移除并銷毀。切記物理引擎內(nèi)部通常也有一套內(nèi)存管理你需要調(diào)用正確的刪除函數(shù)如delete btRigidBody而不是簡單地delete一個(gè)原始指針因?yàn)槲锢韺?duì)象可能由引擎的內(nèi)存池分配。我強(qiáng)烈建議為你的游戲?qū)ο笤O(shè)計(jì)一個(gè)PhysicsComponent組件。這個(gè)組件在構(gòu)造時(shí)創(chuàng)建物理剛體和形狀在析構(gòu)時(shí)負(fù)責(zé)清理。這樣符合組件化設(shè)計(jì)也便于通過像EnTT這樣的ECS架構(gòu)進(jìn)行管理。2.3 單位制與坐標(biāo)系的統(tǒng)一混亂的單位和坐標(biāo)系是物理模擬“玄學(xué)”bug的主要來源。物理引擎內(nèi)部通常使用國際單位制SI米m、千克kg、秒s。而你的游戲可能為了方便使用“單位”或“厘米”作為長度單位。必須在項(xiàng)目一開始就強(qiáng)制統(tǒng)一。我的經(jīng)驗(yàn)是讓游戲邏輯適配物理引擎的單位制。即在游戲內(nèi)部1個(gè)單位長度就代表1米。這樣你傳遞給物理引擎的尺寸參數(shù)如盒子半長寬高就無需轉(zhuǎn)換。重力加速度設(shè)為-9.8f就代表 -9.8 m/s2非常直觀。如果你已有的游戲資產(chǎn)是基于其他單位的那么需要在加載模型時(shí)進(jìn)行一次性縮放轉(zhuǎn)換。坐標(biāo)系同樣重要。常見的3D圖形API如OpenGL使用右手坐標(biāo)系Y軸向上。而一些物理引擎如Bullet默認(rèn)使用右手坐標(biāo)系但Z軸向上。你必須明確你的整個(gè)項(xiàng)目使用哪個(gè)坐標(biāo)系并在物理世界初始化時(shí)進(jìn)行配置Bullet可以通過設(shè)置全局軸向標(biāo)識(shí)來調(diào)整在從物理世界讀取數(shù)據(jù)傳遞給渲染層時(shí)可能需要進(jìn)行坐標(biāo)轉(zhuǎn)換例如交換Y和Z分量并處理方向。忽略這一點(diǎn)物體會(huì)在你意想不到的平面上運(yùn)動(dòng)或旋轉(zhuǎn)。3. 從零搭建基礎(chǔ)物理世界的構(gòu)建在引入大型物理引擎前我們先徒手搭建一個(gè)最簡化的物理世界這能幫你夯實(shí)概念。我們將實(shí)現(xiàn)兩個(gè)核心運(yùn)動(dòng)積分和基礎(chǔ)的碰撞檢測。3.1 質(zhì)點(diǎn)運(yùn)動(dòng)與數(shù)值積分我們從最簡單的質(zhì)點(diǎn)開始。一個(gè)質(zhì)點(diǎn)的狀態(tài)由其位置pos和速度vel描述。根據(jù)牛頓第二定律加速度a F / m。在連續(xù)時(shí)間里速度是位置的導(dǎo)數(shù)位置是速度的積分。但計(jì)算機(jī)是離散的我們通過數(shù)值積分來近似。最常用的是顯式歐拉法雖然不精確但易于理解void integrateExplicitEuler(Vec3 pos, Vec3 vel, const Vec3 acc, float deltaTime) { vel acc * deltaTime; // 更新速度v v0 a * dt pos vel * deltaTime; // 更新位置p p0 v * dt }注意這里先更新速度再用新速度更新位置。一個(gè)更穩(wěn)定、更常用的方法是速度Verlet積分或半隱式歐拉法Symplectic Euler它在游戲物理中更常見void integrateSymplecticEuler(Vec3 pos, Vec3 vel, const Vec3 acc, float deltaTime) { vel acc * deltaTime; // 用當(dāng)前加速度更新未來速度 pos vel * deltaTime; // 用未來速度更新位置 }注意deltaTime是幀間時(shí)間差。為了保證模擬穩(wěn)定性尤其是當(dāng)幀率波動(dòng)時(shí)必須使用固定的時(shí)間步長進(jìn)行物理更新。通常做法是累積真實(shí)流逝時(shí)間每次固定步進(jìn)如1/60秒更新一次物理可能一幀內(nèi)更新多次。這就是“固定時(shí)間步長”循環(huán)是穩(wěn)定物理模擬的基石。3.2 基礎(chǔ)碰撞檢測AABB與球體沒有碰撞的物理世界是不完整的。我們實(shí)現(xiàn)兩種最簡單的形狀軸對(duì)齊包圍盒AABB和球體。AABB碰撞判斷兩個(gè)AABB是否相交只需檢查它們?cè)谌齻€(gè)軸上的投影區(qū)間是否重疊。struct AABB { Vec3 min; Vec3 max; }; bool intersectAABB(const AABB a, const AABB b) { return (a.max.x b.min.x a.min.x b.max.x) (a.max.y b.min.y a.min.y b.max.y) (a.max.z b.min.z a.min.z b.max.z); }球體碰撞判斷兩個(gè)球體是否相交只需檢查球心距離是否小于半徑之和。struct Sphere { Vec3 center; float radius; }; bool intersectSphere(const Sphere a, const Sphere b) { Vec3 diff a.center - b.center; float dist2 diff.dot(diff); // 距離平方 float radiusSum a.radius b.radius; return dist2 radiusSum * radiusSum; // 比較平方避免開方 }檢測到碰撞后最簡單的響應(yīng)是直接反轉(zhuǎn)速度彈性碰撞或?qū)⑺俣戎昧阃耆菑椥?。但這非常粗糙。真實(shí)的碰撞響應(yīng)需要計(jì)算碰撞法線、沖量并考慮質(zhì)量和恢復(fù)系數(shù)彈性。這涉及到線性代數(shù)和物理公式復(fù)雜度急劇上升。這也正是我們需要成熟物理引擎的原因——它們已經(jīng)高效、穩(wěn)定地實(shí)現(xiàn)了這些復(fù)雜算法。4. 整合成熟物理引擎以Bullet為例當(dāng)基礎(chǔ)概念清晰后我們引入Bullet Physics庫。它是一個(gè)功能強(qiáng)大、開源且廣泛應(yīng)用于游戲和電影工業(yè)的物理引擎。4.1 環(huán)境配置與項(xiàng)目集成首先你需要獲取Bullet庫。推薦從GitHub克隆源碼進(jìn)行編譯這樣你可以獲得調(diào)試符號(hào)并在必要時(shí)修改代碼。Windows (Visual Studio) 集成步驟使用CMake生成Visual Studio解決方案。勾選BUILD_SHARED_LIBS可以構(gòu)建DLL但為了部署簡單我通常靜態(tài)鏈接/MT或/MTd。編譯后你會(huì)得到BulletCollision.lib,BulletDynamics.lib,LinearMath.lib等庫文件。在你的項(xiàng)目屬性中C/C - 附加包含目錄添加Bullet的src目錄。鏈接器 - 附加庫目錄添加編譯出的庫文件目錄。鏈接器 - 輸入 - 附加依賴項(xiàng)添加上述的.lib文件名。確保你的項(xiàng)目運(yùn)行時(shí)庫/MT,/MTd,/MD,/MDd與編譯Bullet時(shí)使用的設(shè)置一致否則會(huì)導(dǎo)致鏈接錯(cuò)誤。跨平臺(tái)與CMake集成推薦如果你的項(xiàng)目使用CMake集成會(huì)優(yōu)雅得多。你可以使用add_subdirectory將Bullet源碼作為子目錄加入或者使用find_package查找已安裝的Bullet。前者更簡單能確保版本一致。# 在你的CMakeLists.txt中 add_subdirectory(thirdparty/bullet3) # 假設(shè)bullet源碼在此目錄 target_link_libraries(YourTarget PRIVATE Bullet3::BulletDynamics Bullet3::BulletCollision Bullet3::LinearMath)這樣CMake會(huì)自動(dòng)處理包含路徑和庫依賴。4.2 核心對(duì)象創(chuàng)建與關(guān)聯(lián)整合的第一步是創(chuàng)建物理世界并填充物體。1. 創(chuàng)建物理世界#include btBulletDynamicsCommon.h // 碰撞配置和分配器 btDefaultCollisionConfiguration* collisionConfiguration new btDefaultCollisionConfiguration(); btCollisionDispatcher* dispatcher new btCollisionDispatcher(collisionConfiguration); btBroadphaseInterface* overlappingPairCache new btDbvtBroadphase(); btSequentialImpulseConstraintSolver* solver new btSequentialImpulseConstraintSolver; btDiscreteDynamicsWorld* dynamicsWorld new btDiscreteDynamicsWorld( dispatcher, overlappingPairCache, solver, collisionConfiguration); // 設(shè)置重力假設(shè)Y軸向上負(fù)方向?yàn)橹亓Ψ较?dynamicsWorld-setGravity(btVector3(0, -9.8f, 0));這四個(gè)對(duì)象配置、分發(fā)器、寬相、求解器是Bullet世界的基石。btDiscreteDynamicsWorld是你主要交互的接口。2. 創(chuàng)建剛體一個(gè)剛體由碰撞形狀、運(yùn)動(dòng)狀態(tài)和物理屬性構(gòu)成。// 1. 創(chuàng)建碰撞形狀例如一個(gè)盒子半長寬高各1米 btCollisionShape* groundShape new btBoxShape(btVector3(btScalar(50.), btScalar(1.), btScalar(50.))); // 2. 創(chuàng)建運(yùn)動(dòng)狀態(tài)定義初始變換 btTransform groundTransform; groundTransform.setIdentity(); groundTransform.setOrigin(btVector3(0, -1, 0)); // 放在Y-1的位置 btDefaultMotionState* myMotionState new btDefaultMotionState(groundTransform); // 3. 設(shè)置剛體構(gòu)造信息 btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI( 0, // 質(zhì)量0表示靜態(tài)物體 myMotionState, groundShape, btVector3(0, 0, 0) // 局部慣性靜態(tài)物體為0 ); // 4. 創(chuàng)建剛體并加入世界 btRigidBody* groundRigidBody new btRigidBody(groundRigidBodyCI); dynamicsWorld-addRigidBody(groundRigidBody);對(duì)于動(dòng)態(tài)物體質(zhì)量大于0并且需要計(jì)算正確的慣性張量btCollisionShape* fallShape new btSphereShape(btScalar(1.)); btScalar mass 1.0f; btVector3 fallInertia(0, 0, 0); fallShape-calculateLocalInertia(mass, fallInertia); // 關(guān)鍵計(jì)算慣性 btTransform fallTransform; fallTransform.setIdentity(); fallTransform.setOrigin(btVector3(0, 50, 0)); btDefaultMotionState* fallMotionState new btDefaultMotionState(fallTransform); btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI( mass, fallMotionState, fallShape, fallInertia); btRigidBody* fallRigidBody new btRigidBody(fallRigidBodyCI); dynamicsWorld-addRigidBody(fallRigidBody);3. 關(guān)聯(lián)游戲?qū)ο驜ullet允許你為每個(gè)剛體設(shè)置一個(gè)用戶指針void* userPointer。這是關(guān)聯(lián)游戲?qū)ο蟮年P(guān)鍵。class GameObject { /* ... */ }; GameObject* myGameObj new GameObject(...); fallRigidBody-setUserPointer(myGameObj);之后在碰撞回調(diào)或查詢時(shí)你可以通過rigidBody-getUserPointer()取回你的游戲?qū)ο筮M(jìn)行邏輯處理。4.3 游戲循環(huán)與物理步進(jìn)物理更新必須與渲染循環(huán)解耦。使用固定時(shí)間步長。float fixedTimeStep 1.0f / 60.0f; // 60Hz物理更新 float maxSubSteps 10; // 最大子步數(shù)防止“螺旋死亡” float accumulator 0.0f; float deltaTime; // 上一幀的真實(shí)時(shí)間 // 在游戲主循環(huán)中 accumulator deltaTime; if (accumulator fixedTimeStep * maxSubSteps) { accumulator fixedTimeStep * maxSubSteps; // 防止累積過多避免卡死 } while (accumulator fixedTimeStep) { // 1. 處理輸入和邏輯對(duì)物理世界施加力/沖量 processInputAndApplyForces(); // 2. 執(zhí)行一步物理模擬 dynamicsWorld-stepSimulation(fixedTimeStep, maxSubSteps); // 3. 同步物理狀態(tài)到游戲?qū)ο?syncPhysicsToGameObjects(); accumulator - fixedTimeStep; } // 可選在物理更新次數(shù)之間進(jìn)行渲染插值使運(yùn)動(dòng)更平滑 float interpolationFactor accumulator / fixedTimeStep; renderWithInterpolation(interpolationFactor);stepSimulation的第二個(gè)參數(shù)是最大子步數(shù)。如果accumulator大于fixedTimeStepBullet會(huì)嘗試進(jìn)行多次子步進(jìn)來“追趕”時(shí)間但最多不超過maxSubSteps次。這保證了在幀率短暫驟降時(shí)物理模擬不會(huì)失控。4.4 碰撞檢測與響應(yīng)Bullet提供了多種方式獲取碰撞信息。1. 遍歷接觸點(diǎn)Manifold每一幀模擬后你可以遍歷所有碰撞對(duì)。int numManifolds dynamicsWorld-getDispatcher()-getNumManifolds(); for (int i 0; i numManifolds; i) { btPersistentManifold* contactManifold dynamicsWorld-getDispatcher()-getManifoldByIndexInternal(i); const btCollisionObject* obA contactManifold-getBody0(); const btCollisionObject* obB contactManifold-getBody1(); GameObject* objA static_castGameObject*(obA-getUserPointer()); GameObject* objB static_castGameObject*(obB-getUserPointer()); int numContacts contactManifold-getNumContacts(); for (int j 0; j numContacts; j) { btManifoldPoint pt contactManifold-getContactPoint(j); if (pt.getDistance() 0.0f) { // 距離為負(fù)表示穿透 // 獲取碰撞點(diǎn)、法線、沖量等信息 btVector3 ptA pt.getPositionWorldOnA(); btVector3 ptB pt.getPositionWorldOnB(); btVector3 normal pt.m_normalWorldOnB; // 從B指向A的法線 // 觸發(fā)游戲邏輯造成傷害、播放聲音等 if (objA objB) { objA-onCollision(objB, ptA, normal, -pt.m_appliedImpulse); // 注意沖量方向 objB-onCollision(objA, ptB, -normal, pt.m_appliedImpulse); } } } }2. 使用碰撞回調(diào)btCollisionWorld::ContactResultCallback對(duì)于更復(fù)雜的查詢?nèi)缟渚€檢測、形狀重疊檢測Bullet提供了回調(diào)機(jī)制。例如射線檢測struct MyRayResultCallback : public btCollisionWorld::RayResultCallback { GameObject* hitObject nullptr; btVector3 hitPointWorld; btVector3 hitNormalWorld; virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult rayResult, bool normalInWorldSpace) { // 找到最近的碰撞 if (rayResult.m_collisionObject) { hitObject static_castGameObject*(rayResult.m_collisionObject-getUserPointer()); hitPointWorld rayResult.m_hitPointLocal; if (normalInWorldSpace) { hitNormalWorld rayResult.m_hitNormalLocal; } else { // 需要轉(zhuǎn)換法線到世界空間 } return rayResult.m_closestHitFraction; // 返回?fù)糁蟹謹(jǐn)?shù)用于排序 } return 1.0f; // 未擊中 } }; MyRayResultCallback callback; btVector3 rayFrom(0, 10, 0); btVector3 rayTo(0, -10, 0); dynamicsWorld-rayTest(rayFrom, rayTo, callback); if (callback.hasHit()) { // 處理擊中邏輯 }5. 性能優(yōu)化與上線調(diào)優(yōu)一個(gè)能跑起來的物理demo和一個(gè)能在復(fù)雜游戲場景中穩(wěn)定運(yùn)行60幀的物理系統(tǒng)中間隔著巨大的優(yōu)化鴻溝。以下是上線前必須關(guān)注的優(yōu)化點(diǎn)。5.1 寬相過濾與碰撞形狀優(yōu)化物理模擬的瓶頸通常在碰撞檢測尤其是窄相檢測精確形狀相交測試。寬相Broadphase的目標(biāo)是快速排除明顯不會(huì)碰撞的物體對(duì)減少窄相的工作量。選擇合適的寬相算法Bullet默認(rèn)的btDbvtBroadphase動(dòng)態(tài)AABB樹對(duì)動(dòng)態(tài)物體多的場景很好。對(duì)于大量靜態(tài)物體可以考慮btAxisSweep3軸向掃描。在項(xiàng)目初始化時(shí)根據(jù)場景特點(diǎn)選擇。碰撞分組與掩碼不是所有物體都需要互相檢測。通過addRigidBody的重載版本設(shè)置碰撞過濾組和掩碼。short groupGround 1; short groupPlayer 2; short groupEnemy 4; short groupProjectile 8; // 地面只與玩家和敵人碰撞 dynamicsWorld-addRigidBody(groundBody, groupGround, groupPlayer | groupEnemy); // 子彈只與敵人碰撞 dynamicsWorld-addRigidBody(bulletBody, groupProjectile, groupEnemy); // 玩家和敵人互相碰撞也與地面碰撞 dynamicsWorld-addRigidBody(playerBody, groupPlayer, groupEnemy | groupGround);這能極大減少不必要的碰撞檢測。簡化碰撞形狀渲染用的高模網(wǎng)格絕不能直接用作碰撞形狀。必須使用簡化的凸包btConvexHullShape、膠囊體btCapsuleShape、盒子btBoxShape或復(fù)合形狀btCompoundShape來近似。對(duì)于復(fù)雜靜態(tài)場景使用btBvhTriangleMeshShape靜態(tài)三角網(wǎng)格。Bullet提供了工具如btShapeHull可以從網(wǎng)格生成凸包近似。5.2 多線程與異步模擬物理模擬是CPU密集型任務(wù)。Bullet支持多線程碰撞檢測和約束求解。啟用并行調(diào)度器使用btCollisionDispatcherMt替代默認(rèn)的btCollisionDispatcher。使用并行求解器使用btSequentialImpulseConstraintSolverMt。注意數(shù)據(jù)競爭多線程下在物理步進(jìn)過程中不要從其他線程訪問或修改剛體狀態(tài)。所有對(duì)物理世界的操作添加/移除物體、施加力都應(yīng)在主線程或同步到主邏輯線程中進(jìn)行。物理步進(jìn)本身可以放在獨(dú)立線程但同步數(shù)據(jù)需要小心。一個(gè)更實(shí)用的模式是異步物理更新將物理模擬放在一個(gè)獨(dú)立的線程中以固定的時(shí)間步長運(yùn)行。游戲邏輯線程通過線程安全的隊(duì)列向物理線程發(fā)送指令施加力、生成物體物理線程每完成一步將剛體的變換數(shù)據(jù)寫入一個(gè)共享的、雙緩沖的數(shù)據(jù)結(jié)構(gòu)中供渲染線程讀取。這能有效利用多核防止物理模擬卡住主線程。但實(shí)現(xiàn)復(fù)雜度較高需要精細(xì)的同步。5.3 內(nèi)存管理與對(duì)象池頻繁創(chuàng)建和銷毀物理對(duì)象如子彈、特效碎片會(huì)導(dǎo)致內(nèi)存碎片和性能抖動(dòng)。對(duì)象池為頻繁使用的剛體、形狀、運(yùn)動(dòng)狀態(tài)預(yù)分配一個(gè)池。當(dāng)游戲?qū)ο蟆八劳觥睍r(shí)不是立即刪除其物理組件而是將其標(biāo)記為“禁用”setActivationState(DISABLE_SIMULATION)并放回池中。新對(duì)象需要時(shí)從池中取出并重新初始化。這避免了頻繁的new/delete和物理世界的添加/移除操作。形狀共享多個(gè)相同尺寸的剛體如一批相同的子彈可以共享同一個(gè)碰撞形狀實(shí)例。因?yàn)榕鲎残螤钔ǔJ菬o狀態(tài)的除了尺寸數(shù)據(jù)且只讀共享是安全的能節(jié)省大量內(nèi)存。btCollisionShape* sharedBulletShape new btSphereShape(0.5f); // 多個(gè)剛體構(gòu)造信息都使用這個(gè) sharedBulletShape及時(shí)清理當(dāng)確定一個(gè)形狀或剛體不再需要時(shí)確保按照delete rigidBody; delete motionState; delete shape;的順序正確刪除。對(duì)于從物理世界移除的剛體Bullet可能仍然持有引用所以刪除前務(wù)必調(diào)用dynamicsWorld-removeRigidBody(body)。5.4 調(diào)試與性能剖析上線前必須進(jìn)行徹底的性能分析和調(diào)試。Bullet調(diào)試?yán)L制Bullet內(nèi)置了調(diào)試?yán)L制接口可以將碰撞形狀、接觸點(diǎn)、AABB等可視化。實(shí)現(xiàn)btIDebugDraw接口并將其設(shè)置給dynamicsWorld-setDebugDrawer(yourDebugDrawer)。在調(diào)試版本中啟用它對(duì)于檢查碰撞形狀是否正確、物體是否按預(yù)期運(yùn)動(dòng)至關(guān)重要。性能計(jì)數(shù)器Bullet的btDynamicsWorld提供了getProfileInfo方法可以獲取碰撞檢測、求解器等各階段耗時(shí)。定期輸出或記錄這些數(shù)據(jù)找到性能熱點(diǎn)。時(shí)間步長與子步數(shù)調(diào)優(yōu)fixedTimeStep和maxSubSteps需要權(quán)衡。更小的步長如1/120秒模擬更精確但計(jì)算量更大。更大的步長性能更好但可能導(dǎo)致快速運(yùn)動(dòng)物體穿透或模擬不穩(wěn)定。對(duì)于大多數(shù)60FPS游戲1/60秒是個(gè)不錯(cuò)的起點(diǎn)。maxSubSteps設(shè)得太高在卡頓時(shí)會(huì)導(dǎo)致單幀內(nèi)多次模擬加劇卡頓設(shè)得太低可能導(dǎo)致模擬“丟幀”物體運(yùn)動(dòng)變慢。需要根據(jù)游戲類型和性能預(yù)算調(diào)整。激活狀態(tài)管理靜止的物體btRigidBody會(huì)被Bullet置為“休眠”狀態(tài)以節(jié)省計(jì)算。確保你的靜態(tài)物體質(zhì)量設(shè)為0動(dòng)態(tài)物體在靜止一段時(shí)間后會(huì)自動(dòng)休眠。對(duì)于需要被玩家或事件隨時(shí)喚醒的物體這是很好的優(yōu)化。但注意如果你每一幀都手動(dòng)移動(dòng)一個(gè)物體即使速度為零它會(huì)保持激活狀態(tài)。對(duì)于大量受控角色考慮使用運(yùn)動(dòng)學(xué)物體btKinematicCharacterController或設(shè)置適當(dāng)?shù)男菝唛撝怠?. 常見問題與排查技巧實(shí)錄整合物理引擎的路上遍布荊棘以下是我總結(jié)的一些典型問題及其解決方法。6.1 物體抖動(dòng)或穿透這是最常見的問題之一。原因1時(shí)間步長不穩(wěn)定。沒有使用固定時(shí)間步長或者deltaTime傳遞錯(cuò)誤。排查檢查物理更新循環(huán)確保stepSimulation使用的是固定的fixedTimeStep并且使用了累積器模式。原因2形狀太薄或太小。物理引擎對(duì)極端尺寸的物體處理不好。排查檢查碰撞形狀的尺寸。避免使用厚度為0的平面用薄盒子代替避免尺寸小于0.01米的物體??梢赃m當(dāng)放大碰撞形狀。原因3恢復(fù)系數(shù)彈性太高且阻尼太低。導(dǎo)致物體在接觸時(shí)不斷彈跳看起來像抖動(dòng)。排查調(diào)整剛體的setRestitution恢復(fù)系數(shù)和setDamping線性/角速度阻尼。對(duì)于大多數(shù)非彈性碰撞恢復(fù)系數(shù)設(shè)為0.1-0.3阻尼設(shè)為0.1-0.5。原因4質(zhì)量比例懸殊。一個(gè)質(zhì)量極大的物體與一個(gè)質(zhì)量極小的物體碰撞可能導(dǎo)致數(shù)值不穩(wěn)定。排查檢查場景中物體的質(zhì)量設(shè)置。盡量讓動(dòng)態(tài)物體之間的質(zhì)量在一個(gè)合理的數(shù)量級(jí)內(nèi)如0.1到100之間。靜態(tài)物體質(zhì)量應(yīng)為0。6.2 性能突然下降排查1碰撞對(duì)數(shù)量激增。使用調(diào)試?yán)L制查看AABB檢查是否有大量物體聚集在一起或者寬相過濾失效。優(yōu)化碰撞分組掩碼簡化復(fù)雜物體的碰撞形狀。排查2內(nèi)存碎片或泄漏。使用內(nèi)存分析工具如Visual Studio的診斷工具、Valgrind檢查是否有物理對(duì)象未被正確刪除。確保遵循RAII原則或使用對(duì)象池。排查3單次模擬時(shí)間過長可能是由于復(fù)雜的約束如多個(gè)關(guān)節(jié)連接的 Ragdoll或復(fù)雜的網(wǎng)格碰撞??紤]簡化約束或?qū)㈧o態(tài)三角網(wǎng)格替換為復(fù)合的凸包形狀。排查4啟用了不必要的特性如連續(xù)碰撞檢測CCD對(duì)快速移動(dòng)的物體如子彈是必要的但會(huì)顯著增加開銷。只為確實(shí)需要的物體啟用rigidBody-setCcdMotionThreshold(...)和setCcdSweptSphereRadius。6.3 碰撞事件丟失或不準(zhǔn)確排查1回調(diào)未注冊(cè)或注冊(cè)錯(cuò)誤。確保你正確實(shí)現(xiàn)了碰撞回調(diào)類如btCollisionWorld::ContactResultCallback并將其用于射線測試或contactTest。排查2接觸點(diǎn)持久化問題。btPersistentManifold存儲(chǔ)的是上一幀的接觸信息。在模擬步進(jìn)后立即遍歷才能拿到當(dāng)前幀的結(jié)果。確保你在stepSimulation之后、下一次stepSimulation之前處理碰撞。排查3形狀不匹配。渲染模型和碰撞形狀嚴(yán)重不符導(dǎo)致視覺上碰撞了但物理上沒檢測到或者反之。用調(diào)試?yán)L制將碰撞形狀可視化確保它們緊密貼合渲染模型。6.4 鏈接與編譯錯(cuò)誤LNK2001/LNK2019 未解析的外部符號(hào)這幾乎總是因?yàn)殒溄拥膸觳黄ヅ?。檢查1運(yùn)行時(shí)庫。確保你的項(xiàng)目屬性C/C - 代碼生成 - 運(yùn)行時(shí)庫與編譯Bullet時(shí)使用的選項(xiàng)一致/MT,/MTd,/MD,/MDd。檢查2庫文件路徑和名稱。確認(rèn)附加依賴項(xiàng)中的.lib文件名完全正確且路徑已添加到附加庫目錄。檢查332位/64位。確保你的項(xiàng)目平臺(tái)x86/x64與編譯的Bullet庫平臺(tái)一致。CMake找不到Bullet如果使用find_package(Bullet)需要確保Bullet已安裝在CMake的搜索路徑中或者設(shè)置Bullet_ROOT變量指向Bullet的安裝目錄。整合物理引擎是一個(gè)系統(tǒng)工程涉及數(shù)學(xué)、物理、軟件架構(gòu)和性能優(yōu)化多個(gè)層面。從理解基本原理開始到謹(jǐn)慎地集成第三方庫再到為上線進(jìn)行深度調(diào)優(yōu)每一步都需要耐心和細(xì)致的實(shí)踐。最寶貴的經(jīng)驗(yàn)往往來自于解決那些最棘手的bug。當(dāng)你看到自己搭建的物理世界中的物體按照預(yù)想的規(guī)律運(yùn)動(dòng)、碰撞、墜落時(shí)那種成就感是無可替代的。希望這份從零到上線的實(shí)戰(zhàn)指南能為你鋪平道路少踩一些我當(dāng)年踩過的坑。記住遇到問題時(shí)調(diào)試?yán)L制是你的第一雙眼睛性能分析器是你的第二雙眼睛而清晰的架構(gòu)設(shè)計(jì)則是讓你避免陷入泥潭的導(dǎo)航圖。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美强奸一区二区诱惑| 色五月综合网| 五月婷婷六月丁香| 欧美色图亚洲色,麻豆| 成人一道本免费视频| 久热91| 国产美脚女优尤物在线观看| 国产综合日韩伦理| 老鸭窝亚洲毛片| 中国国国产一级特黄毛片| 嗯阿好爽好紧| 在线中文字幕| 青青草玖玖爱| 亚洲码在线中文在线观看| 九九热在线视频| 99草精| 99久久久er直播网址| 天天看特黄的免费网站 | 自拍鲍鱼一区在线高清观看免费| 天天天操天天天爱| 久久久国产亚洲精品系列| 成人女人国产| 亚洲午夜福利在线影院| 国产吹潮女在线观看| 欧美aa一级片| 欧美一二级| 欧美综合娱乐久久| 欧美老熟另类| 99在线免费公开视频| 伊人久久大香蕉线AV五月天| 欧美日本国产日韩激情视频| 免费99精品国产自在在线| 密乳AV免费观看| 宅男91视频在线播放| 91蜜桃传媒精品久久久一区二区| AV电影在线播放| 欧亚 另类 久| 成人三一级一片aaa| 神马午夜久久久| 麻豆成人影音在线| 亚洲91av| WWW啪啪的com| 亚洲图片欧美偷拍| 粘花网06av视频| 91香蕉视频在线观看免费| 黄网站黄视频网站进入口| 亚洲三区视频| 天天欧美| 99re在线观看| 337p大胆噜噜噜噜噜91Av| 日本顶级天天操狠狠操夜夜操中文字幕| 免费αV在线视频| 综合网亚| 伊人99热| 另类TS人妖一区二区三区| 91久久伊人婷婷青青草| 久久成人国产精品| 91狠狠狠| 亚洲一级性爱视频免费看| 国产熟女高潮一区二区三区| 97精品97| 久久女人一区二区三区| 99亚洲国产精品色一区二区三区| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 天天干18禁| 伊人国产视频| 97天堂| 精品国模无码| 美女性91| 亚洲欧美日韩不卡人妻| 超碰在线人人射| 天天摸夜夜操视频| 欧美78p| 日本韩国国产精品一区| 超碰久超碰久| 久久久久921| 巨爆乳肉感一区二区三区竹菊影视 | 亚洲 自拍偷拍 欧美| 最新中文字幕av| 亚洲成人久久一区二区| 久久久啊啊啊| 精品美女久久一二三| 国产热RE99久久6国产精品首| 69精品| 亚洲精品国产熟女久久久| 久久久精品国产亚洲伊人| 操逼啊啊啊91| 2017av无码免费无线播| 日韩射精| 最新AV在线| 亚拍在线| 欧美精品丝袜久久久中文字幕| 伊人色综合网电影| 91香蕉视频在线观看免费| 97色亚洲| 久久激情婷婷| 久久久久久综合久久伊人蜜月| 久久伦理视频久久大香蕉视频| 欧美色偷拍| 中文字幕在线观看视频www| www国产天美久久久| 天天射天天操天天干天天吃2018 | 久久国产精品一级二级三级| 婷婷91| 中文字幕av亚洲精品| 久久久精品中文字幕麻豆| 熟妇一区二区三区| 日韩 人妻 精品| 亚洲国产日韩欧美熟妇在线| 情色五月天网| 五月天婷婷社区| 粉嫩国产精品久久粉嫩| 91bbbbbb| 欧美日韩97在线| 青青国产精品在线| 日韩性爱1级片视频| 九九热只有精品| 久9爱精品| 性色AV网站| 色婷婷成人综合| 1769精品一区二区三区| 亚洲人成网站7777| 91情色在线| 精品人妻一区二区乱码一区二区| 久久五月丁香| 日本午夜福利影院| 国产人妖视频一区在线观看| 欧美精品三区| 啪啪啪亚欧美视频| 91女日逼| 国产精品久久久777| 91色婷婷综合久久中文字幕二区| 国产精品无码av嫩草| 午夜爽爽爽| WWW美腿丝袜香蕉中文| 91国产大片| 欧美制服网站美腿丝袜| 久热免费视频| 六月丁丁香| JIZZJIZZ国产精品喷水| 一级黄色牲爱A级片| 久久久久亚洲三级电影| 精品国产一区二区三区在线播出| 免费人成毛片乱码| 日日操免费视频| 无码精品久久久久久亚洲| 欧美综合第一页| 人妻丝袜二区| 天天拍夜夜| 中文乱码字幕观看视频| 91国内外在线| 干美女人妻| 97蜜桃综合| 日日骚一区二区三区| 欧美78| 不卡一区视频| 久草综合网| 亚洲综合网91| 女人天堂av在线播放| 97超碰香蕉| 狠狠操使劲操| 中日韩欧美精品无码AⅤ一区二区| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲熟女国产综合另类| 97超碰天天爱天天爱| 色大香蕉97N| 成人在线午夜视频一区| 日韩在线电影| 亚洲AV无码AV吞精久久久久| 国产精品激情久久久久久久| 人妻熟女字幕一区二区| 欧美性生活内射| 欧美伦乱| 黄片视频,下载| 国产精品一区人妻精品阁在线| 欧美少妇一区二区三区| 国产精品午夜精品| 狼狼色丁香久久婷婷综合五月| 色婷视频| 96国产污污污丝袜| 岛国网址国产| 97在线观视频免费观看| 青青草中出视频| 亚洲交性| 啊啊啊快操我视频| 床上啊啊啊一区二区三区| 国产v片在线免费观看| 嗯嗯啊啊好大好爽| 日韩情色视频| 婷婷五月综合在线| 欧美少妇高潮久久91| 大香蕉2017| 国产盗摄美女如厕大神作品在线观看 | 亚洲一二三精品久久网| 日韩久久.一级黄色片| 免费簧片在线观看| 99999久久精| 国产97亚洲| 青草香蕉网| 国产精品禁久久久精品| 人妻天堂综合网| 99九九久久| 60秒免费小视频| 999 久久久| 久久理论字幕视频| 啊啊啊好想要| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 极品色社| 最新日本中文字幕| 国产超碰在线一区| 日韩亚洲中文字幕在线| 久久久久久免费电影| 国产探花日韩援交| 激情久久日韩精品中文字幕麻豆| 操国产逼| WWW美腿丝袜香蕉中文| 26uuu国产免费观看| 日韩射图| 一区二区 电影 亚洲| 成人无码在线超碰网| 欧美变态激情网| 人人妻人射| 久久一二三四五六七八九区区| 岛国片在线播放| 97在线免费公开视频| 色妹子A V| 琪琪精品免费一区二区三区| 蜜臀99999| 91狠狠色丁香婷婷综合久久精品| 国产成人 综合亚洲 天堂| 色制服丝袜夫妻av一区| 天天色综合图片| 国产 亚洲 丝袜 制服| 久艹99| 日韩一级二级| 久久婷综合| 国产精品日韩在线一区| 超碰久在线天天做| 欧美色吧综合| 免费农村成人少妇人妻Aa一区二区视频| 96一区二区| 少妇人妻激情四射| 超碰综合色| 欧美1727免费观看视频| 日韩无码成人电影| 国产久久久久久| 欧美色图97| 久草婷婷| 五月天伊人| 91蜜臀在线久久久久| 性做久久久久久免费观看软件| 国产精品香蕉| 超碰97色| 无码一区免费在线不卡| 国产久久久| 亚洲久久久| 久久久青青草| 欧美日韩中文视频播放| 69久久| 欧中美三级一区二区三区| 欧美综合传媒| 久久精品无码一区二区三区| 九九热三级片| 美国美女AV在线| 99啪啪视频| 情色日播放AV| 98精品国产乱码久久久久久| 九九九九九用不成了| 1区2区3区中文字幕日韩| 成人综合网 欧美| 久久夜嗨| 国产日本顶级一区二区三区| 国产在线视频午夜精华在| 国产在线观看91精品一区| 91综合在线| 超97在线精品视频| 狠日操| 午夜福利免费福利视频| 日日操天天操| 夜草网站| 久久久久久久久久久999| 懂色av色欲av蜜臀av| 97超碰国产精品| 日本黄色精品专区网站| 97欧美色资源| 日本激情免费大片| 中文字幕精品一区二| 日欧美色| 高清无码久操视频| 久久久久久久78| 日本三级网页| 中文字幕99999| 欧美暴力猛交| www.婷婷| 亚洲第一免费视频| 亚春色色| 中文字幕人妻色偷偷久久皮 | 中文字幕亚韩| 精品传媒在线一区| 色拍偷亚洲| 蜜臀av在线播放一区二区三区| 日日操免费视频| 91亚洲欧美激情| 天天亚洲综合| 国模一区二区三区| 伊人久操| 大黄片做爱的大的| 国产精品亚洲高清在线| 伊人天天久久动态图| 一道α片欧美| 午夜爽爽爽在线观看永久入口姬片| 久久透逼视频| 啪啪啪大香蕉| 天天色综合影视网| 色欲三区| 国内精品999| 欧美91久久久久| 韩国一级做a久久久久| 留下AⅤ黄色片| 亚洲影院小综合| 青青草原av| 日本黄色大片一级视频免费麻豆| 日本污ww视频网站| 欧美在线综合| 韩国手机不卡无码三级视频| 国产在线精品偷| 操逼网站网站| 成人免费在线网站| 亚洲第一页第二页激情| JuliaAnn丝袜熟女系列| 亚州欧美综合| 97资源免费视频| 欧洲综合视频| 色婷婷丁香五月| 亚洲国产午夜真人一级片中文字幕精品黄网站| 天天久久| 超碰吊日色| 欧美日韩亚洲天堂网| 粉嫩国产精品久久粉嫩| 国产精品亚洲免费| 狠狠爱综合网| 久夜视频| 啊啊啊网站| 青草地一本线一区二区三区| 男人天堂最新手机版在线青青草| 亚洲限制级| 人人污日韩一区二区| 伊人天堂在线| 久久久性少妇| 99热日| 东京热男人天堂| 性色av大全| 中文字幕av乱伦| 日韩成人午夜精品久久高潮| 97中文天堂| 97人人干| 有码人妻系列| 精品乱码久久久久| 亚洲欧美激情小说| 日韩三级伊人| 天天操天天射天天日| 欧美一级A片不卡视频。| 天天操人人操骚逼网站| 91狼人| 嗯啊抽插大香蕉网页| 国产精品毛片?v一区二区三区| 久久成人网站| 久久久男人的天堂| 智利AV在线网| 97色欧洲| 色姑娘综合网| 精品久久久av无码免费| 欧美内射少妇| 狠狠操一区二区| 日韩乱伦AⅤ| 91美女在线精品视频| 国产人人干| 欧美熟女丝袜| 国产午夜在线观看| 亚洲 欧美 日韩 国产一区二区| 国产aⅴ无码片毛片一级网站| 97超碰国产亚洲精品资源| 日韩欧美麻豆| 99热这里是精品| 精品97久久| 老外又粗又长一晚做五次| 亚洲AO在线| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日本一区三级韩国| 日韩视频小说在线观看| 丝袜亚洲综合| 男女真人网18| 呻吟 欧美 日本 中出| 国产无吗在线播放| 97干日韩| 97久久精品| 五月激情综合网| 老师充足的奶水小说| 久久精品国产97欧美精品亚洲 | 日本中文字幕在线电影| 精品无码产区一区二| 97在线免费视频观看| 91狠狠综合久久| 情色五月天就去干| 久久免费精品视频免一| 日韩色图 一区二区| 亚洲最大成人a毛毛片| 亚洲中文电影| 午夜福利精品| 男生通女生屁股| www.色婷婷色综合| 超碰人妻久久| 色欲久久99国产精品久久久久久| 伊人色综合网| 国产在线播放成人免费| 色呦呦、国产精品| 亚洲国产精品有声| 超碰97人人乐| 日韩高潮一区| 免费人成毛片乱码| 伊人991| 日本三级网页| 亚洲美女精品九九视频| 97精品国产97久久久久久户外免费| 97色亚洲| 国产又大又粗又长视频在线| 岛国黄色大片网站| 亚洲图片另类| 91伊人影视综合| 2024年最新色情网站在线观看 | 91小视频| 天天综合97| 禁十八久久| 乱欲一区二区| 久久日韩肥臀| 伊人青青一区成人视频在线观看区| 狠狠操,使劲操| 精品美女少妇一区二区三区| 一级免费啪啪片| 神马久久久久久| 四虎视频在线观看| 一区二区三区欧美激情| 亚洲国产另类在线中文| 亚洲色图第四色| 亚洲少妇喷视频看| 在线观看AV片| 人人操人人摸人人骑| 日产123区精品免费观看| 一级啊性爱在线视频| 韩日精品福利视频一区不卡在线免| 思思热影视| 欧美日韩在线小说 | 久久久久久久人妻| 成人三一级一片aaa| 一本一道久久综合久久| 蜜色网色哟哟| 伊人五月天| 国产精品一区av在线| 国产情色在线| 国内黄色精品| 丁香五月色| 激情抓乳插进去啪啪啪日韩 | 操老熟女AV| 色精品极品| 91在线无码精品秘 软件| 91老熟女视频| 91制服丝袜| 日韩丝袜高跟制服在线观看| 99re6久热只有精品6在线直播 | 欧美最大综合网| 日韩精品国产精品五码一区二区| 麻豆国产av网| 婷婷九月| 国产97视频免费观看| 青娱乐999| 综合亚洲网| 蜜臀av中文字幕| 日韩精品9999| 二区熟妇韩日| 久久久草成人网站久久久草成人久久久草久久久 | 国产精品麻豆视频网站| 91激情| 91青青在线| 精品人妻一区二区蜜桃视频| 蜜臀久久在线视频| 久久111| 久久综合18p| 日本三级黄页| 开心激情站| 婷婷亚洲天堂| 天天爽天天| 色播丁香| 91美女丝袜诱惑视频| 亚洲欧美国产其他二区| 秋霞曰韩R级| 免费A V在线播放| 人人妻碰人人免费| 男女性无套 免费九一| 白丝一区| 综合久久少妇中文字幕| 亚洲 无码 偷拍| 高清国产精品福利网站| 亚洲日韩电影| 五十路熟女人妻一区二区三区四区五| 亚洲国产精品无石码久久| 激情小说亚洲图片| 久久久三区二区一区| 欧洲自拍第一页| 色原狠狠天天天| 男人的天堂kva| 欧美色97| 97综合网| 另类TS人妖一区二区三区| 国产无码高清操逼视频| 强奸乱伦大香蕉| 精品性爱一二三区| 色色国产| 国产日韩精品一区二区三区| 国产suv精品一区二区四| 精品人妻一区二区三区-国产精品| 国产怡红院| 日韩成人色图| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美91网站| 92大香蕉| 97免费视频在线观看| 亚洲无码超碰免费| 欧美日韩亚洲一区二区在线观看| 亚洲一区二区三区欧美日韩| 天天干少妇| 91丝袜美女| 夜草欧美| 91精品国产一区三一| 国产熟女一区二区丰满| 精品久久九| 91N综合网| 国产91福利小视频在线观看| 亚洲欧美综合区自拍另类| 18禁精品网站在线看| 日本一级黄色电影| 亚欧中文字幕在线视频| 久久午夜神马| 操婢日韩| 日本天天操| 国产av热热色| 97视频在线看| 国产 v乱码一区二| 9l视频自拍9l九色成人| 人妻 制服 日韩 中文 在线| 亚洲中文sv| 久久中文字幕一区不卡| 99热91| 99热这里是精品| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 97精品视频| 亚洲成人美女无吗| 亚洲三级网址久久最新| 美女久久久久久久久久久| 日本1区2区不卡视频| 国产精品色| 青青草无码视频| 最新无码国产| 日韩乱伦视频| 日韩无码AB| 国产真实子伦对白| 婷婷五月天色色| 久久中文色图| 日韩兔费看黄片| 国产探花精品在线| 久久手机视直播| 加勒比五月天| 亚洲成人性| 色婷婷综合久久中文字幕雪峰| 天天色综合影视网| 欧美v亚洲v日韩v最新在线二区| 欧美97日韩| 中文字幕一二三| 狠狠狠狠狠干| 国产9熟妇视频网站| 日本午夜操逼| 久污| 五月丁香黄色网| 欧美性猛交美女自慰91| 人妻娇喘 激情视频| 亚洲情色中文字幕一区| SUV一区二区在线看| 激情小说图片亚洲首页| 国产黄a三级三级三级av在线看| 怡红院成人视频| 亚洲AV麻豆Aⅴ无码电影一| 国产品精品自在在线午夜免费| a级理论午夜日本| Aa东京男人的天堂| 久久精品国产亚洲AV高级北京| 色五月69夫妻| 国产精品高清2021在线| 亚洲、日韩、综合、另类| 91中出| 色乱二区| 夜夜春夜夜操| 午夜免费福利视频一区| 久久久久白虎| 亚洲福利中文字幕在线| 97 国产精品| 新91视频.cmp| 激情久久久| 97香蕉网| 97超碰免费人人性爱| 中国一级特黄大片护士| 高清不卡 中文 人妻| 成年人性爱日韩| 日日97| 日韩pv中文| 思思热一热婷婷热一热| 国产精品熟女丝袜一区二区| 久久久涩| 97超级久久强资源| 国产AAAAAABBBBB| 亚州色站 日韩电影| 九月激情婷婷| 日韩成人人妻网站| 色婷婷综合视频| 性色亚洲| 亚洲美女 晚间男人天堂 | 美女上床网站| 2020中文字幕| 中文字幕人成乱码熟女香港| 亚洲区小说| 熟女精品一区二区三区| 亚洲风情在线观看| 校园春色综合色| 白嫩国模丰满一二三区| 欧美精品三区| 六月婷婷一区二区三区| 日本久久99| 亚洲精品一二牛牛| 综合网亚洲在线| 校园春色亚洲欧洲| 丁香九月激情啪| 欧美成人一级麻豆| 欧美一区二区三区成人性生活| 免费操逼视频下载| 精品一区二区三区国产| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 亚洲欧洲精品视频发布| 日韩啪啪视频| 亚洲日韩久久精品一区| 亚洲色堂免费视频| 日韩精品永久在线观看| 伊人国产成人av网站| 久久精品日韩专区免费观看| 日韩丝袜人妻AV| 伊人五月天| 第四色奇米影视777| 国产精品国产| av大香蕉网站| 蜜桃久久一区二区三区| 中国女人内射6XXXXX| 日本欧美中文字幕| 91欧美情色| 新视频sss国产| 亚洲综合春色| 99热欧美| 中文字幕91页| 日本精品网站在线中文| 精品综合久久久久久97| 妇人噜噜| 夜夜嗨av午夜成人| 又黄又爽在线观看视频| 天美传媒AV国产在线| 深爱五月婷婷| 国产视频不卡在线观看| 做爱A级亚欧| 午夜人人操| 男啪女色黄无遮挡免费观看| 久久久999国产精品| 成人久久久精品| 人人搡人人肉久久精品| 校园春色综合色| 丝袜狠狠草尤物人妻av91| 色墦五月丁香| 任你爽视频| 120分钟婬片免费看| 性开放中文AV高清无码免费看| 免费视频在线一区二区不卡| 99色网| 2019男人的天堂| 久久綜合很很很| 亚洲精品一二三四区| 人人妻人人操人人乐| 国产精品久久久亚洲一区| a久久| 伊人婷婷五月天| 少妇无码av专区线| 中文字幕一二区二三区人妻专区| 久久久精品91八戒| se01国产在线视频| 三级色综合| 日韩精品中文字幕一| 亚洲 日韩 丝袜 熟女 变态| 亚洲国产一区二区入口| 久久久久久久亚洲Av无码| 欧美日韩操逼动图| 激情五月天丁香社区| 五月丁香综合啪啪| 六月婷婷激情| 国产女人极品高潮毛片| 日韩激情电影中文字幕| 久操网视频| 亚洲欧美日韩综合在线尤物| 亚洲欧洲网站免费观看| 国内91熟女人妻丝袜天天精品视频在线| 精品国产片亚洲一区| 婷婷丁香五月综合| 国产免费大片| 神马久久69| 精品中文一区二区| 98超碰日本| 91成人久久| 99福利社| 97超碰日韩| 伦激情人妻另类人妻| 日本天天操| 五月天婷婷综合网| 亚洲第一页欧美| 热的中文 热的有码 热的国产| 欧美淫乱视频| 国产精品美女久久久久久网站| 日本性交操一区二区不卡系列| 黄片视频,下载| 秋霞视频一区二区| 97人肏| 黄色成品网站| 国产日韩美女小穴视频网站不卡| 91亚洲网| 日本操逼二区| 精精夜夜| 久草老司机| 探花视频免费观看国产专区| 午夜一区二区三区国产| 色婷婷丁香五月| 91国产美女丝袜足交精品视频 | 插入综合网| 99啪啪| sewuyueav| 8x福利精品第一福利视频导航| 五月天激情影院| 欧美 青青草| 欧美啪啪啪91| 插入逼91| 亚洲无码?第一页| 伊人五月天青青草婷婷| 一区二区三区在线日韩影院观看| 超碰97综合网| 狠狠中文字幕| 91在线综合网| 国产人妻久久精品一区二区三区| 综合伊人激情| 尹人大香蕉视频在线| 亚洲综合69| 人人操,人人液| 九九热九九| 婷婷月色| 2017天天透天天通天天擦| 精品久久久av无码免费| 丁香五月社区| 啊啊在线| 91人妻中文| 久久中出在线| 日本人妻最新在线中| 99久久婷婷国产综合| 另类专区加勒比| 吖在线不卡一区二区国产剧情| 久操热线| 亚欧美色图| 人妻一区视频| 婷婷香网站| 国产狂喷潮在线精品| 国产福利第一视频| 亚洲偷拍欧美激情| 国产精品麻豆视频网站| 久草色悠悠在线视频| 亚洲天天操| 色婷婷五月天| 九九九九AV| 久碰视频| 欧洲精品二区| 婷婷中文网| 91色噜噜狠狠| 91P0RNY大屁股人妻| 大胆91| 狠久久| 亚洲操人| 色噜噜日韩精品| 欧美国产日韩高清在线| 欧美第五页| 大香蕉综合| 欧美日韩小说| 国产在线视视频有精品| 俺去啦自拍| 色色色色电影网| 欧美三四五区| 欧美日韩国产高清在线一二三区 | 少妇超碰在线| 久久加勒比| 久久最新免费视频23| 91操熟女视频| 国产亚洲一黄| 亚洲熟女一区二区| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 亚洲婷婷五月天| 天天拍夜夜| 婷婷成人久久久精品| 国产一级内射高清视频 | 97资源制服丝袜| 欧美少妇色图| 粉嫩国产精品久久久| 亚洲无码成人精品| 狠狠做深爱婷婷久久二区| 操逼操网| 精品人妻一区二区三区免费视频| 草草影院日本第一页| 自拍视频大全亚洲专媒视频/一区二区三区 | 久久99999| 亚洲天天更新| 超碰免费人妻人人| 区一在线观看| 上海一级黄片| 蜜臀AV一区二区三区| 观看免费区二区三区二| 九九干| 久久久一二三四区| 久久女人视频| 国产女人极品高潮毛片| 国产夫妻性生活视频| 欧美黑人XXXⅩ高潮交| 97精品免费| 国产人妻精品一区二区三区秋霞| 激情五月丁香五月| 亚洲欧美另类图片| 人人手机欧洲亚洲国产人妻| 午夜一区二区三区国产| 可乐操亚洲蜜911| 久久香蕉影院| 久综合国内精品自在自线| 九九九九一区| 密臀在线免费观看| 国产一区二区三三视频| 欧美同性恋 的搜索结果 - 91n| 色哟哟国产精品免费网址| 最新国内自拍av免费| 色香综合天天影视综合 | 人人射人人操人人摸| 男人的天堂2018.| 新怡红院| AV高清一区| 99热婷婷| 成人精品一区二区91毛片不卡| x97av| 欧美日韩国产中文超碰| 亚洲高清无码在线桃色| 欧美精品系列| 好屌色综合| 国产精品经典一卡久久久 | 操逼片中文| 日产欧美电影一区二区三区| 90后后入| 欧美A√综合网 | 91亚州| 99超碰网| 日本好吊色视频| 精品视频123区小说区| 五月丁香六月婷| 日本精品一级二级三级| 国产9熟妇视频网站| 亚洲网污污污污| 蜜桃成人1区2区3区| 国内毛片无码一级毛片| 三级特黄60分钟播放| 啊啊啊啊好爽好舒服一区二区易域| 日本三级韩国三级美三级91| 日韩9999| 黑人精品成人一区二区三区| 99色热国产视频精品| 欧美综合国产精品久久丁香| 999色欧美中文字幕| 欧美日韩亚洲电影| 少妇三P| 久久的网站啊啊啊啊啊| av中文字幕在线熟女| 99热久| 熟女被操视频网址| 顶级丝袜熟女一区二区三区| 在线观看高清AV| 国产精品 视频| 97人人夜| 国产午夜精品一区二区三区牛牛| 天天操天天7| 精品中文一区二区| 在线中文AV| 亚洲999综合| 99久在线精品99re8热视频在线| 婷婷另类小说| 二级久久网| 亚州 综合 色图| 亚洲精品国产av天美传媒| 第45页一区二区| 婷婷成人久久久精品| 国产成人无码高清| 日本片日本片祼观看网站在线看中文版网页在线看| 国产呦精品系列在线观看| 欧美成人国产精品| 丝袜美腿校园春色| 国产和美国毛片| 久久人妻97久久久久久久| www.97在线| 精品一区二区三区四区女 | 强奸国产在线| 国产精品一二三在线看| 天天艹天天日| 操逼操逼逼操操逼91 | 91欧美www| 精品78| 一个色导综合| 久久毛卡| 另类专区在线观看| 青青草中文-久久青草精品一区二区三| 日本三级韩三级99久久| ,国产乱人伦精品一区二区三区| 色婷婷成人综合| 免费看日产一区二区三区| 艹精品| 日韩在线观看字幕精品| AAA久久| 日韩情色视频| 熟妇高潮精品一区二区三区下载| 曰本道人妻久久久在线不卡色视频| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 91岛国动作片| 欧美精品久久久久久久丰满| 国产精品婬乱一级毛片彝族| 久久草大香蕉| 精品国产污一区二区三区| 亚洲熟久久| 97干在线视频| 久久久久久人妻一区精品色欧美| 欧美性爱www免费版| www.色五月| 欧美亚洲一区二区久久久婷精品大包诱| 亚洲九区| 日韩精品9999| 欧美综合中文| 黄片免费视频2019| av凤凰久久久| 久久久久久九九九九-美女久久久久久久-成人AV | 亚洲男人天堂2| 97香蕉网| 一级啊性爱在线视频| 青娱乐亚洲热| 97在线播放 | 久久夜精品一区二区三区| 另类小说欧美激情校园春色| 香伊人在线| 亚洲日韩精品在线播放| 美国久久一二三四| 久久久久久裸体| 黄色工厂这里只有精品| 国产精品久久久久久久久久梁医生| 亚洲精品美女久久久久久久久| 激情丁香五月婷婷| 日本五十路在线| 精品视频一区二区| 国产超碰| 91天美传媒在线观看| 午夜αv| 26uuu性物| 久操高青| 97超碰精品图片| 亚洲AV秘 精品久久老牛影视| 久99| 人妻超碰青青草98| AⅤ片水多多| 日本在线视频导航| 亚洲男人的天堂网| AV乱伦专区| 蜜桃久久综合视频| 日韩AV噜噜噜一区二区三区四区| 在线有码中文字幕| 亚洲人妻av| 亚洲少妇在线影音| 精品人成视频在线观看| 久久精品人体AV| 日韩AV噜噜噜一区二区三区四区| 久久久久人妻二区精品叶可怜| 中文字幕 一区二区 亚洲无码| 嗯嗯啊啊啊好爽| 国产成人bd在线观看| 色超碰综合| 一级AV性爱| 怡红院怡春院| 超碰欧美| 久久这里都是精品| 色欲av国内精品久久久久久| 日本人人操人人操| 国产日韩精品人妻久久久久色欲网站| 神马福利久草| 囯产精品强| 亚欧免费观看视频| 亚洲国产综合久久久性感熟妇| 97中文字幕九区| 色婷婷影院| 黑人性暴力毛片| 强奸xx国产| AV有码在线| 五月丁香六月激情综合| 职场同事知名国产国产精品久久欧美日韩 | 亚洲无码视频免费在线观看网址! J?P?NESEHD熟女熟妇伦 | 中文字幕一区 二区三四五 区日 日骚| 国产熟妇一区二区| 91亚洲欧美激情| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 97超级久久| 99热这里只有精品8| 欧美—性—交—色| 日韩精品一区二区三区色欲| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 亚洲男人的天堂va亚洲男人社| 欧美精品99久久久**| 中文字幕十五区| 91人妻中文| 婷婷五月天色网| 伊人影院综合是一个与深夜成人在线| 人妻喷水| 五月香婷婷| 日韩免费a级毛片无码a∨| 天天综合网91入口| 综合伊人网12色| 丁香五月天久久精品视频一区二区三区| 中文字幕,人妻,日韩| 校园春色亚洲欧洲| 亚洲国产婷婷在线播放| 亚洲精品黑丝| 99精彩视频| 日韩在线国产字幕| 欧美成人色| 777奇米影视777四色| 啊啊啊啊好爽好舒服一区二区易域| 变态乱伦伪娘灌肠一区二区| 果冻传媒A片一二三区| 一级性爱aaaa| 久久精品一区二区一8| 99re99视频在线免费观看| 91干熟女| 九九综合九九综合| 欧美综合网1| 26uuu国产| 特级特黄一级毛片免费| 加勒比色99999| 久久一二区四| 黄色小视频日本txt| 熟妇色99| 日本男人插女人的逼黄色| 欧美性爱日韩性爱| 天天爱综合网| 吉田爱美AV在线| xxx0国产在线播放| 婷婷午夜清品久久久久久久性色视频观| 黄色成品网站| 亚洲av淫乱| 日产操逼| 国产久9| 亚洲自拍欧美国产首页网曝| 五月天色图| 强歼乱伦资源网| 国产91福利小视频在线观看| 天天干1区2区在线| 黄色二级片网站| 六十路日本| 成人精品无码| 欧美碰碰综合色| B049AV在线播放| 亚州宗合另类| 国产黄色影片在线观看| 天天噜| 亚洲色图欧美色图综合| 成 人 影视 一区 二区 三区 四区 | 免费一级性爱久久| 欧美激情专区| 91国产伊人大香蕉| 91亚州欧美| 久久,精品一二三| 天天色综亚洲91污| 欧美一区二区福利在线| 人妻熟女一区二区三区视频| 亚洲天堂男人天堂网| 韩日性爱av| 中日韩久久久| 青青草在线视频欧美| 天堂射| 五十路熟女人妻一区二区三区四区五| 后入式在线免费观看60秒| 天美国产精品| 婷婷五月天成人| 亚洲精品一二牛牛| 九九九九热| 78精品在线| 久久影视二区三区行押| 天天操人人操骚逼网站| 亚洲日本成人动漫| 日本福利二区视频| 欧美日韩在线视频网站| 日韩AV无码中文一区二区| 黄总AV色图| 大香蕉伊利av| 色婷婷五月天| 26uuu偷拍亚洲欧洲综合| 神马影院午夜福利久久久| 另类 日韩 熟女| 亚洲欧洲日韩中文字幕一区| 亚洲超碰AV| 人人操,操人人| av在线一区二区三区| 精品成人动漫一区二区| 久久黄黄黄| 欧美性爱一区二区三区| 色香综合天天影视综合 | 久久大香蕉97| 国产精品白丝www| 日韩性色| 91久久青青草原精品| 91老熟妇| 另类天堂| 欧美性爱综合,免费| 操啊国产| 久久久亚洲Av| www.av在线视频| 日产操逼| 国产精品久久久无码AV网站| 素人一区二区三区日韩| 无码高清国产AV| 久久精品国内Av熟女高清| 国产隔壁老王影院在线| 隔壁邻居波多野结衣中文字幕| 91人妻精华帖| 精品999一区二区| 色悠久| 人人操人人爽人人操人人| 桃花色综合影院| 7777奇米影视久久| 黄页av| 欧美一区二区三区成人性生活| 97超碰国产亚洲精品| 99re黄| 思思热在线视频在线| 亚欧免费| 夜夜操青青草| 激情综合五月婷婷| 国产久久久9999| 九九十八精品| 精产国品一区二三产品|