常用函數(shù)介紹OpenGLES(四)

前言

前面介紹了GLSL的基礎語法岗屏,接下來介紹下opengl es的常用函數(shù),了解這些函數(shù)的基本原理和前面的glsl基礎語法翰绊,搞清楚opengl es的渲染流程胆屿,基本就可以寫出基于
opengl es的程序了;opengl es函數(shù)不多慕嚷,基本分為這幾個大類
備注:opengl es 2.0官方文檔傳送門

opengl es系列文章

opengl es之-基礎概念(一)
opengl es之-GLSL語言(二)
opengl es之-GLSL語言(三)
opengl es之-常用函數(shù)介紹(四)
opengl es之-渲染兩張圖片(五)
opengl es之-在圖片上添加對角線(六)
opengl es之-離屏渲染簡介(七)
opengl es之-CVOpenGLESTextureCache介紹(八)
opengl es之-播放YUV文件(九)

創(chuàng)建buffers

這些都是創(chuàng)建buffres的函數(shù)
1哥牍、void glGenFramebuffers(GLsizei n,GLuint * framebuffers);
創(chuàng)建frame buffers
2、void glDeleteFramebuffers(GLsizei n,const GLuint * framebuffers);
刪除frame buffers
n表示buffers數(shù)量,framebuffers 表示buffer的數(shù)組
3喝检、void glGenRenderbuffers(GLsizei n,GLuint * renderbuffers);
創(chuàng)建render buffers
4嗅辣、void glDeleteRenderbuffers(GLsizei n,const GLuint * renderbuffers);
刪除 render buffers
5、void glFramebufferRenderbuffer(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer);
將render buffer關聯(lián)到GL_FRAMEBUFFER常量上面
target:取值必須為GL_FRAMEBUFFER
attachment:取值為GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, or GL_STENCIL_ATTACHMENT挠说。一般視頻渲染取GL_COLOR_ATTACHMENT0
renderbuffertarget:取值必須為GL_RENDERBUFFER
renderbuffer:要關聯(lián)的render buffer的id(由glGenRenderbuffers()函數(shù)生成)
6澡谭、GLenum glCheckFramebufferStatus(GLenum target);
檢查frame buffer相關是否成功,再glFramebufferRenderbuffer()之后調(diào)用去檢查
tagert:GL_FRAMEBUFFER;

著色器相關函數(shù)

1损俭、GLuint glCreateShader(GLenum shaderType);
創(chuàng)建著色器程序的句柄蛙奖;成功返回非0整數(shù)
shaderType:著色器類型,頂點和片元杆兵;取值GL_VERTEX_SHADER和GL_FRAGMENT_SHADER
2雁仲、void glShaderSource(GLuint shader,GLsizei count,const GLchar * const *string,const GLint *length);
為著色器句柄添加GLSL源代碼
shader:前面創(chuàng)建的著色器句柄
count:源代碼個數(shù)
string:源代碼字符串
lenght:源代碼字符串長度
3、void glCompileShader(GLuint shader);
編譯著色器GLSL源碼
4琐脏、void glGetShaderiv(GLuint shader,GLenum pname,GLint *params);
獲取著色器編譯過程中的日志和檢測是否編譯成功
// 檢查編譯中日志,logLenght>0則說明有日志
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLenght);
// 檢查編譯是否成功,成功status==GLTRUE
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
5攒砖、GLuint glCreateProgram(void);
創(chuàng)建用于生成頂點著色器和片元著色器最終程序的句柄
6缸兔、void glAttachShader(GLuint program,GLuint shader);
添加頂點著色器和片元著色器
program:第五步創(chuàng)建的program
shader:為前面編譯成功的著色器句柄
7、void glLinkProgram(GLuint program);
連接程序,就像C語言的連接一樣吹艇,這里將頂點著色器和片元著色器連接起來
8惰蜜、void glGetProgramiv(GLuint program,GLenum pname,GLint *params);
輸出連接過程中的日志和檢查連接是否成功
// 檢查編譯中日志,logLenght>0則說明有日志
glGetProgramiv(filterProgram, GL_INFO_LOG_LENGTH, &logLength);
// 檢查編譯是否成功,成功status==GLTRUE
glGetProgramiv(filterProgram, GL_LINK_STATUS, &status);
9、void glUseProgram(GLuint program);
調(diào)用此函數(shù)后著色器程序才能正常使用掐暮,就相當于生成可執(zhí)行程序后還得點擊一下讓其運行起來一樣蝎抽;之后才能使用第10個之后的函數(shù)
10、GLint glGetAttribLocation(GLuint program,const GLchar *name);
獲取頂點著色器中的attribute修飾的變量的句柄路克,后面就可以通過該句柄從應用端向GLSL對應的變量傳值了
program:對應的GLSL程序樟结,該函數(shù)必須在GLSL程序運行后才能使用(即調(diào)用了glUseProgram()函數(shù))
name:GLSL中attribute修飾的變量名
11、GLint glGetUniformLocation(GLuint program,const GLchar *name);
獲取片元著色器中uniform sampler2D修飾的變量的句柄精算,后面就可以將該句柄和對應的紋理單元關聯(lián)起來
program:對應的GLSL程序瓢宦,該函數(shù)必須在GLSL程序運行后才能使用(即調(diào)用了glUseProgram()函數(shù))
name:GLSL中uniform sampler2D修飾的變量名

視窗有關函數(shù)

1、void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha);
設置清屏的顏色,四個參數(shù)的范圍都是0-1的浮點數(shù)灰羽,表示RGBA的組合
2驮履、void glClear(GLbitfield mask);
用前面glClearColor(),glClearDepthf(),and glClearStencil()設置的顏色清除buffers;
mask在這個函數(shù)中的取值要與上面三個函數(shù)一一對應,可取值如下:
GL_COLOR_BUFFER_BIT:color buffer廉嚼,前面如果調(diào)用了glClearColor()玫镐,則設置包含該值
GL_DEPTH_BUFFER_BIT:depth buffer,前面如果調(diào)用了glClearDepthf()怠噪,則設置包含該值
GL_STENCIL_BUFFER_BIT:stencil buffer恐似,前面如果調(diào)用了glClearStencil(),則設置包含該值
mask可以是上面幾個值的組合,比如GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT,但前提是前面分別調(diào)用了glClearColor()和glClearDepthf()設置顏色
3傍念、void glViewport(GLint x,GLint y,GLsizei width,GLsizei height);
以當前視圖的大小為基礎(當前視圖的左下角為坐標原點)在開辟一個(x,y,width,height)的渲染區(qū)域矫夷,該區(qū)域?qū)⒆鳛楹竺骓旤c坐標等的參考坐標系。

紋理操作相關函數(shù),應用端和opengl es傳值相關函數(shù)

4憋槐、void glPixelStorei(GLenum pname,GLint param);
設置像素的對齊方式双藕;
pname:為GL_PACK_ALIGNMENT,會影響glReadPixels()函數(shù)從opengl es緩存中讀取像素數(shù)據(jù)到app中的字節(jié)對齊方式
pname:為GL_UNPACK_ALIGNMENT,會影響glTexImage2D() 和 glTexSubImage2D()函數(shù)從app發(fā)送像素數(shù)據(jù)到opengl es的字節(jié)對齊方式
param:表示每次讀取或者發(fā)送的像素數(shù)據(jù)是param的整數(shù)倍;舉個例子阳仔,比如param為4忧陪,想要通過glTexImage2D()傳輸5x5像素的一張圖片(25不是4的整數(shù)倍,所以需要手
動添加padding即添加3個字節(jié)到這個圖片buf中,這樣讀取時才不會出錯近范,如果param為1就沒有這樣的煩惱嘶摊,但是可能性能會低,值越大吞吐量就越大顺又,效率也越高。
那么上面兩種方式的取值含義都是一樣的,
默認值為4等孵;取值如下:
1 (byte-alignment),
2 (rows aligned to even-numbered bytes),
4 (word-alignment),
8 (rows start on double-word boundaries).
5稚照、void glDrawArrays(GLenum mode,GLint first,GLsizei count);
確定要繪制的幾何形狀;通過mode指定,可取值如下:
GL_POINTS:繪制點果录,那么頂點著色器還需要有gl_PointSize內(nèi)建變量指定頂點的大小
GL_LINES:繪制線
GL_TRIANGLE_STRIP:繪制三角形上枕,比如繪制紋理圖片就是這種類型
它處于渲染管線的第一階段
6、void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer);
用一個數(shù)組的方式給GLSL中attribute修飾的屬性變量賦值;
index:前面獲取的GLSL變量的句柄
size:表示每幾個元素表示一個attribute修飾的變量;比如對于attribute vec4 position;修飾的頂點,就表示四個數(shù)據(jù)(x,y,z,w)才能表示一個頂點坐標弱恒,如果這里size為
2辨萍,那么x,y有值,z返弹,w將默認為0,依次類推锈玉。
type:每個元素的數(shù)據(jù)類型,取值為GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_FIXED, or GL_FLOAT
normalized:是否要對pointer中的數(shù)據(jù)進行歸一化處理成(-1.0,1.0)范圍的浮點型類型,如果已經(jīng)是浮點型义起,這里傳GL_FALSE即可拉背。
stride:獲取每一個元素是否需要跳字節(jié),如果前面的type類型pointer中元素類型一致默终,這里傳0
pointer:幾何形狀的各個頂點組成的數(shù)組;對于矩形來說椅棺,數(shù)組中頂點順序為(左下角,右下角齐蔽,左上角两疚,右上角)
該賦值得用glEnableVertexAttribArray()函數(shù)啟用后才會生效
7、void glUniform1i(GLint location,GLint v0);
給片段著色器中的uniform sampler2D 修飾的紋理變量賦值含滴,只有該函數(shù)調(diào)用后,片元著色器中的texture2D()函數(shù)才能正確工作
location:為片元著色器中uniform sampler2D 修飾的變量句柄
v0的取值為紋理單元的索引诱渤;比如想讓激活的GL_TEXTURE2和上面的變量關聯(lián),則v0取值為2蛙吏,那么片元著色器中的texture2D()函數(shù)將從該紋理單元對應的紋理里面查找像素
8源哩、void glEnableVertexAttribArray(GLuint index);
void glDisableVertexAttribArray(GLuint index);
啟用和禁用給attribute變量的賦值
9、void glGetIntegerv(GLenum pname,GLint * params);
獲取指定類型的值
GL_ACTIVE_TEXTURE:獲取設備支持的紋理單元數(shù)目
GL_MAX_TEXTURE_SIZE:獲取設備支持的紋理能渲染的最大的長或?qū)挻笮⊙蛔觯^此大小則必須先壓縮再傳給opengl es励烦,否則opengl es無法渲染
10、void glGenTextures(GLsizei n,GLuint * textures);
void glDeleteTextures(GLsizei n,const GLuint * textures);
創(chuàng)建紋理Id和刪除紋理Id
調(diào)用刪除紋理Id函數(shù)會解除它與紋理類型對象的綁定
11泼诱、void glActiveTexture(GLenum texture);
選擇指定的紋理單元坛掠,texture取值范圍GL_TEXTUREi(i取值為0-GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1),其中GL_TEXTURE0默認激活的
方式一治筒、glActioveTexture(GL_TEXTUREi);只能到GL_TEXTURE31
方式二屉栓、glActioveTexture(GL_TEXTURE0+i);i可以取值到GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1
12、void glBindTexture(GLenum target,GLuint texture);
綁定紋理耸袜,當綁定完后友多,如果用其它texture再次與target綁定,則先前的綁定失效堤框∮蚶模或者調(diào)用glDeleteTextures()函數(shù)后纵柿,該綁定也將失效
target:紋理類型,可取值:GL_TEXTURE_2D启绰、GL_TEXTURE_CUBE_MAP
texture:紋理id昂儒,由glGenTextures()函數(shù)生成
函數(shù)10和11的工作流程用偽代碼表示如下:
GLenum curentTexutre;
GLESObj globalObj;
glActiveTexture(GLenum texture)
{
curentTexutre = texture;
}
glBindTexture(GLenum target,GLuint texture)
{
TextureUnit *texUnit = globalObj[curentTexutre];
switch(target)
{
case GL_TEXTURE_1D: texUnit->targetTexture1D = textureObject; break;
case GL_TEXTURE_2D: texUnit->targetTexture2D = textureObject; break;
case GL_TEXTURE_3D: texUnit->targetTexture3D = textureObject; break;
case GL_TEXTURE_CUBEMAP: texUnit->targetTextureCube = textureObject; break;
}
glTexImage2D(....)
{
TextureUnit *texUnit = globalObj[curentTexutre];
texUnit->targetTexture2D->TexImage2D(...);
......
}
所以如果調(diào)用glActiveTexture()之后不調(diào)用glBindTexture()函數(shù),其實后面的glxxx()系列函數(shù)設置的參數(shù)只是對curentTexutre有效委可,會造成值被覆蓋
13渊跋、void glTexParameteri(GLenum target,GLenum pname,GLint param);
給指定的紋理類型對象設定參數(shù)
warping
紋理坐標的范圍是(0,1)當給定的紋理坐標超過這個范圍時,將通過如下方式對超過的紋理坐標進行采樣
glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_WARP_S,GL_REPEAT) S軸方向
glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_WARP_T,GL_REPEAT) T軸方向
GL_REPEAT,GL_MIRRODED_REPEAT (經(jīng)過試驗着倾,此這兩種方式視乎無效拾酝,GL_REPEAT默認)
GL_CLAMP_TO_EDGE 超出的部分坐標被設置成0或者1,行程邊緣色
filter
實際紋理的分辨率大小與要顯示的屏幕區(qū)域的分辨率大小往往不相等屈呕,也就是要根據(jù)屏幕的實際大小對紋理進行放大和縮小微宝,這里就需要用到filter,取值如下:
GL_NEAREST:最鄰近插值虎眨,取最近的紋素像素
GL_LINEAR:線性插值蟋软,取最近的點的線性平均值 (性能消耗較大)
glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
mipmaps
它也是一種紋理過濾算法,按我的理解它是以空間換時間的一種技巧嗽桩,具體原理就是事先根據(jù)紋理生成長和寬逐漸除以2的小紋理岳守,比如原始紋理大小128x128,
采用此方法后碌冶,會生成64x64 32x32 16x16 8x8 4x4 2x2 1x1的一系列紋理湿痢,如果需要20x18的紋理,則取最近的32x32 16x16進行平均
該方法很好的解決了如下問題:
1扑庞、當紋理很大譬重,但是屏幕區(qū)域很小,渲染出現(xiàn)的閃爍問題罐氨,因為根據(jù)最鄰近插值和線性插值都無法很快計算出合理的像素
它可以取的值如下:
GL_NEAREST_MIPMAP_NEAREST 選擇最近的mipmap層臀规,然后再用最鄰近過濾插值
GL_LINEAR_MIPMAP_NEAREST 選擇最近mipmap層,然后再用線性插值
GL_NEAREST_MIPMAP_LINEAR 選擇最近的2層mipmap用最鄰近過濾插值
GL_LINEAR_MIPMAP_LINEAR 選擇最鄰近的2層mipmap用線性插值
使用如下函數(shù)生成mipmaps
glGenerateMipmap(GLenum target);
14栅隐、void glTexImage2D(GLenum target, // 紋理對象類型塔嬉,取值GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, or GL_TEXTURE_CUBE_MAP_NEGATIVE_Z或者
GLint level, // 紋理壓縮等級,0代表不壓縮租悄,默認0
GLint internalformat,// 內(nèi)部每個像素的構(gòu)成格式,取值GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA.
GLsizei width, // 紋理的寬谨究,單位像素
GLsizei height, // 紋理的高,單位像素
GLint border, // 設置為0 即可
GLenum format, // data中每個像素的構(gòu)成格式泣棋,必須與internalformat保持一直胶哲,取值為GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA.
GLenum type, // data中像素數(shù)據(jù)的組織方式,取值 GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, and GL_UNSIGNED_SHORT_5_5_5_1.
const GLvoid * data // 代表一張圖片的像素數(shù)據(jù),當為NULL時潭辈,只是分配一個widthxheight的空間鸯屿,可以后面在傳遞數(shù)據(jù)
);
GL_ALPHA
表示data中每個像素只有一個透明通道俩檬,當它傳遞給opengl es時,自動將RGB填充為0碾盟。
GL_RGB
表示data中每個像素只由RGB三個數(shù)組成,當它傳遞給opengl es時技竟,自動將Alpha填充為1冰肴。
GL_RGBA
表示data中每個像素只由RGBA四個數(shù)組成,傳遞給Opengl es時榔组,原封不動的傳遞
GL_LUMINANCE
表示data中每個像素只有一個值組成熙尉,當它傳遞給opengl es時,自動將RGB填充為該值搓扯,alpha填充為1
GL_LUMINANCE_ALPHA
表示data中每個像素只有一個值組成检痰,當它傳遞給opengl es時,自動將RGB填充為該值锨推,alpha原封不動
GL_UNSIGNED_BYTE
表示組成每個像素的通道占用8位該值可以與前面任何格式搭配使用
GL_UNSIGNED_SHORT_5_6_5
表示RGB分別占用6 6 5位,一個像素兩個字節(jié)铅歼,該值只能與前面GL_RGB搭配
GL_UNSIGNED_SHORT_4_4_4_4,
表示RGBA 分別占用4位换可,一個像素兩個字節(jié)椎椰,該值只能與前面GL_RGB搭配GL_RGBA
GL_UNSIGNED_SHORT_5_5_5_1,
表示RGBA 分別占用 5551位沾鳄,一個像素兩個字節(jié)慨飘,該值只能與前面GL_RGB搭配GL_RGBA
15、void glTexSubImage2D( GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
const GLvoid * data);
用法和第15個函數(shù)一樣译荞,只不過可以選取data中的部分數(shù)據(jù)傳遞瓤的,更加靈活
16、void glFramebufferTexture2D(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level);
將frame buffere中的顏色輸出定位到指定的紋理中吞歼,這樣這個紋理中已經(jīng)有數(shù)據(jù)了就不需要應用端在傳遞像素數(shù)據(jù)了圈膏。主要用于將一個
繪制的輸出結(jié)果作為另外一個繪制的輸入,調(diào)用此方法之前浆熔,一定要先調(diào)用glBindFramebuffer()函數(shù)以確定是哪個frame buffer和
glBindTexture()哪個紋理
具體調(diào)用方式如下:
glGenFramebuffers(1, &_framebuffer);
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &_tempTexture);
glBindTexture(GL_TEXTURE_2D, _texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindFramebuffer(GL_FRAMEBUFFER, _tempFramebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _tempTexture, 0);

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本辐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子医增,更是在濱河造成了極大的恐慌慎皱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叶骨,死亡現(xiàn)場離奇詭異茫多,居然都是意外死亡,警方通過查閱死者的電腦和手機忽刽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門天揖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夺欲,“玉大人,你說我怎么就攤上這事今膊⌒┰模” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵斑唬,是天一觀的道長市埋。 經(jīng)常有香客問我,道長恕刘,這世上最難降的妖魔是什么缤谎? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮褐着,結(jié)果婚禮上坷澡,老公的妹妹穿的比我還像新娘。我一直安慰自己含蓉,他們只是感情好频敛,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馅扣,像睡著了一般姻政。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岂嗓,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天汁展,我揣著相機與錄音,去河邊找鬼厌殉。 笑死食绿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的公罕。 我是一名探鬼主播器紧,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼楼眷!你這毒婦竟也來了铲汪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤罐柳,失蹤者是張志新(化名)和其女友劉穎掌腰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體张吉,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡齿梁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺择。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡创南,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出省核,到底是詐尸還是另有隱情稿辙,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布气忠,位于F島的核電站邓深,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏笔刹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一冬耿、第九天 我趴在偏房一處隱蔽的房頂上張望舌菜。 院中可真熱鬧,春花似錦亦镶、人聲如沸日月。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爱咬。三九已至,卻和暖如春绊起,著一層夾襖步出監(jiān)牢的瞬間精拟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工虱歪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜂绎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓笋鄙,卻偏偏與公主長得像师枣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子萧落,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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