Unity基礎(chǔ)(12)-四元數(shù)與歐拉角與矩陣

Unity中表示旋轉(zhuǎn)有三種方式:四元數(shù)判莉,歐拉角齿诞,矩陣

一、四元數(shù)

1骂租、概念

Quaternion中存放了x祷杈,y,z渗饮,w四個數(shù)據(jù)成員但汞,可以用下標(biāo)來進(jìn)行訪問,對應(yīng)的下標(biāo)分別是0,1,2,3
其實(shí)最簡單來說:四元數(shù)就是表示一個3D物體的旋轉(zhuǎn)互站,它是一種全新數(shù)學(xué)數(shù)字私蕾,甚至不是復(fù)數(shù)。
四元數(shù)其實(shí)就是表示旋轉(zhuǎn)胡桃。

1踩叭、四元數(shù)的書寫格式
q = w v  這里w是標(biāo)量,v是向量
另一種表示格式
q = w(x,y,z) 看到這里我們就熟悉了翠胰。

一般我們在Unity中表示旋轉(zhuǎn)的方式:
c.Rotate (new Vector3(10,0,0));
c.Rotate (Quaternion.identity * Vector3.left);
2容贝、Unity中四元數(shù)API
  • 1.來把角度轉(zhuǎn)化為相應(yīng)四元素
Quaternion rot=Quaternion.Euler(30,60之景,90)斤富;
旋轉(zhuǎn)順序是,先繞Z軸轉(zhuǎn)動90度锻狗,再繞X軸轉(zhuǎn)動30度满力,最后繞Y軸轉(zhuǎn)動60度
  • 2.繞指定軸旋轉(zhuǎn)指定角度相應(yīng)的四元素
Quaternion rot= Quaternion.AngleAxis(60, transform.forward);
意思為繞自身正方向轉(zhuǎn)60度其相應(yīng)的四元素,當(dāng)然了轻纪,第一個參數(shù)可以是其他方向變量
  • 3.兩個四元素相乘油额,代表按順序進(jìn)行兩次旋轉(zhuǎn)
Quaternion rot1=Quaternion.Euler(0,30刻帚,0)潦嘶;
Quaternion rot2=Quaternion.Euler(0,0我擂,45)衬以;
Quaternion rot=rot2*rot1缓艳;
意思是先繞y旋轉(zhuǎn)30度再繞z旋轉(zhuǎn)45度校摩,所以看峻,你要先繞哪個四元素先旋轉(zhuǎn)就放最右邊
  • 4.四元素與向量相乘,得到的是將原向量旋轉(zhuǎn)后的新向量
Vector3 to = Quaternion.AngleAxis(45, Vector3.up)* Vector3.forward    
to是將Vector3.forward繞Vector3.up旋轉(zhuǎn)45度后得到的新向量
  • 5.已知兩個向量衙吩,求從一個向量轉(zhuǎn)到另一個向量的四元數(shù):
Quaternion rot=Quaternion.FromToRotation(Vector3.up互妓,Vector3.forward);
這的意思是創(chuàng)建一個從y軸正方向到z軸正方向的旋轉(zhuǎn)角度所對應(yīng)的四元數(shù)
例子:
Vector3 aimDirection=(targetTrans.position – transform.position).normalized;
Quaternion rot = Quaternion.FromToRotation(transform.up,aimDirection)坤塞;
transform.rotation = rot * transform.rotation;
此游戲?qū)ο笞陨磙D(zhuǎn)向這個計(jì)算出來的偏轉(zhuǎn)角所對應(yīng)的四元數(shù)冯勉,如果將此至于Update中就可以做到不斷對準(zhǔn)目標(biāo)
  • 6.創(chuàng)建一個讓Z軸正方向和Y軸正方向指向規(guī)定方向的旋轉(zhuǎn)
Quaternion rot = Quaternion.LookRotation(Vector3.right, Vector3.down);
這的意思是創(chuàng)建一個讓Z軸正方向指向世界坐標(biāo)x軸正向,y軸正方向豎直向下的旋轉(zhuǎn)角度所對應(yīng)的四元數(shù)
Vector3 vr = new Vector3(1,0,0);  
Quaternion q = Quaternion.LookRotation(vr);  

void SetLookRotation(Vector3 view);
void SetLookRotation(Vector3 view,Vector3 up);

也是根據(jù)指定的向前和向上向量創(chuàng)建四元數(shù)摹芙,本質(zhì)計(jì)算過程和LookRotation一樣灼狰,
只不過LookRotation是Quaternion上的靜態(tài)函數(shù),而SetLookRotation則是Quaternion的成員函數(shù)浮禾。
  • 7.已知兩個由四元數(shù)代表的旋轉(zhuǎn)角度交胚,求出從一個角度漸變到另一個角度的增量
Quaternion rot=Quaternion.Euler(0,30盈电,0)
Quaternion targetRot= rot*transform.rotation蝴簇;
transform.rotation= Quaternion.RotateTowards(transform.rotation,targetRot匆帚,90*Time.deltaTime)熬词;
意思為游戲?qū)ο蟮慕嵌葧饾u向targetRot以90*Time.deltaTime的角速度(90度每秒)逐漸逼近,因?yàn)檫@代碼并不能夠在一幀中完成所以要放于update中
  • 8.兩個四元數(shù)之間的線性插值lerp
transform.rotation=Quaternion.Lerp(transform.rotation,Vector3.up吸重,0.5f)互拾;
第一個參數(shù)是起始的角度所對應(yīng)的四元數(shù)
第一個參數(shù)是終點(diǎn)的角度所對應(yīng)的四元數(shù)
第三個參數(shù)是這個過程需要多少秒
  • 9.兩個四元數(shù)之間的球形插值Slerp
transform.rotation=Quaternion.Slerp(transform.rotation,Vector3.up嚎幸,0.5f)摩幔;
第一個參數(shù)是起始的角度所對應(yīng)的四元數(shù)
第一個參數(shù)是終點(diǎn)的角度所對應(yīng)的四元數(shù)
第三個參數(shù)是這個過程需要多少秒
  • 10.旋轉(zhuǎn)軸和旋轉(zhuǎn)角度算出四元數(shù)
Quaternion RotateTowards(Quaternion from,Quaternion to, float maxDegreesDelta);
以maxDegreesDelta作為角度步長計(jì)算從from到[to]
根據(jù)旋轉(zhuǎn)軸和旋轉(zhuǎn)角度算出四元數(shù)
  • 11.四元數(shù)對應(yīng)的三個軸向的歐拉角
Quaternion.eulerAngles
存放四元數(shù)對應(yīng)的三個軸向的歐拉角,分別是繞x軸鞭铆、y軸或衡、z軸旋轉(zhuǎn)的角度

Quaternion q3 = new Quaternion();  
q3.eulerAngles = new Vector3(10, 30, 20);  
Quaternion qx3 = Quaternion.AngleAxis(10,Vector3.right);          
Quaternion qy3 = Quaternion.AngleAxis(30,Vector3.up);  
Quaternion qz3 = Quaternion.AngleAxis(20,Vector3.forward);            
Quaternion qxyz3 = qz3*qy3*qx3;  
從這里可以看出unity中旋轉(zhuǎn)順序也是按先繞x軸旋轉(zhuǎn),然后y车遂,最后z封断。unity中對向量應(yīng)用旋轉(zhuǎn)量使用的是向量右乘,即如下:
Vector3 newV = qxyz3*v=qz3*qy3*qx3*v;
四元數(shù)實(shí)例
  • eulerAngles
public class EulerAngle: MonoBehaviour
{
    // 兩個物體A,B 
    public Transform A, B;
    // 默認(rèn)角度 
    Quaternion rotations=Quaternion.identity;
    Vector3 eulerAngle = Vector3.zero;
    float speed = 10.0f;

    void Update()
    {
        //第一種方式:將Quaternion賦值給transform的rotation
        rotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);
        A.rotation = rotations;
        //第二種方式:將三維向量代表的歐拉角直接賦值給transform的eulerAngles
        eulerAngle = new Vector3(0.0f, speed * Time.time, 0.0f);
        B.eulerAngles = eulerAngle;
    }
}
  • SetFormToRotation

注意點(diǎn):不能直接obj.rotation.SetFromToRotation(A.position,B.position);因?yàn)樾枰獙?shí)例化才能賦值給transform.rotation.

public class SetFromToRotation : MonoBehaviour {
    public Transform A, B, C;
    Quaternion q1 = Quaternion.identity;
    
    void Update () {
        //不可直接使用C.rotation.SetFromToRotation(A.position,B.position);
        q1.SetFromToRotation(A.position,B.position);
        C.rotation = q1;

        Debug.DrawLine(Vector3.zero,A.position,Color.red);
        Debug.DrawLine(Vector3.zero, B.position, Color.green);
        Debug.DrawLine(C.position, C.position+new Vector3(0.0f,1.0f,0.0f), Color.black);
        Debug.DrawLine(C.position, C.TransformPoint(Vector3.up*1.5f), Color.yellow);
    }
}
  • SetLookRotation : 設(shè)置Quaternion實(shí)例的朝向舶担。此方法的功能是對一個Quaternion的實(shí)例的朝向進(jìn)行設(shè)置坡疼。
public class LookRotation_ts : MonoBehaviour
{
    public Transform A, B, C, D;
    Quaternion q1 = Quaternion.identity;

    void Update()
    {
        //使用實(shí)例方法
        //不可直接使用C.rotation.SetLookRotation(A.position,B.position);
        q1.SetLookRotation(A.position, B.position);
        C.rotation = q1;
        //使用類方法
        D.rotation = Quaternion.LookRotation(A.position, B.position);
        //繪制直線,請?jiān)赟cene視圖中查看
        Debug.DrawLine(Vector3.zero, A.position, Color.white);
        Debug.DrawLine(Vector3.zero, B.position, Color.white);
        Debug.DrawLine(C.position, C.TransformPoint(Vector3.up * 2.5f), Color.white);
        Debug.DrawLine(C.position, C.TransformPoint(Vector3.forward * 2.5f), Color.white);
        Debug.DrawLine(D.position, D.TransformPoint(Vector3.up * 2.5f), Color.white);
        Debug.DrawLine(D.position, D.TransformPoint(Vector3.forward * 2.5f), Color.white);
    }
}
  • ToAngleAxis :Quaternion實(shí)例的角軸表示衣陶。其中angle為旋轉(zhuǎn)角柄瑰,axis為軸向量闸氮。
public class ToAngleAxis : MonoBehaviour
{
    public Transform A, B;
    float angle;
    Vector3 axis = Vector3.zero;

    void Update()
    {
        //使用ToAngleAxis獲取A的Rotation的旋轉(zhuǎn)軸和角度
        A.rotation.ToAngleAxis(out angle, out axis);
        //使用AngleAxis設(shè)置B的rotation,使得B的rotation狀態(tài)的和A相同
        //可以在程序運(yùn)行時修改A的rotation查看B的狀態(tài)
        B.rotation = Quaternion.AngleAxis(angle, axis);
    }
}
  • Angle方法: Quaternion實(shí)例間夾角

注意:返回的是GameObject對象從后面狀態(tài)(a)轉(zhuǎn)換到(b)時需要旋轉(zhuǎn)的最小夾角教沾。

public class Angle : MonoBehaviour {
    void Start()
    {
        Quaternion q1 = Quaternion.identity;
        Quaternion q2 = Quaternion.identity;
        q1.eulerAngles = new Vector3(10.0f, 20.0f, 30.0f);
        float f1 = Quaternion.Angle(q1,q2);
        float f2 = 0.0f;
        Vector3 v1 = Vector3.zero;
        q1.ToAngleAxis(out f2, out v1);

        Debug.Log("f1:" + f1);
        Debug.Log("f2:" + f2);
        Debug.Log("q1的歐拉角:" + q1.eulerAngles + " q1的rotation:" + q1);
        Debug.Log("q2的歐拉角:" + q2.eulerAngles + " q2的rotation:" + q2);
    }
}

  • Dot方法:點(diǎn)乘

用來求參數(shù)a和b的點(diǎn)乘蒲跨。q1(x1,y1,z1,w1),q2(x2,y2,z2,w2)為兩個實(shí)例則float f = Quaternion.Dot(q1,q2); 等價于f = x1x2 + y1y2 + z1z2 + w1w2.
當(dāng)f = ±1 時,q1和q2對應(yīng)的歐拉角是相等的授翻,在Game視圖中看他們旋轉(zhuǎn)狀態(tài)是一樣的或悲。
當(dāng)f=1時,它們的rotation相等堪唐;
當(dāng)f=-1時巡语,說明其中一個rotation比另一個多旋轉(zhuǎn)了360°

public class Dot : MonoBehaviour {
    public Transform A, B;
    Quaternion q1=Quaternion.identity;
    Quaternion q2=Quaternion.identity;
    float f;

    void Start () {
        A.eulerAngles = new Vector3(0.0f,40.0f,0.0f);
        //B比A繞Y軸多轉(zhuǎn)360度
        B.eulerAngles = new Vector3(0.0f, 360.0f+40.0f, 0.0f);
        q1 = A.rotation;
        q2 = B.rotation;
        f = Quaternion.Dot(q1,q2);
        Debug.Log("q1的rotation:"+q1);
        Debug.Log("q2的rotation:" + q2);
        Debug.Log("q1的歐拉角:" + q1.eulerAngles);
        Debug.Log("q2的歐拉角:" + q2.eulerAngles);
        Debug.Log("Dot(q1,q2):"+f);
    }
}

  • Euler方法:歐拉角對應(yīng)的四元數(shù)


    Euler
public class Euler : MonoBehaviour
{
    //記錄歐拉角,單位為角度淮菠,可以在Inspector面板中設(shè)置
    public float ex, ey, ez;
    //用于記錄計(jì)算結(jié)果
    float qx, qy, qz, qw;
    float PIover180 = 0.0174532925f;//常量
    Quaternion Q = Quaternion.identity;
    void OnGUI()
    {
        if (GUI.Button(new Rect(10.0f, 10.0f, 100.0f, 45.0f), "計(jì)算"))
        {
            Debug.Log("歐拉角:" + " ex:" + ex + "  ey:" + ey + "  ez:" + ez);
            //調(diào)用方法計(jì)算
            Q = Quaternion.Euler(ex, ey, ez);
            Debug.Log("Q.x:" + Q.x + " Q.y:" + Q.y + " Q.z:" + Q.z + " Q.w:" + Q.w);
            //測試算法
            ex = ex * PIover180 / 2.0f;
            ey = ey * PIover180 / 2.0f;
            ez = ez * PIover180 / 2.0f;
            qx = Mathf.Sin(ex) * Mathf.Cos(ey) * Mathf.Cos(ez) + Mathf.Cos(ex) * Mathf.Sin(ey) * Mathf.Sin(ez);
            qy = Mathf.Cos(ex) * Mathf.Sin(ey) * Mathf.Cos(ez) - Mathf.Sin(ex) * Mathf.Cos(ey) * Mathf.Sin(ez);
            qz = Mathf.Cos(ex) * Mathf.Cos(ey) * Mathf.Sin(ez) - Mathf.Sin(ex) * Mathf.Sin(ey) * Mathf.Cos(ez);
            qw = Mathf.Cos(ex) * Mathf.Cos(ey) * Mathf.Cos(ez) + Mathf.Sin(ex) * Mathf.Sin(ey) * Mathf.Sin(ez);
            Debug.Log(" qx:" + qx + " qy:" + qy + " qz:" + qz + " qw:" + qw);
        }
    }
}

-FromToRotation方法:Quaternion變換

public class FromToRotation : MonoBehaviour
{
    public Transform A, B, C, D;
    Quaternion q1 = Quaternion.identity;

    void Update()
    {
        //使用實(shí)例方法
        //不可直接使用C.rotation.SetFromToRotation(A.position,B.position);
        q1.SetFromToRotation(A.position, B.position);
        C.rotation = q1;
        //使用類方法
        D.rotation = Quaternion.FromToRotation(A.position, B.position);
        //在Scene視圖中繪制直線
        Debug.DrawLine(Vector3.zero, A.position, Color.white);
        Debug.DrawLine(Vector3.zero, B.position, Color.white);
        Debug.DrawLine(C.position, C.position + new Vector3(0.0f, 1.0f, 0.0f), Color.white);
        Debug.DrawLine(C.position, C.TransformPoint(Vector3.up * 1.5f), Color.white);
        Debug.DrawLine(D.position, D.position + new Vector3(0.0f, 1.0f, 0.0f), Color.white);
        Debug.DrawLine(D.position, D.TransformPoint(Vector3.up * 1.5f), Color.white);
    }
}
  • Lerp方法:線性插值
  • Slerp方法:球面插值

當(dāng)參數(shù)t≤0時返回值為from,當(dāng)參數(shù)t≥1時返回值為to男公。一般情況下兩種方法使用lerp代替

public class Slerp : MonoBehaviour
{
    public Transform A, B, C, D;
    float speed = 0.2f;
    //分別演示方法Slerp和Lerp的使用
    void Update()
    {
        C.rotation = Quaternion.Slerp(A.rotation, B.rotation, Time.time * speed);
        D.rotation = Quaternion.Lerp(A.rotation, B.rotation, Time.time * speed);
    }
}
  • RotateTowards 方法 : Quaternion插值

from為起始Quaternion,參數(shù)to為結(jié)束Quaternion,參數(shù)maxDegreesDelta為每幀最大角度值。方法用于返回從參數(shù)from到to的插值合陵,且返回值的最大角度不超過maxDegreesDelta.當(dāng)maxDegreesDelta < 0 枢赔,將沿著to到from的方向插值計(jì)算。

public class RotateTowards : MonoBehaviour {
    public Transform A, B, C;
    float speed = 10.0f;

    void Update()
    {
        C.rotation = Quaternion.RotateTowards(A.rotation, B.rotation, Time.time * speed-40.0f);
        Debug.Log("C與A的歐拉角的差值:" + (C.eulerAngles-A.eulerAngles) + " maxDegreesDelta:" + (Time.time * speed - 40.0f));
    }
}

二曙寡、歐拉角

1糠爬、概念

1-描述定點(diǎn)轉(zhuǎn)動剛體的位形需要三個獨(dú)立坐標(biāo)變量,即x,y,z
2-描述定軸轉(zhuǎn)動的剛體的位形只需要一個獨(dú)立坐標(biāo)變量即轉(zhuǎn)角举庶。
3-將定點(diǎn)轉(zhuǎn)動的過程分解為三個相互獨(dú)立的定軸轉(zhuǎn)動执隧,相應(yīng)的二三個相互獨(dú)立的轉(zhuǎn)角,即歐拉角户侥。

2镀琉、什么是歐拉角?

Roll 滾動角 Z軸不動

Pitch 俯仰角 X軸不動

Heading(Yaw) 偏航角 : 就是Y軸不動

Paste_Image.png

那么使用歐拉角表示旋轉(zhuǎn)矩陣
繞Z軸旋轉(zhuǎn)


這里的角度是偏航角

繞Y軸旋轉(zhuǎn)


這里的角度是俯仰角

繞X軸旋轉(zhuǎn)


這里的角度是翻滾角
Paste_Image.png
最后乘出來

所以說:

3蕊唐、局限性

歐拉角會產(chǎn)生萬向鎖bug
一旦選擇pitch角為±90°屋摔,就被限制在只能繞垂直軸旋轉(zhuǎn)

三、矩陣

1替梨、概念

矩陣通常用在一些特殊的地方钓试,例如攝像機(jī)的非標(biāo)準(zhǔn)投影。unity中僅僅提供了一個4×4的矩陣類Matrix4x4副瀑,它可以包含位移T弓熏、旋轉(zhuǎn)R和伸縮信息。矩陣中的元素都對應(yīng)一個mxy的公有成員變量糠睡,因而要訪問單個元素的話可以直接訪問其成員挽鞠。同時也提供了下標(biāo)訪問,如下

public float this [int row, int column]  
{  
    get  
    {  
       return this [row + column * 4];  
    }  
    set  
    {  
      this [row + column * 4] = value;  
    }  
}  
public float this [int index]  
  • MultiplyPoint方法:投影矩陣變換


    MultiplyPoint

  • MultiplyVector方法:矩陣變換


    矩陣變換

  • SetTRS方法:重設(shè)Matrix4x4變換矩陣
    使用Matrix4x4的成員函數(shù)SetTRS
    void SetTRS(Vector3 pos,Quaternion q,Vector3 s);
Quaternion q = Quaternion.LookRotation(new Vector3(0,0.5,1));  
Matrix4x4 rot = new Matrix4x4();  
rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1)); 
  • Ortho方法:創(chuàng)建正交投影矩陣


    Ortho方法


  • perspective方法:創(chuàng)建投影矩陣


    image.png
  • TRS方法:返回Matrix4x4實(shí)例


  • 旋轉(zhuǎn)矩陣到四元數(shù)
    使用Quaternion類的LookRotation函數(shù)
    static Quaternion LookRotation(Vector3 forward,Vector3 upwards);

Matrix4x4 rot = new Matrix4x4();  
rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));  
          
Vector4 vy = rot.GetColumn(1);  
Vector4 vz = rot.GetColumn(2);  
          
Quaternion q = Quaternion.LookRotation(new Vector3(vz.x,vz.y,vz.z),new Vector3(vy.x,vy.y,vy.z));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市信认,隨后出現(xiàn)的幾起案子材义,更是在濱河造成了極大的恐慌,老刑警劉巖嫁赏,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其掂,死亡現(xiàn)場離奇詭異,居然都是意外死亡橄教,警方通過查閱死者的電腦和手機(jī)清寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門喘漏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來护蝶,“玉大人,你說我怎么就攤上這事翩迈〕只遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵负饲,是天一觀的道長堤魁。 經(jīng)常有香客問我,道長返十,這世上最難降的妖魔是什么妥泉? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮洞坑,結(jié)果婚禮上盲链,老公的妹妹穿的比我還像新娘。我一直安慰自己迟杂,他們只是感情好刽沾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著排拷,像睡著了一般侧漓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上监氢,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天布蔗,我揣著相機(jī)與錄音,去河邊找鬼浪腐。 笑死纵揍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牛欢。 我是一名探鬼主播骡男,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼傍睹!你這毒婦竟也來了隔盛?” 一聲冷哼從身側(cè)響起犹菱,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吮炕,沒想到半個月后腊脱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡龙亲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年陕凹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳄炉。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡杜耙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拂盯,到底是詐尸還是另有隱情佑女,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布谈竿,位于F島的核電站团驱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏空凸。R本人自食惡果不足惜嚎花,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呀洲。 院中可真熱鬧紊选,春花似錦、人聲如沸两嘴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憔辫。三九已至趣些,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贰您,已是汗流浹背坏平。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦亦,地道東北人舶替。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像杠园,于是被迫代替她去往敵國和親顾瞪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容