亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? core_graphics.cpp

?? 用DirectX編寫RPG游戲-Programming.Role.Playing.Games.with.DirectX
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    while(Mesh != NULL) {
      if(Mesh->m_SkinMesh != NULL) {
        Matrix = new D3DXMATRIX[Mesh->m_NumBones];
        for(i=0;i<Mesh->m_NumBones;i++)
          D3DXMatrixIdentity(&Matrix[i]);
        Mesh->m_SkinMesh->UpdateSkinnedMesh(Matrix, Mesh->m_Mesh);
        delete [] Matrix;
      }
      Mesh = Mesh->m_Next;
    }
  }

  // Calculate bounding box and sphere
  if((Mesh = m_Meshes) != NULL) {
    while(Mesh != NULL) {
      m_Min.x = min(m_Min.x, Mesh->m_Min.x);
      m_Min.y = min(m_Min.y, Mesh->m_Min.y);
      m_Min.z = min(m_Min.z, Mesh->m_Min.z);
      m_Max.x = max(m_Max.x, Mesh->m_Max.x);
      m_Max.y = max(m_Max.y, Mesh->m_Max.y);
      m_Max.z = max(m_Max.z, Mesh->m_Max.z);
      m_Radius = max(m_Radius, Mesh->m_Radius);

      Mesh = Mesh->m_Next;
    }
  }

  return TRUE;
}

void cMesh::ParseXFileData(IDirectXFileData *pDataObj, sFrame *ParentFrame, char *TexturePath)
{
  IDirectXFileObject *pSubObj  = NULL;
  IDirectXFileData   *pSubData = NULL;
  IDirectXFileDataReference *pDataRef = NULL;
  const GUID *Type = NULL;
  char       *Name = NULL;
  DWORD       Size;
  sFrame     *SubFrame = NULL;
  char        Path[MAX_PATH];

  sFrame     *Frame = NULL;
  D3DXMATRIX *FrameMatrix = NULL;

  sMesh         *Mesh = NULL;
  ID3DXBuffer   *MaterialBuffer = NULL;
  D3DXMATERIAL  *Materials = NULL;
  ID3DXBuffer   *Adjacency = NULL;
  DWORD         *AdjacencyIn = NULL;
  DWORD         *AdjacencyOut = NULL;

  DWORD i;
  BYTE  **Ptr;

  // Get the template type
  if(FAILED(pDataObj->GetType(&Type)))
    return;

  // Get the template name (if any)
  if(FAILED(pDataObj->GetName(NULL, &Size)))
    return;
  if(Size) {
    if((Name = new char[Size]) != NULL)
      pDataObj->GetName(Name, &Size);
  }

  // Give template a default name if none found
  if(Name == NULL) {
    if((Name = new char[9]) == NULL)
      return;
    strcpy(Name, "$NoName$");
  }

  // Set sub frame
  SubFrame = ParentFrame;

  // Process the templates

  // Frame
  if(*Type == TID_D3DRMFrame) {
    // Create a new frame structure
    Frame = new sFrame();

    // Store the name
    Frame->m_Name = Name;
    Name = NULL;

    // Add to parent frame
    Frame->m_Parent = ParentFrame;
    Frame->m_Sibling = ParentFrame->m_Child;
    ParentFrame->m_Child = Frame;

    // Increase frame count
    m_NumFrames++;

    // Set sub frame parent
    SubFrame = Frame;
  }

  // Frame transformation matrix
  if(*Type == TID_D3DRMFrameTransformMatrix) {
    if(FAILED(pDataObj->GetData(NULL, &Size, (PVOID*)&FrameMatrix)))
      return;
    ParentFrame->m_matOriginal = *FrameMatrix;
  }

  // Mesh
  if(*Type == TID_D3DRMMesh) {
    // See if mesh already loaded
    if(m_Meshes == NULL || m_Meshes->FindMesh(Name) == NULL) {
      // Create a new mesh structure
      Mesh = new sMesh();

      // Store the name
      Mesh->m_Name = Name;
      Name = NULL;

      // Load mesh data
      if(FAILED(D3DXLoadSkinMeshFromXof(pDataObj, 0,
                  m_Graphics->GetDeviceCOM(), 
                  &Adjacency,
                  &MaterialBuffer, &Mesh->m_NumMaterials, 
                  &Mesh->m_BoneNames, &Mesh->m_BoneTransforms,
                  &Mesh->m_SkinMesh))) {
        delete Mesh;
        return;
      }

      // Calculate the bounding box and sphere
      if(SUCCEEDED(Mesh->m_SkinMesh->LockVertexBuffer(D3DLOCK_READONLY, (BYTE**)&Ptr))) {
        D3DXComputeBoundingBox((void*)Ptr, Mesh->m_SkinMesh->GetNumVertices(), Mesh->m_SkinMesh->GetFVF(), &Mesh->m_Min, &Mesh->m_Max);
        D3DXComputeBoundingSphere((void*)Ptr, Mesh->m_SkinMesh->GetNumVertices(), Mesh->m_SkinMesh->GetFVF(), &D3DXVECTOR3(0.0f,0.0f,0.0f), &Mesh->m_Radius);
        Mesh->m_SkinMesh->UnlockVertexBuffer();
      }

      // Convert to regular mesh if no bones
      if(!(Mesh->m_NumBones = Mesh->m_SkinMesh->GetNumBones())) {
        // Convert to a regular mesh
        Mesh->m_SkinMesh->GetOriginalMesh(&Mesh->m_Mesh);
        ReleaseCOM(Mesh->m_SkinMesh);
      } else {
        // Create the bone matrix array and clear it out
        Mesh->m_Matrices = new D3DXMATRIX[Mesh->m_NumBones];
        for(i=0;i<Mesh->m_NumBones;i++)
          D3DXMatrixIdentity(&Mesh->m_Matrices[i]);

        // Create the frame mapping matrix array and clear out
        Mesh->m_FrameMatrices = new D3DXMATRIX*[Mesh->m_NumBones];
        for(i=0;i<Mesh->m_NumBones;i++)
          Mesh->m_FrameMatrices[i] = NULL;

        // Get a pointer to bone matrices
        Mesh->m_BoneMatrices = (D3DXMATRIX*)Mesh->m_BoneTransforms->GetBufferPointer();

        AdjacencyIn  = (DWORD*)Adjacency->GetBufferPointer();
        AdjacencyOut = new DWORD[Mesh->m_SkinMesh->GetNumFaces() * 3];

        // Generate the skin mesh object
        if(FAILED(Mesh->m_SkinMesh->GenerateSkinnedMesh(
                    D3DXMESH_WRITEONLY, 0.0f, 
                    AdjacencyIn, AdjacencyOut, 
                    &Mesh->m_Mesh))) {
          // Convert to a regular mesh if error
          Mesh->m_SkinMesh->GetOriginalMesh(&Mesh->m_Mesh);
          ReleaseCOM(Mesh->m_SkinMesh);
          Mesh->m_NumBones = 0;
        }

        delete [] AdjacencyOut;
        ReleaseCOM(Adjacency);
      }

      // Load materials or create a default one if none
      if(!Mesh->m_NumMaterials) {
        // Create a default one
        Mesh->m_Materials = new D3DMATERIAL8[1];
        Mesh->m_Textures  = new LPDIRECT3DTEXTURE8[1];

        ZeroMemory(Mesh->m_Materials, sizeof(D3DMATERIAL8));
        Mesh->m_Materials[0].Diffuse.r = 1.0f;
        Mesh->m_Materials[0].Diffuse.g = 1.0f;
        Mesh->m_Materials[0].Diffuse.b = 1.0f;
        Mesh->m_Materials[0].Diffuse.a = 1.0f;
        Mesh->m_Materials[0].Ambient   = Mesh->m_Materials[0].Diffuse;
        Mesh->m_Materials[0].Specular  = Mesh->m_Materials[0].Diffuse;
        Mesh->m_Textures[0] = NULL;

        Mesh->m_NumMaterials = 1;
      } else {
        // Load the materials
        Materials = (D3DXMATERIAL*)MaterialBuffer->GetBufferPointer();
        Mesh->m_Materials = new D3DMATERIAL8[Mesh->m_NumMaterials];
        Mesh->m_Textures  = new LPDIRECT3DTEXTURE8[Mesh->m_NumMaterials];

        for(i=0;i<Mesh->m_NumMaterials;i++) {
          Mesh->m_Materials[i] = Materials[i].MatD3D;
          Mesh->m_Materials[i].Ambient = Mesh->m_Materials[i].Diffuse;
       
          // Build a texture path and load it
          sprintf(Path, "%s%s", TexturePath, Materials[i].pTextureFilename);
          if(FAILED(D3DXCreateTextureFromFile(m_Graphics->GetDeviceCOM(),
                                              Path,
                                              &Mesh->m_Textures[i]))) {
            Mesh->m_Textures[i] = NULL;
          }
        }
      }
      ReleaseCOM(MaterialBuffer);

      // link in mesh
      Mesh->m_Next = m_Meshes;
      m_Meshes = Mesh;
      m_NumMeshes++;
    } else {
      // Find mesh in list
      Mesh = m_Meshes->FindMesh(Name);
    }

    // Add mesh to frame 
    if(Mesh != NULL)
      ParentFrame->AddMesh(Mesh);
  }

  // Skip animation sets and animations
  if(*Type == TID_D3DRMAnimationSet || *Type == TID_D3DRMAnimation || *Type == TID_D3DRMAnimationKey) {
    delete [] Name;
    return;
  }

  // Release name buffer
  delete [] Name;

  // Scan for embedded templates
  while(SUCCEEDED(pDataObj->GetNextObject(&pSubObj))) {

    // Process embedded references
    if(SUCCEEDED(pSubObj->QueryInterface(IID_IDirectXFileDataReference, (void**)&pDataRef))) {
      if(SUCCEEDED(pDataRef->Resolve(&pSubData))) {
        ParseXFileData(pSubData, SubFrame, TexturePath);
        ReleaseCOM(pSubData);
      }
      ReleaseCOM(pDataRef);
    }

    // Process non-referenced embedded templates
    if(SUCCEEDED(pSubObj->QueryInterface(IID_IDirectXFileData, (void**)&pSubData))) {
      ParseXFileData(pSubData, SubFrame, TexturePath);
      ReleaseCOM(pSubData);
    }
    ReleaseCOM(pSubObj);
  }

  return;
}

void cMesh::MapFramesToBones(sFrame *Frame)
{
  sMesh *Mesh;
  DWORD i;
  char **Name;

  // Return if no more frames to map
  if(Frame == NULL || Frame->m_Name == NULL)
    return;

  // Scan through meshes looking for bone matches
  Mesh = m_Meshes;
  while(Mesh != NULL) {
    if(Mesh->m_NumBones && Mesh->m_BoneNames != NULL && Mesh->m_Matrices != NULL && Mesh->m_FrameMatrices != NULL) {
      Name = (char**)Mesh->m_BoneNames->GetBufferPointer();
      for(i=0;i<Mesh->m_NumBones;i++) {
        if(!strcmp(Frame->m_Name, Name[i])) {
          Mesh->m_FrameMatrices[i] = &Frame->m_matCombined;
          break;
        }
      }
    }
    Mesh = Mesh->m_Next;
  }

  // Scan through child frames
  MapFramesToBones(Frame->m_Child);

  // Scan through sibling frames
  MapFramesToBones(Frame->m_Sibling);
}

BOOL cMesh::Free()
{
  m_Graphics = NULL;
 
  m_NumMeshes = 0;
  delete m_Meshes;
  m_Meshes = NULL;

  m_NumFrames = 0;
  delete m_Frames;
  m_Frames = NULL;

  m_Min.x = m_Min.y = m_Min.z = m_Max.x = m_Max.y = m_Max.z = 0.0f;
  m_Radius = 0.0f;

  return TRUE;
}

BOOL cMesh::IsLoaded()
{
  if(m_Meshes != NULL && m_Frames != NULL)
    return TRUE;
  return FALSE;
}

long cMesh::GetNumFrames()
{
  return m_NumFrames;
}

sFrame *cMesh::GetParentFrame()
{
  return m_Frames;
}

sFrame *cMesh::GetFrame(char *Name)
{
  if(m_Frames == NULL)
    return NULL;
  return m_Frames->FindFrame(Name);
}

long cMesh::GetNumMeshes()
{
  return m_NumMeshes;
}

sMesh *cMesh::GetParentMesh()
{
  return m_Meshes;
}

sMesh *cMesh::GetMesh(char *Name)
{
  if(m_Meshes == NULL)
    return NULL;
  return m_Meshes->FindMesh(Name);
}

BOOL cMesh::GetBounds(float *MinX, float *MinY, float *MinZ, float *MaxX, float *MaxY, float *MaxZ, float *Radius)
{
  if(MinX != NULL)
    *MinX = m_Min.x;
  if(MinY != NULL)
    *MinY = m_Min.y;
  if(MinZ != NULL)
    *MinZ = m_Min.z;

  if(MaxX != NULL)
    *MaxX = m_Max.x;
  if(MaxY != NULL)
    *MaxY = m_Max.y;
  if(MaxZ != NULL)
    *MaxZ = m_Max.z;

  if(Radius != NULL)
    *Radius = m_Radius;

  return TRUE;
}

cObject::cObject()
{
  m_Graphics       = NULL;
  m_Mesh           = NULL;
  m_AnimationSet   = NULL;
}

cObject::~cObject()
{
  Free();
}

BOOL cObject::Create(cGraphics *Graphics, cMesh *Mesh)
{
  if((m_Graphics = Graphics) == NULL)
    return FALSE;
  m_Mesh = Mesh;

  Move(0.0f, 0.0f, 0.0f);
  Rotate(0.0f, 0.0f, 0.0f);
  Scale(1.0f, 1.0f, 1.0f);

  return TRUE;
}

BOOL cObject::Free()
{
  m_Graphics     = NULL;
  m_Mesh         = NULL;
  m_AnimationSet = NULL;

  return TRUE;
}

BOOL cObject::EnableBillboard(BOOL Enable)
{
  m_Pos.EnableBillboard(Enable);
  return TRUE;
}

BOOL cObject::AttachToObject(cObject *Object, char *FrameName)
{
  sFrame *Frame;

  if(Object == NULL || Object->m_Mesh == NULL) {
    m_Pos.SetCombineMatrix1(NULL);
    m_Pos.SetCombineMatrix2(NULL);
  } else {
    Frame = Object->m_Mesh->GetFrame(FrameName);
    if(Frame == NULL) {
      m_Pos.SetCombineMatrix1(NULL);
      m_Pos.SetCombineMatrix2(NULL);
    } else {
      m_Pos.SetCombineMatrix1(&Frame->m_matCombined);
      m_Pos.SetCombineMatrix2(Object->m_Pos.GetMatrix());
    }
  }

  return TRUE;
}

BOOL cObject::Move(float XPos, float YPos, float ZPos)
{
  return m_Pos.Move(XPos, YPos, ZPos);
}

BOOL cObject::MoveRel(float XAdd, float YAdd, float ZAdd)
{
  return m_Pos.MoveRel(XAdd, YAdd, ZAdd);
}

BOOL cObject::Rotate(float XRot, float YRot, float ZRot)
{
  return m_Pos.Rotate(XRot, YRot, ZRot);
}

BOOL cObject::RotateRel(float XAdd, float YAdd, float ZAdd)
{
  return m_Pos.RotateRel(XAdd, YAdd, ZAdd);
}

BOOL cObject::Scale(float XScale, float YScale, float ZScale)
{
  return m_Pos.Scale(XScale, YScale, ZScale);
}

BOOL cObject::ScaleRel(float XAdd, float YAdd, float ZAdd)
{
  return m_Pos.ScaleRel(XAdd, YAdd, ZAdd);
}

D3DXMATRIX *cObject::GetMatrix()
{
  return m_Pos.GetMatrix(); 
}

BOOL cObject::SetMesh(cMesh *Mesh)
{
  m_Mesh = Mesh;

  return TRUE;
}

cMesh *cObject::GetMesh()
{
  return m_Mesh;
}

BOOL cObject::SetAnimation(cAnimation *Animation, char *Name, unsigned long StartTime)
{
  m_StartTime = StartTime;
  if(Animation == NULL)
    m_AnimationSet = NULL;
  else
    m_AnimationSet = Animation->GetAnimationSet(Name);

  return TRUE;
}

char *cObject::GetAnimation()
{
  if(m_AnimationSet == NULL)
    return NULL;
  return m_AnimationSet->m_Name;
}

BOOL cObject::ResetAnimation(unsigned long StartTime)
{
  m_StartTime = StartTime;
  return TRUE;
}

float cObject::GetXPos()
{
  return m_Pos.GetXPos();
}

float cObject::GetYPos()
{
  return m_Pos.GetYPos();
}

float cObject::GetZPos()
{
  return m_Pos.GetZPos();
}

float cObject::GetXRotation()
{
  return m_Pos.GetXRotation();
}

float cObject::GetYRotation()
{
  return m_Pos.GetYRotation();
}

float cObject::GetZRotation()
{
  return m_Pos.GetZRotation();
}

float cObject::GetXScale()
{
  return m_Pos.GetXScale();
}

float cObject::GetYScale()
{
  return m_Pos.GetYScale();
}

float cObject::GetZScale()
{
  return m_Pos.GetZScale();
}

BOOL cObject::GetBounds(float *MinX, float *MinY, float *MinZ, float *MaxX, float *MaxY, float *MaxZ, float *Radius)
{
  float Length, XScale, YScale, ZScale;

  if(m_Mesh == NULL)
    return FALSE;

  m_Mesh->GetBounds(MinX, MinY, MinZ, MaxX, MaxY, MaxZ, Radius);

  // Scale bounds
  XScale = m_Pos.GetXScale();
  YScale = m_Pos.GetYScale();
  ZScale = m_Pos.GetZScale();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区免费观看| 午夜精品福利一区二区三区av| 欧美群妇大交群中文字幕| 国产精品亚洲午夜一区二区三区| 亚洲欧美成人一区二区三区| 亚洲精品在线免费播放| 欧美在线观看视频一区二区三区| 成人免费不卡视频| 国产一区二区久久| 日本中文字幕一区二区视频| 亚洲综合精品自拍| 国产精品免费视频一区| 欧美r级在线观看| 欧美日韩一区不卡| 91黄视频在线| 99精品黄色片免费大全| 国内精品久久久久影院色| 日韩av电影免费观看高清完整版在线观看| 亚洲色图视频网| 国产日本亚洲高清| 欧美刺激午夜性久久久久久久| 在线亚洲高清视频| 91免费视频大全| 成人激情视频网站| 成人性生交大片免费看视频在线| 极品少妇xxxx精品少妇| 麻豆精品精品国产自在97香蕉| 天堂影院一区二区| 午夜欧美视频在线观看 | 久久久久久久久久久黄色| 欧美午夜精品电影| 91精品福利视频| 一本大道久久a久久综合| 99久久国产综合精品色伊| 国产激情精品久久久第一区二区| 精品一区中文字幕| 精品亚洲成a人在线观看| 久久精品久久综合| 国内精品嫩模私拍在线| 国产精品羞羞答答xxdd| 国产成人免费xxxxxxxx| 成人免费观看视频| k8久久久一区二区三区| 99在线精品免费| 91麻豆精品视频| 欧美日韩一区二区欧美激情| 欧美日韩亚洲综合| 欧美一级淫片007| 精品国产一区二区三区忘忧草| 精品日韩在线观看| 国产拍揄自揄精品视频麻豆| 中文字幕欧美日韩一区| 亚洲日本一区二区三区| 亚洲一区中文日韩| 蜜臀久久久久久久| 国产精品原创巨作av| caoporm超碰国产精品| 91黄色小视频| 欧美电影免费观看高清完整版在线 | 自拍偷在线精品自拍偷无码专区| 1024成人网色www| 香蕉加勒比综合久久| 麻豆精品在线视频| 粉嫩av一区二区三区在线播放| 色婷婷亚洲精品| 91精品国产综合久久久久| 久久精品一区二区三区av| 自拍偷拍亚洲欧美日韩| 午夜精品在线视频一区| 国产精品一品视频| 91国内精品野花午夜精品| 日韩一区二区三区免费看| 欧美激情一区二区三区在线| 亚洲欧美日韩国产成人精品影院 | 亚洲sss视频在线视频| 久久99九九99精品| 91婷婷韩国欧美一区二区| 欧美一区二区女人| 亚洲国产激情av| 日韩一区精品字幕| 成人91在线观看| 日韩欧美资源站| 亚洲欧美国产三级| 国产一区二区免费视频| 欧美午夜影院一区| 国产亲近乱来精品视频 | 国产精品综合视频| 色88888久久久久久影院野外| 日韩一区二区在线免费观看| 中文字幕视频一区| 久久精品99国产国产精| 色一区在线观看| 久久久噜噜噜久噜久久综合| 亚洲一区二区三区不卡国产欧美| 国产一区二区成人久久免费影院 | 欧美高清一级片在线观看| 亚洲成av人片一区二区梦乃 | 日韩免费观看高清完整版| 亚洲日韩欧美一区二区在线| 国产一区二区三区在线观看免费视频| 91黄色免费版| 中文字幕精品一区二区精品绿巨人 | 国产精品伦理一区二区| 免费不卡在线观看| 欧美三级资源在线| 亚洲天堂网中文字| 国产91高潮流白浆在线麻豆 | 国产人久久人人人人爽| 视频一区二区不卡| 欧洲一区二区三区在线| 成人免费在线视频观看| 国产乱码精品一区二区三区av| 91精品国产综合久久久久久久久久 | 国产真实精品久久二三区| 欧美日韩国产美| 亚洲黄色在线视频| av高清不卡在线| 国产嫩草影院久久久久| 国产专区欧美精品| 日韩免费看的电影| 蜜桃传媒麻豆第一区在线观看| 欧洲中文字幕精品| 亚洲精品国产无天堂网2021| 波波电影院一区二区三区| 久久久国产一区二区三区四区小说| 美女网站色91| 日韩精品一区二区三区四区| 毛片一区二区三区| 欧美理论片在线| 婷婷综合另类小说色区| 欧美精品乱人伦久久久久久| 天天影视色香欲综合网老头| 欧美日韩1234| 免费在线视频一区| 日韩亚洲欧美一区| 精品制服美女久久| 久久精品视频在线免费观看| 国产乱子伦一区二区三区国色天香| 欧美成人video| 国产精品亚洲一区二区三区在线 | 久久精品噜噜噜成人88aⅴ| 日韩一级成人av| 国产一区二区久久| 中文字幕 久热精品 视频在线| 不卡高清视频专区| 一区二区三区在线观看动漫| 欧美三级电影网站| 免费在线观看精品| 久久久精品欧美丰满| eeuss鲁一区二区三区| 亚洲三级视频在线观看| 欧美日韩午夜在线| 久久精品国产成人一区二区三区 | 在线看国产一区| 婷婷一区二区三区| 久久午夜羞羞影院免费观看| 激情综合色播激情啊| 国产精品无圣光一区二区| 色妹子一区二区| 日韩成人精品在线| 国产日韩欧美高清| 91成人网在线| 精品一区二区影视| 成人欧美一区二区三区1314| 欧美日韩久久不卡| 国产综合久久久久久久久久久久| 中文字幕亚洲一区二区va在线| 91黄色在线观看| 极品瑜伽女神91| 亚洲欧美在线视频| 91精品久久久久久久91蜜桃| 国产福利电影一区二区三区| 一区二区三区精品久久久| 日韩一区二区视频在线观看| 成人黄色国产精品网站大全在线免费观看 | 欧美国产日韩精品免费观看| 色菇凉天天综合网| 久久精品国产久精国产爱| 亚洲欧美日韩中文播放| 精品欧美黑人一区二区三区| 91麻豆成人久久精品二区三区| 另类小说一区二区三区| 亚洲免费观看在线观看| 日韩欧美国产一区二区在线播放 | 国产综合色视频| 亚洲一区二区三区在线播放| 久久久亚洲午夜电影| 欧美日韩亚洲另类| 99久久精品免费看| 国内精品在线播放| 亚洲成人av在线电影| 国产精品伦理在线| 精品久久五月天| 欧美另类久久久品| 色久优优欧美色久优优| 国产精品一区免费在线观看| 日韩成人精品在线观看| 一区二区三区高清不卡| 中文字幕欧美日韩一区| 亚洲精品在线观看视频|