五腔剂、OpenGL-紋理

音視頻開發(fā):OpenGL + OpenGL ES + Metal 系列文章匯總

紋理可以對(duì)物體進(jìn)行包裝,以顯示不同圖案规哪,本文開始認(rèn)識(shí)紋理,并掌握如何設(shè)置紋理

主要內(nèi)容:
1、紋理認(rèn)識(shí)
2幢妄、紋理的設(shè)置
3、紋理坐標(biāo)
4茫负、金字塔案例

1蕉鸳、紋理認(rèn)識(shí)

  1. 紋理是一種圖形數(shù)據(jù),主要用于在屏幕上包裝物體忍法,就像新房裝修潮尝,需要貼不同的墻紙,此時(shí)的墻紙就是我們所說的紋理缔赠。
  2. 紋理其實(shí)就是圖片衍锚,只是在OpenGL中專業(yè)術(shù)語中稱其為紋理。
  3. 圖片在屏幕上的顯示嗤堰,最終都是解碼成位圖戴质,然后進(jìn)行顯示的。
  4. 在OpenGL中紋理一般是TGA文件踢匣,在iOS開發(fā)中我們使用的OpenGL ES是可以直接使用png告匠、jpg壓縮圖片作為紋理數(shù)據(jù),并最終都會(huì)在底層被解碼成位圖离唬,作為紋理來進(jìn)行處理后专。
  5. 一個(gè)圖形在幀緩存區(qū)中的存儲(chǔ)空間的計(jì)算公式:存儲(chǔ)空間=圖像高度* 寬度 *一個(gè)像素的字節(jié)數(shù)

2、設(shè)置紋理

主要就是介紹一些紋理設(shè)置的API输莺,這里只是先認(rèn)識(shí)一下戚哎,具體的使用會(huì)在金字塔案例中詳細(xì)說明。以后有需要用到直接在這里查找API即可嫂用。

2.1 紋理的使用(重點(diǎn))

2.1.1 讀取文件

API:

//參數(shù)1:x,矩形左下?的窗?x坐標(biāo)
//參數(shù)2:y,矩形左下?的窗?y坐標(biāo)
//參數(shù)3:width,矩形的寬型凳,以像素為單位 
//參數(shù)4:height,矩形的?,以像素為單位
//參數(shù)5:format,OpenGL 的像素格式
//參數(shù)6:type,解釋參數(shù)pixels指向的數(shù)據(jù)嘱函,告訴OpenGL 使?緩存區(qū)中的什么 數(shù)據(jù)類型來存儲(chǔ)顏?分量甘畅,像素?cái)?shù)據(jù)的數(shù)據(jù)類型
//參數(shù)7:pixels,指向圖形數(shù)據(jù)的指針,也就是返回的圖形數(shù)據(jù)的值
void glReadPixels(GLint x,GLint y,GLSizei width,GLSizei height, GLenum format, GLenum type,const void * pixels);

glReadBuffer(mode);—> 指定讀取的緩存 

glWriteBuffer(mode);—> 指定寫?入的緩存

參數(shù)5:format表示像素格式往弓,下面是所有的像素格式疏唾,一般使用的也就是GL_RGB、GL_RGBA

像素格式.png

參數(shù)6表示像素?cái)?shù)據(jù)的數(shù)據(jù)類型函似,下面是所有的數(shù)據(jù)類型槐脏,常用的是無符號(hào)整型GL_UNSIGNED_BYTE

像素?cái)?shù)據(jù)的數(shù)據(jù)格式.png

2.1.2 載入紋理
//target:指定紋理應(yīng)用的紋理模式,一般為 GL_TEXTURE_2D
    //`GL_TEXTURE_1D`
    //`GL_TEXTURE_2D`
    //`GL_TEXTURE_3D`
//Level:指定所加載的mip貼圖層次。?般我們都把這個(gè)參數(shù)設(shè)置為0缴淋。
//internalformat:每個(gè)紋理單元中存儲(chǔ)多少顏色成分准给。
//width泄朴、height重抖、depth參數(shù):指加載紋理的寬度露氮、?度、深度钟沛。==注意!==這些值必須是 2的整次?畔规。(這是因?yàn)镺penGL 舊版本上的遺留下的?個(gè)要求。當(dāng)然現(xiàn)在已經(jīng)可以支持不是 2的整數(shù)次方恨统。但是開發(fā)者們還是習(xí)慣使?以2的整數(shù)次?去設(shè)置這些參數(shù)叁扫。)
//border參數(shù):允許為紋理貼圖指定?個(gè)邊界寬度,如果不指定畜埋,可以直接寫0莫绣。
//format參數(shù):OpenGL 的像素格式
//type參數(shù):解釋參數(shù)pixels指向的數(shù)據(jù),告訴OpenGL 使?緩存區(qū)中的什么 數(shù)據(jù)類型來存儲(chǔ)顏?分量悠鞍,像素?cái)?shù)據(jù)的數(shù)據(jù)類型
//pixels參數(shù):指向圖形數(shù)據(jù)的指針
void glTexImage1D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLint border,GLenum format,GLenum type,void *data);
     
void glTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void * data);
     
void glTexImage3D(GLenum target,GLint level,GLint internalformat,GLSizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data);

我們平常用的就只是glTexImage2D对室,參數(shù)中的像素格式以及像素?cái)?shù)據(jù)的數(shù)據(jù)格式不再贅言

2.1.3 設(shè)置紋理參數(shù)

API
區(qū)別僅在于最后參數(shù)的類型,以后用第一個(gè)就可以


//參數(shù)1:target,指定這些參數(shù)將要應(yīng)?用在那個(gè)紋理理模式上咖祭,?比如GL_TEXTURE_1D掩宜、GL_TEXTURE_2D、GL_TEXTURE_3D么翰。 
//參數(shù)2:pname,指定需要設(shè)置那個(gè)紋理理參數(shù)牺汤,總共四個(gè)
//參數(shù)3:param,設(shè)定特定的紋理理參數(shù)的值
glTexParameterf(GLenum target,GLenum pname,GLFloat param);
glTexParameteri(GLenum target,GLenum pname,GLint param);
glTexParameterfv(GLenum target,GLenum pname,GLFloat *param);
glTexParameteriv(GLenum target,GLenum pname,GLint *param);

target一般是GL_TEXTURE_2D

1、紋理的縮小/放大的過濾方式
過濾場(chǎng)景:
有兩種浩嫌,一種是放大(GL_TEXTURE_MAG_FILTER)檐迟,一種是縮小(GL_TEXTURE_MIN_FILTER)

過濾類型:
主要使用的過濾類型有兩種,鄰近過濾(GL_NEAREST)和線性過濾(GL_LINEAR)
鄰近過濾: 選擇離當(dāng)前位置最近的顏色

鄰近過濾.png

線性過濾: 所有顏色綜合后的顏色码耐,進(jìn)行線性計(jì)算追迟,類似于顏色混合

線性過濾.png

過濾方式對(duì)比:

過濾方式對(duì)比.png

其他過濾方式:
可以看出過濾方式中有MIP貼圖

過濾方式.png

具體使用:
一般來說建議紋理縮小時(shí)使用鄰近過濾,紋理放大時(shí)伐坏,使用線性過濾

    //參數(shù)1:紋理維度
    //參數(shù)2:過濾場(chǎng)景
    //參數(shù)3:過濾方式的參數(shù)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

2怔匣、x/y軸上的環(huán)繞方式
環(huán)繞方式
環(huán)繞方式是指當(dāng)紋理坐標(biāo)超出默認(rèn)范圍時(shí),邊緣的顯示形式,環(huán)繞方式的設(shè)置主要是針對(duì)x/y軸設(shè)置的桦沉,在紋理中的描述不適用xy每瞒,而是使用s,t。

環(huán)繞方式.png

各自效果.png

環(huán)繞方向:
有兩種:GL_TEXTURE_WRAP_S纯露,GL_TEXTURE_WRAP_T剿骨,分別代表x、y軸埠褪。

具體使用:

    //參數(shù)1: 紋理應(yīng)用的維度浓利,一般設(shè)置的都是 GL_TEXTURE_2D
        // GL_TEXTURE_1D:一維
        // GL_TEXTURE_2D: 二維
        // GL_TEXTURE_3D: 三維 
    //參數(shù)2: 紋理坐標(biāo)挤庇,一般設(shè)置s,t即可
        // GL_TEXTURE_WRAP_S: 對(duì)應(yīng)坐標(biāo)系中的x軸
        // GL_TEXTURE_T: 對(duì)應(yīng)坐標(biāo)系中的y軸
        // GL_TEXTURE_R: 對(duì)應(yīng)坐標(biāo)系中的z軸
    //參數(shù)3:紋理環(huán)繞方式
        // GL_REPEAT:OpenGL 在紋理坐標(biāo)超過1.0的?方向上對(duì)紋理進(jìn)行重復(fù); 
        // GL_CLAMP:所需的紋理單元取?紋理邊界或TEXTURE_BORDER_COLOR. 
        // GL_CLAMP_TO_EDGE環(huán)繞模式強(qiáng)制對(duì)范圍之外的紋理坐標(biāo)沿著合法的紋理單元的最后?行或者最后?列來進(jìn)?采樣贷掖。
        // GL_CLAMP_TO_BORDER:在紋理理坐標(biāo)在0.0到1.0范圍之外的只使?邊界紋理單元嫡秕。邊界紋理單元是作為圍繞基本圖像的額外的行和列,并與基本紋理圖像?一起加載的苹威。
    glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_S,GL_CLAMP_TO_EDGE);
    glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_T,GL_CLAMP_TO_EDGE);
2.1.4 綁定紋理狀態(tài)

分配紋理標(biāo)識(shí)符glGenTextures:

/*
指定紋理理對(duì)象的數(shù)量和指針(指針指向?一個(gè)?無符號(hào)整形數(shù)組昆咽,由紋理理對(duì)象標(biāo)識(shí)符填充)。 
GLsizei表示數(shù)量
GLuint*表示紋理對(duì)象數(shù)組指針
*/
void glGenTextures(GLsizei n,GLuint * textTures);

綁定紋理狀態(tài)glBindTexture:

//參數(shù)target:GL_TEXTURE_1D牙甫、GL_TEXTURE_2D掷酗、GL_TEXTURE_3D
//參數(shù)texture:需要綁定的紋理理對(duì)象
void glBindTexture(GLenum target,GLunit texture);

刪除綁定紋理glDeleteTextures:

//紋理對(duì)象個(gè)數(shù) 及 紋理對(duì)象指針(指針指向?一個(gè)?無符號(hào)整形數(shù)組,由紋理理對(duì)象標(biāo)識(shí)符填充)窟哺。
void glDeleteTextures(GLsizei n,GLuint *textures); 

測(cè)試綁定紋理是否有效

//如果texture是?個(gè)已經(jīng)分配空間的紋理對(duì)象泻轰,那么這個(gè)函數(shù)會(huì)返回GL_TRUE,否則會(huì)返回GL_FALSE。 
GLboolean glIsTexture(GLuint texture);

2.2 載入紋理其他API

更新紋理:

void glTexSubImage1D(GLenum target,GLint level,GLint xOffset,GLsizei width,GLenum format,GLenum type,const GLvoid *data);
    
void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid *data);
    
void glTexSubImage3D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLint zOffset,GLsizei width,GLsizei height,GLsizei depth,Glenum type,const GLvoid * data);

插入替換紋理:

void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsize width);

void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint x,GLint y,GLsizei width,GLsizei height);
     
void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint zOffset,GLint x,GLint y,GLsizei width,GLsizei height);

使用顏色緩沖區(qū)加載數(shù)據(jù)且轨,形成新的紋理

函數(shù)中的x浮声、y是在顏色緩存區(qū)中指定的開始讀取紋理數(shù)據(jù)的位置。
緩沖區(qū)中的數(shù)據(jù)是通過源緩沖區(qū)glReadBuffer設(shè)置的殖告。

void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformt,GLint x,GLint y,GLsizei width,GLint border);
  
void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformt,GLint x,GLint y,GLsizei width,GLsizei height,GLint border);

3阿蝶、紋理坐標(biāo)

紋理坐標(biāo)是一種抽象概念,并不是真實(shí)的坐標(biāo)黄绩。
1羡洁、比如物體在世界坐標(biāo)系中的坐標(biāo)是真實(shí)的,如果進(jìn)行變換爽丹,坐標(biāo)是會(huì)發(fā)生改變的筑煮。但是此時(shí)紋理坐標(biāo)并不會(huì)發(fā)生改變。
2粤蝎、紋理坐標(biāo)無視物體的大小和方位真仲。
3、紋理坐標(biāo)可以代表一種映射關(guān)系初澎,紋理貼到物體上時(shí)的一個(gè)投射秸应,

如圖:


紋理映射關(guān)系.png

特點(diǎn):
1、范圍是在0-1之間
2碑宴、坐標(biāo)方位是這樣的软啼,左下角是(0,0),左上角是(0,1),右上角是(1,1),右下角是(1,0)

注:紋理坐標(biāo)在貼到物體上時(shí),可以以任意角度貼延柠,但是坐標(biāo)順序不可以亂,這樣會(huì)導(dǎo)致紋理圖片交叉祸挪。
1、一個(gè)坐標(biāo)的對(duì)角坐標(biāo)要保持一致贞间,比如(0,0)的對(duì)角線上紋理坐標(biāo)不可以為(1,0)或(0,1)贿条,必須是(1,1)
2雹仿、一個(gè)坐標(biāo)的相鄰坐標(biāo)可以相反,比如(0,0)的左上角可以為(1,0),也可以為(0,1).

4整以、金字塔案例

使用金字塔案例熟悉使用紋理API
案例地址:金字塔案例

效果:

4.1 簡單介紹

代碼主要實(shí)現(xiàn):
給一個(gè)金字塔設(shè)置紋理

  1. 實(shí)現(xiàn)金字塔
  2. 使用法線讓金字塔顯示光照效果
  3. 給金字塔增加紋理

重點(diǎn)需要掌握內(nèi)容:

  1. 紋理的設(shè)置過程

    • 分配紋理
    • 綁定紋理狀態(tài)
    • 加載紋理對(duì)象
      • 解析紋理
      • 設(shè)置紋理參數(shù)
      • 載入紋理
  2. 紋理坐標(biāo)的解析

  3. 法線的簡單理解

4.2 紋理的設(shè)置

分配紋理對(duì)象和綁定紋理

   //紋理變量胧辽,一般使用無符號(hào)整型
   GLuint textureID;
   //分配紋理對(duì)象 參數(shù)1:紋理對(duì)象個(gè)數(shù),參數(shù)2:紋理對(duì)象指針
   glGenTextures(1, &textureID);
   //綁定紋理狀態(tài) 參數(shù)1:紋理狀態(tài)2D 參數(shù)2:紋理對(duì)象
   glBindTexture(GL_TEXTURE_2D, textureID);

將紋理TAG文件載入到內(nèi)存中

  1. 解析紋理文件獲取紋理數(shù)據(jù)
  2. 設(shè)置紋理參數(shù)
  3. 載入紋理到內(nèi)存中
//定義變量
    GLbyte *pBits;//紋理數(shù)據(jù)
    int nWidth, nHeight, nComponents;
    GLenum eFormat;//像素格式
    
    //1悄蕾、解析紋理文件讀取到紋理數(shù)據(jù)票顾、寬高像素础浮、組件帆调、格式
    //參數(shù)1:紋理文件名稱
    //參數(shù)2:文件寬度地址
    //參數(shù)3:文件高度地址
    //參數(shù)4:文件組件地址
    //參數(shù)5:文件格式地址
    //返回值:pBits,指向圖像數(shù)據(jù)的指針
    
    pBits = gltReadTGABits(szFileName, &nWidth, &nHeight, &nComponents, &eFormat);
    if(pBits == NULL)
        return false;
    
    //2、設(shè)置紋理參數(shù)
    //參數(shù)1:紋理維度
    //參數(shù)2:為S/T坐標(biāo)設(shè)置模式
    //參數(shù)3:wrapMode,環(huán)繞模式
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode);
    
    //參數(shù)1:紋理維度
    //參數(shù)2:線性過濾
    //參數(shù)3:wrapMode,環(huán)繞模式
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
    
    /*
     3豆同、載入紋理
     */
    //參數(shù)1:紋理維度
    //參數(shù)2:mip貼圖層次
    //參數(shù)3:紋理單元存儲(chǔ)的顏色成分(從讀取像素圖時(shí)獲得)
    //參數(shù)4:加載紋理寬
    //參數(shù)5:加載紋理高
    //參數(shù)6:加載紋理的深度
    //參數(shù)7:像素?cái)?shù)據(jù)的數(shù)據(jù)類型(GL_UNSIGNED_BYTE番刊,每個(gè)顏色分量都是一個(gè)8位無符號(hào)整數(shù))
    //參數(shù)8:指向紋理圖像數(shù)據(jù)的指針
    
    glTexImage2D(GL_TEXTURE_2D, 0, nComponents, nWidth, nHeight, 0,
                 eFormat, GL_UNSIGNED_BYTE, pBits);
    
    //使用完畢釋放pBits
    free(pBits);

4.3 紋理坐標(biāo)的認(rèn)識(shí)

其實(shí)在實(shí)際工作中無需我們處理,會(huì)有設(shè)計(jì)師幫我們?cè)O(shè)計(jì)好

因此此處僅以底部兩個(gè)三角形為例簡單說明

其頂點(diǎn)坐標(biāo)如圖:
按照處在金字塔中心的坐標(biāo)系來確定每個(gè)頂點(diǎn)的坐標(biāo)

金字塔頂點(diǎn)坐標(biāo).png

按照紋理坐標(biāo)對(duì)頂點(diǎn)坐標(biāo)的映射影锈,可以看到紋理坐標(biāo)如下:

金字塔紋理坐標(biāo).png

當(dāng)然這里的映射可以不是這樣芹务,因?yàn)榧y理坐標(biāo)是一種映射關(guān)系,其實(shí)選任何方位都可以

法線坐標(biāo): 我們知道法線就是垂直與一個(gè)面的一條線鸭廷,按照?qǐng)D上所示枣抱,底部的三角形的法線自然就是Y軸的線

按照上面劃分的頂點(diǎn)坐標(biāo)和紋理坐標(biāo)和法線坐標(biāo)就可以寫下面的代碼了。

 //三角形X
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);//這里發(fā)現(xiàn)就是與Y軸一致辆床,所以就直接這么寫了
    pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);//紋理的坐標(biāo)就是一個(gè)平面的坐標(biāo)佳晶,這里的左上角就是(0,0)
    //vBlackLeft點(diǎn)
    pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f);
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
    pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
    //vBlackRight點(diǎn)
    pyramidBatch.Vertex3f(1.0f, -1.0f, -1.0f);
    
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
    pyramidBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
    //vFrontRight點(diǎn)
    pyramidBatch.Vertex3f(1.0f, -1.0f, 1.0f);
    
    //三角形Y
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
    pyramidBatch.MultiTexCoord2f(0, 0.0f, 1.0f);
    pyramidBatch.Vertex3f(-1.0f, -1.0f, 1.0f);
    
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
    pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
    pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f);
    
    pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
    pyramidBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
    pyramidBatch.Vertex3f(1.0f, -1.0f, 1.0f);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讼载,隨后出現(xiàn)的幾起案子轿秧,更是在濱河造成了極大的恐慌,老刑警劉巖咨堤,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菇篡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡一喘,警方通過查閱死者的電腦和手機(jī)驱还,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凸克,“玉大人议蟆,你說我怎么就攤上這事〈バ欤” “怎么了咪鲜?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撞鹉。 經(jīng)常有香客問我疟丙,道長颖侄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任享郊,我火速辦了婚禮览祖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炊琉。我一直安慰自己展蒂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布苔咪。 她就那樣靜靜地躺著锰悼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪团赏。 梳的紋絲不亂的頭發(fā)上箕般,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音舔清,去河邊找鬼丝里。 笑死,一個(gè)胖子當(dāng)著我的面吹牛体谒,可吹牛的內(nèi)容都是我干的杯聚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼抒痒,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼幌绍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起评汰,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤纷捞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后被去,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體主儡,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年惨缆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了动雹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片早龟。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡概耻,死狀恐怖权逗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捣染,我是刑警寧澤骄瓣,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耍攘,受9級(jí)特大地震影響榕栏,放射性物質(zhì)發(fā)生泄漏畔勤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一扒磁、第九天 我趴在偏房一處隱蔽的房頂上張望庆揪。 院中可真熱鬧,春花似錦妨托、人聲如沸缸榛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽内颗。三九已至,卻和暖如春医清,著一層夾襖步出監(jiān)牢的瞬間起暮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工会烙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筒捺。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓柏腻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親系吭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子五嫂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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