OpenGL / OpenGL ES 下專業(yè)名詞解析

圖形API簡介

  • OpenGL(Open Graphics Library)是一個(gè)跨編程語言蝙泼、跨平臺(tái)的編程圖形程序接口渠欺,它將計(jì)算機(jī)的資源抽象稱為一個(gè)個(gè)OpenGL的對(duì)象,對(duì)這些資源的操作抽象為一個(gè)個(gè)的OpenGL指令

  • OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三維圖形 API 的子集,針對(duì)手機(jī)赋访、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì),去除了許多不必要和性能較低的API接口缓待。

  • DirectX:是由很多API組成的蚓耽,DirectX并不是一個(gè)單純的圖形API. 最重要的是DirectX是屬于Windows上一個(gè)多媒體處理API.并不支持Windows以外的平臺(tái),所以不是跨平臺(tái)框架. 按照性質(zhì)分類,可以分為四大部分旋炒,顯示部分步悠、聲音部分、輸入部分和網(wǎng)絡(luò)部分.

    • 顯示部分擔(dān)任圖形處理的關(guān)鍵瘫镇,分為DirectDraw(DDraw)和Direct3D(D3D)鼎兽,前者主要負(fù)責(zé)2D圖像加速。后者則主要負(fù)責(zé)3D效果的顯示铣除,比如CS中的場(chǎng)景和人物谚咬、FIFA中的人物等等,都是使用了DirectX的Direct3D尚粘。
    • 聲音部分中最主要的API是DirectSound择卦,除了播放聲音和處理混音之外,還加強(qiáng)了3d音效,并提供了錄音功能
  • Metal: Apple為游戲開發(fā)者推出了新的平臺(tái)技術(shù) Metal秉继,該技術(shù)能夠?yàn)?3D 圖像提高 10 倍的渲染性能.Metal 是Apple為了解決3D渲染而推出的框架,在2014年以前蘋果一直沿用OpenGL ES 來解決底層渲染.而后開始慢慢將自身的底層框架的依賴從OpenGL ES遷移到Metal.但其核心的處理思想還是源于OpenGL ES.對(duì)于適應(yīng)于OpenGL ES的開發(fā)者而言并沒有太大的改變.

引言:
從2014年到2018年.蘋果才完成了系統(tǒng)內(nèi)部從OpenGL ES過度到Metal.直到WWDC 2018祈噪,Apple 宣布 iOS 12 將棄用 OpenGL / CL.

Apps built using OpenGL ES will continue to run in iOS 12, but Open GL ES is deprecated in iOS 12. Games and graphics-intensive apps that previously used OpenGL ES should now adopt Metal.

image

但值得注意的是:

  1. 首先蘋果自身的系統(tǒng)遷移上是花費(fèi)了4年時(shí)間做這樣的籌備.
  2. 其次在沒有推出Metal 蘋果對(duì)于OpenGL ES是高度集成且配合相應(yīng)圖層和GLKit 來輔助開發(fā)者能快速使用OpenGL ES
  3. OpenGL ES的棄用,只是針對(duì)蘋果內(nèi)部系統(tǒng)底層API依賴而言,并不是想讓iOS開發(fā)者從此不使用OpenGLES. OpenGL ES只是角色變成第三方.畢竟它的跨平臺(tái)以及穩(wěn)定,是很難讓現(xiàn)有的開發(fā)放棄.而這2點(diǎn)Metal 目前很難給到
    4.最后,如果大家想要融入到項(xiàng)目組,而目前大多數(shù)類似百度地圖,高德地圖和音視頻處理的項(xiàng)目組已經(jīng)是非常龐大的項(xiàng)目了,暫時(shí)不會(huì)遷移到Metal.所以我們?nèi)绻粫?huì)metal從實(shí)際場(chǎng)景中并不夠.
    5.所以我們學(xué)習(xí)會(huì)從OpenGL->OpenGL ES->Metal

圖形API目的是解決什么問題

簡單來說就是實(shí)現(xiàn)圖形的底層渲染.

比如在游戲開發(fā)中,對(duì)于游戲場(chǎng)景/游戲人物的渲染
比如在音視頻開發(fā)中,對(duì)于視頻解碼后的數(shù)據(jù)渲染
比如在地圖引擎,對(duì)于地圖上的數(shù)據(jù)渲染
比如在動(dòng)畫中,實(shí)現(xiàn)動(dòng)畫的繪制
比如在視頻處理中,對(duì)于視頻加上濾鏡效果
等等....

OpenGL 專業(yè)名詞解析

  • OpenGL 上下文(context)
    在應(yīng)用程序調(diào)用任何OpenGL的指令之前,需要安排首先創(chuàng)建一個(gè)OpenGL的上下文尚辑。這個(gè)上下文是一個(gè)非常龐大的狀態(tài)機(jī)辑鲤,保存了OpenGL中的各種狀態(tài),這也是OpenGL指令執(zhí)行的基礎(chǔ)杠茬。

    OpenGL的函數(shù)不管在哪個(gè)語言中遂填,都是類似C語言一樣的面向過程的函數(shù),本質(zhì)上都是對(duì)OpenGL上下文這個(gè)龐大的狀態(tài)機(jī)中的某個(gè)狀態(tài)或者對(duì)象進(jìn)行操作澈蝙,當(dāng)然你得首先把這個(gè)對(duì)象設(shè)置為當(dāng)前對(duì)象吓坚。因此,通過對(duì)OpenGL指令的封裝灯荧,是可以將OpenGL的相關(guān)調(diào)用封裝成為一個(gè)面向?qū)ο蟮膱D形API的礁击。

    由于OpenGL上下文是一個(gè)巨大的狀態(tài)機(jī),切換上下文往往會(huì)產(chǎn)生較大的開銷逗载,但是不同的繪制模塊哆窿,可能需要使用完全獨(dú)立的狀態(tài)管理。因此厉斟,可以在應(yīng)用程序中分別創(chuàng)建多個(gè)不同的上下文挚躯,在不同線程中使用不同的上下文,上下文之間共享紋理擦秽、緩沖區(qū)等資源码荔。這樣的方案,會(huì)比反復(fù)切換上下文感挥,或者大量修改渲染狀態(tài)缩搅,更加合理高效的。

  • OpenGL 狀態(tài)機(jī)
    狀態(tài)機(jī)是理論上的一種機(jī)器.這個(gè)非常難以理解.所以我們把這個(gè)狀態(tài)機(jī)這么理解.狀態(tài)機(jī)描述了一個(gè)對(duì)象在其生命周期內(nèi)所經(jīng)歷的各種狀態(tài)触幼,狀態(tài)間的轉(zhuǎn)變硼瓣,發(fā)生轉(zhuǎn)變的動(dòng)因,條件及轉(zhuǎn)變中所執(zhí)行的活動(dòng)置谦√美穑或者說,狀態(tài)機(jī)是一種行為媒峡,說明對(duì)象在其生命周期中響應(yīng)事件所經(jīng)歷的狀態(tài)序列以及對(duì)那些狀態(tài)事件的響應(yīng)瘟栖。因此具有以下特點(diǎn)

    1. 有記憶功能,能記住其當(dāng)前的狀態(tài)丝蹭;
    2. 可以接收輸入慢宗,根據(jù)輸入的內(nèi)容和自己的原先狀態(tài)坪蚁,修改自己當(dāng)前狀態(tài),并且可以有對(duì)應(yīng)輸出镜沽;
    3. 當(dāng)進(jìn)入特殊狀態(tài)(停機(jī)狀態(tài))的時(shí)候敏晤,變不再接收輸入,停止工作缅茉;

類推到OpenGL 中來,可以這么理解:

  1. OpenGL可以記錄自己的狀態(tài)(如當(dāng)前所使用的顏色嘴脾、是否開啟了混合功能等);
  2. OpenGL可以接收輸入(當(dāng)調(diào)用OpenGL函數(shù)的時(shí)候蔬墩,實(shí)際上可以看成OpenGL在接收我們的輸入)译打,如我們調(diào)用glColor3f,則OpenGL接收到這個(gè)輸入后會(huì)修改自己的“當(dāng)前顏色”這個(gè)狀態(tài)拇颅;
  3. OpenGL可以進(jìn)入停止?fàn)顟B(tài)奏司,不再接收輸入。在程序退出前樟插,OpenGL總會(huì)先停止工作的韵洋。

可以使用glColor*函數(shù)來選擇一種顏色,以后繪制的所有物體都是這種顏色黄锤,除非再次使用glColor*函數(shù)重新設(shè)定搪缨。

可以使用glTexCoord*函數(shù)來設(shè)置一個(gè)紋理坐標(biāo),以后繪制的所有物體都是采用這種紋理坐標(biāo)鸵熟,除非再次使用glTexCoord*函數(shù)重新設(shè)置副编。

可以使用glBlendFunc函數(shù)來指定混合功能的源因子和目標(biāo)因子,以后繪制的所有物體都是采用這個(gè)源因子和目標(biāo)因子流强,除非再次使用glBlendFunc函數(shù)重新指定痹届。

可以使用glLight*函數(shù)來指定光源的位置、顏色煮盼,以后繪制的所有物體都是采用這個(gè)光源的位置短纵、顏色带污,除非再次使用glBlendFunc函數(shù)重新指定僵控。

OpenGL是一個(gè)狀態(tài)機(jī),它保持自身的狀態(tài)鱼冀,除非用戶輸入一條命令讓它改變狀態(tài)报破。

例如:

//獲取是否深度測(cè)試/混合
glIsEnabled(GL_DEPTH_TEST);
glIsEnabled(GL_BLEND);

//開啟深度測(cè)試/混合
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);

//關(guān)閉深度測(cè)試/混合
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
  • 渲染

    將圖形/圖像數(shù)據(jù)轉(zhuǎn)換成3D空間圖像操作叫做渲染(Rendering).

  • 頂點(diǎn)數(shù)組(VertexArray)和頂點(diǎn)緩沖區(qū)(VertexBuffer)

    畫圖一般是先畫好圖像的骨架,然后再往骨架里面填充顏色千绪,這對(duì)于OpenGL也是一樣的充易。頂點(diǎn)數(shù)據(jù)就是要畫的圖像的骨架,和現(xiàn)實(shí)中不同的是荸型,OpenGL中的圖像都是由圖元組成盹靴。在OpenGLES中,有3種類型的圖元:點(diǎn)、線稿静、三角形梭冠。那這些頂點(diǎn)數(shù)據(jù)最終是存儲(chǔ)在哪里的呢?開發(fā)者可以選擇設(shè)定函數(shù)指針改备,在調(diào)用繪制方法的時(shí)候控漠,直接由內(nèi)存?zhèn)魅腠旤c(diǎn)數(shù)據(jù),也就是說這部分?jǐn)?shù)據(jù)之前是存儲(chǔ)在內(nèi)存當(dāng)中的悬钳,被稱為頂點(diǎn)數(shù)組盐捷。而性能更高的做法是,提前分配一塊顯存默勾,將頂點(diǎn)數(shù)據(jù)預(yù)先傳入到顯存當(dāng)中碉渡。這部分的顯存,就被稱為頂點(diǎn)緩沖區(qū)母剥。

    頂點(diǎn)指的是我們?cè)诶L制一個(gè)圖形時(shí),它的頂點(diǎn)位置數(shù)據(jù).而這個(gè)數(shù)據(jù)可以直接存儲(chǔ)在數(shù)組中或者將其緩存到GPU內(nèi)存中.

  • 管線
    在OpenGL 下渲染圖形,就會(huì)有經(jīng)歷一個(gè)一個(gè)節(jié)點(diǎn).而這樣的操作可以理解管線.大家可以想象成流水線.每個(gè)任務(wù)類似流水線般執(zhí)行.任務(wù)之間有先后順序. 管線是一個(gè)抽象的概念爆价,之所以稱之為管線是因?yàn)轱@卡在處理數(shù)據(jù)的時(shí)候是按照一個(gè)固定的順序來的,而且嚴(yán)格按照這個(gè)順序媳搪。就像水從一根管子的一端流到另一端铭段,這個(gè)順序是不能打破的

  • 固定管線/存儲(chǔ)著色器
    在早期的OpenGL 版本,它封裝了很多種著色器程序塊內(nèi)置的一段包含了光照、坐標(biāo)變換秦爆、裁剪等等諸多功能的固定shader程序來完成,來幫助開發(fā)者來完成圖形的渲染. 而開發(fā)者只需要傳入相應(yīng)的參數(shù),就能快速完成圖形的渲染. 類似于iOS開發(fā)會(huì)封裝很多API,而我們只需要調(diào)用,就可以實(shí)現(xiàn)功能.不需要關(guān)注底層實(shí)現(xiàn)原理.

    但是由于OpenGL 的使用場(chǎng)景非常豐富,固定管線或存儲(chǔ)著色器無法完成每一個(gè)業(yè)務(wù).這時(shí)將相關(guān)部分開放成可編程.

  • 著色器程序Shader

    就全面的將固定渲染管線架構(gòu)變?yōu)榱丝删幊啼秩竟芫€序愚。因此,OpenGL在實(shí)際調(diào)用繪制函數(shù)之前等限,還需要指定一個(gè)由shader編譯成的著色器程序爸吮。常見的著色器主要有頂點(diǎn)著色器(VertexShader),片段著色器(FragmentShader)/像素著色器(PixelShader)望门,幾何著色器(GeometryShader)形娇,曲面細(xì)分著色器(TessellationShader)。片段著色器和像素著色器只是在OpenGL和DX中的不同叫法而已筹误⊥┰纾可惜的是,直到OpenGLES 3.0厨剪,依然只支持了頂點(diǎn)著色器和片段著色器這兩個(gè)最基礎(chǔ)的著色器哄酝。

    OpenGL在處理shader時(shí),和其他編譯器一樣祷膳。通過編譯陶衅、鏈接等步驟,生成了著色器程序(glProgram)直晨,著色器程序同時(shí)包含了頂點(diǎn)著色器和片段著色器的運(yùn)算邏輯搀军。在OpenGL進(jìn)行繪制的時(shí)候膨俐,首先由頂點(diǎn)著色器對(duì)傳入的頂點(diǎn)數(shù)據(jù)進(jìn)行運(yùn)算。再通過圖元裝配罩句,將頂點(diǎn)轉(zhuǎn)換為圖元吟策。然后進(jìn)行光柵化,將圖元這種矢量圖形的止,轉(zhuǎn)換為柵格化數(shù)據(jù)檩坚。最后,將柵格化數(shù)據(jù)傳入片段著色器中進(jìn)行運(yùn)算诅福。片段著色器會(huì)對(duì)柵格化數(shù)據(jù)中的每一個(gè)像素進(jìn)行運(yùn)算匾委,并決定像素的顏色

  • 頂點(diǎn)著色器VertexShader

    一般用來處理圖形每個(gè)頂點(diǎn)變換(旋轉(zhuǎn)/平移/投影等)

    頂點(diǎn)著色器是OpenGL中用于計(jì)算頂點(diǎn)屬性的程序。頂點(diǎn)著色器是逐頂點(diǎn)運(yùn)算的程序氓润,也就是說每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)行一次頂點(diǎn)著色器赂乐,當(dāng)然這是并行的,并且頂點(diǎn)著色器運(yùn)算過程中無法訪問其他頂點(diǎn)的數(shù)據(jù)咖气。

    一般來說典型的需要計(jì)算的頂點(diǎn)屬性主要包括頂點(diǎn)坐標(biāo)變換挨措、逐頂點(diǎn)光照運(yùn)算等等。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換到歸一化坐標(biāo)系的運(yùn)算崩溪,就是在這里發(fā)生的浅役。

  • 片元著色器程序FragmentShader

    一般用來處理圖形中每個(gè)像素點(diǎn)顏色計(jì)算和填充

    片段著色器是OpenGL中用于計(jì)算片段(像素)顏色的程序。片段著色器是逐像素運(yùn)算的程序伶唯,也就是說每個(gè)像素都會(huì)執(zhí)行一次片段著色器觉既,當(dāng)然也是并行的。

  • GLSL(OpenGL Shading Language)

    OpenGL著色語言(OpenGL Shading Language)是用來在OpenGL中著色編程的語言乳幸,也即開發(fā)人員寫的短小的自定義程序瞪讼,他們是在圖形卡的GPU (Graphic Processor Unit圖形處理單元)上執(zhí)行的,代替了固定的渲染管線的一部分粹断,使渲染管線中不同層次具有可編程性符欠。比如:視圖轉(zhuǎn)換、投影轉(zhuǎn)換等瓶埋。GLSL(GL Shading Language)的著色器代碼分成2個(gè)部分:Vertex Shader(頂點(diǎn)著色器)和Fragment(片斷著色器)

  • 光柵化Rasterization

    是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過程希柿,具有將圖轉(zhuǎn)化為一個(gè)個(gè)柵格組成的圖象的作用,特點(diǎn)是每個(gè)元素對(duì)應(yīng)幀緩沖區(qū)中的一像素悬赏。

    光柵化就是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過程狡汉。片元中的每一個(gè)元素對(duì)應(yīng)于幀緩沖區(qū)中的一個(gè)像素。

    光柵化其實(shí)是一種將幾何圖元變?yōu)槎S圖像的過程闽颇。該過程包含了兩部分的工作。第一部分工作:決定窗口坐標(biāo)中的哪些整型柵格區(qū)域被基本圖元占用寄锐;第二部分工作:分配一個(gè)顏色值和一個(gè)深度值到各個(gè)區(qū)域兵多。光柵化過程產(chǎn)生的是片元

    把物體的數(shù)學(xué)描述以及與物體相關(guān)的顏色信息轉(zhuǎn)換為屏幕上用于對(duì)應(yīng)位置的像素及用于填充像素的顏色尖啡,這個(gè)過程稱為光柵化,這是一個(gè)將模擬信號(hào)轉(zhuǎn)化為離散信號(hào)的過程

  • 紋理

紋理可以理解為圖片. 大家在渲染圖形時(shí)需要在其編碼填充圖片,為了使得場(chǎng)景更加逼真.而這里使用的圖片,就是常說的紋理.但是在OpenGL,我們更加習(xí)慣叫紋理,而不是圖片.

  • 混合(Blending

    在測(cè)試階段之后剩膘,如果像素依然沒有被剔除衅斩,那么像素的顏色將會(huì)和幀緩沖區(qū)中顏色附著上的顏色進(jìn)行混合,混合的算法可以通過OpenGL的函數(shù)進(jìn)行指定怠褐。但是OpenGL提供的混合算法是有限的畏梆,如果需要更加復(fù)雜的混合算法,一般可以通過像素著色器進(jìn)行實(shí)現(xiàn)奈懒,當(dāng)然性能會(huì)比原生的混合算法差一些奠涌。

  • 變換矩陣(Transformation)

    例如圖形想發(fā)生平移,縮放,旋轉(zhuǎn)變換.就需要使用變換矩陣.

  • 投影矩陣Projection

    用于將3D坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo),實(shí)際線條也將在二維坐標(biāo)下進(jìn)行繪制.

  • 渲染上屏/交換緩沖區(qū)(SwapBuffer)

    渲染緩沖區(qū)一般映射的是系統(tǒng)的資源比如窗口。如果將圖像直接渲染到窗口對(duì)應(yīng)的渲染緩沖區(qū)磷杏,則可以將圖像顯示到屏幕上溜畅。

    但是,值得注意的是极祸,如果每個(gè)窗口只有一個(gè)緩沖區(qū)慈格,那么在繪制過程中屏幕進(jìn)行了刷新,窗口可能顯示出不完整的圖像遥金。

    為了解決這個(gè)問題浴捆,常規(guī)的OpenGL程序至少都會(huì)有兩個(gè)緩沖區(qū)。顯示在屏幕上的稱為屏幕緩沖區(qū)稿械,沒有顯示的稱為離屏緩沖區(qū)汤功。在一個(gè)緩沖區(qū)渲染完成之后,通過將屏幕緩沖區(qū)和離屏緩沖區(qū)交換溜哮,實(shí)現(xiàn)圖像在屏幕上的顯示滔金。

    由于顯示器的刷新一般是逐行進(jìn)行的,因此為了防止交換緩沖區(qū)的時(shí)候屏幕上下區(qū)域的圖像分屬于兩個(gè)不同的幀茂嗓,因此交換一般會(huì)等待顯示器刷新完成的信號(hào)餐茵,在顯示器兩次刷新的間隔中進(jìn)行交換,這個(gè)信號(hào)就被稱為垂直同步信號(hào)述吸,這個(gè)技術(shù)被稱為垂直同步忿族。

    使用了雙緩沖區(qū)和垂直同步技術(shù)之后,由于總是要等待緩沖區(qū)交換之后再進(jìn)行下一幀的渲染蝌矛,使得幀率無法完全達(dá)到硬件允許的最高水平道批。為了解決這個(gè)問題,引入了三緩沖區(qū)技術(shù)入撒,在等待垂直同步時(shí)隆豹,來回交替渲染兩個(gè)離屏的緩沖區(qū),而垂直同步發(fā)生時(shí)茅逮,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換璃赡,實(shí)現(xiàn)充分利用硬件性能的目的判哥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碉考,隨后出現(xiàn)的幾起案子塌计,更是在濱河造成了極大的恐慌,老刑警劉巖侯谁,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锌仅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡墙贱,警方通過查閱死者的電腦和手機(jī)热芹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫩痰,“玉大人剿吻,你說我怎么就攤上這事〈模” “怎么了丽旅?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纺棺。 經(jīng)常有香客問我榄笙,道長,這世上最難降的妖魔是什么祷蝌? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任茅撞,我火速辦了婚禮,結(jié)果婚禮上巨朦,老公的妹妹穿的比我還像新娘米丘。我一直安慰自己,他們只是感情好糊啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布拄查。 她就那樣靜靜地躺著,像睡著了一般棚蓄。 火紅的嫁衣襯著肌膚如雪堕扶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天梭依,我揣著相機(jī)與錄音稍算,去河邊找鬼。 笑死役拴,一個(gè)胖子當(dāng)著我的面吹牛糊探,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼侧到,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勃教!你這毒婦竟也來了淤击?” 一聲冷哼從身側(cè)響起匠抗,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎污抬,沒想到半個(gè)月后汞贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡印机,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年矢腻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片射赛。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡多柑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楣责,到底是詐尸還是另有隱情竣灌,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布秆麸,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陶缺。R本人自食惡果不足惜咪啡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望房铭。 院中可真熱鬧驻龟,春花似錦、人聲如沸缸匪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪嗽。三九已至谴蔑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間龟梦,已是汗流浹背隐锭。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留计贰,地道東北人钦睡。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像躁倒,于是被迫代替她去往敵國和親荞怒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洒琢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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