NO.12 - 球體世界

球體世界效果圖

球體世界

代碼實(shí)現(xiàn)

#include "GLTools.h"
#include "GLShaderManager.h"
#include "GLFrustum.h"
#include "GLBatch.h"
#include "GLMatrixStack.h"
#include "GLGeometryTransform.h"
#include "StopWatch.h"

#include <math.h>
#include <stdio.h>

#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif

//1味榛、添加附加隨機(jī)球
#define NUM_SPHERES 50
GLFrame spheres[NUM_SPHERES];

GLShaderManager        shaderManager;            // 著色器管理器
GLMatrixStack        modelViewMatrix;        // 模型視圖矩陣
GLMatrixStack        projectionMatrix;        // 投影矩陣
GLFrustum            viewFrustum;            // 視景體
GLGeometryTransform    transformPipeline;        // 幾何圖形變換管道

GLTriangleBatch        torusBatch;             // 花托批處理
GLBatch                floorBatch;             // 地板批處理

//2八千、定義公轉(zhuǎn)球的批處理(公轉(zhuǎn)自轉(zhuǎn))
GLTriangleBatch     sphereBatch;            //球批處理

//3忘分、角色幀 照相機(jī)角色幀(全局照相機(jī)實(shí)例)
GLFrame             cameraFrame;

//5缸剪、添加紋理
//紋理標(biāo)記數(shù)組
GLuint uiTextures[3];

bool LoadTGATexture(const char *szFileName, GLenum minFilter, GLenum magFilter, GLenum wrapMode)
{
    GLbyte *pBits;
    int nWidth, nHeight, nComponents;
    GLenum eFormat;
    
    //1.讀取紋理數(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:線性過(guò)濾
    //參數(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ǔ)的顏色成分(從讀取像素圖是獲得)-將內(nèi)部參數(shù)nComponents改為了通用壓縮紋理格式GL_COMPRESSED_RGB
    //參數(shù)4:加載紋理寬
    //參數(shù)5:加載紋理高
    //參數(shù)6:加載紋理的深度
    //參數(shù)7:像素?cái)?shù)據(jù)的數(shù)據(jù)類型(GL_UNSIGNED_BYTE材部,每個(gè)顏色分量都是一個(gè)8位無(wú)符號(hào)整數(shù))
    //參數(shù)8:指向紋理圖像數(shù)據(jù)的指針
    glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB, nWidth, nHeight, 0,
                 eFormat, GL_UNSIGNED_BYTE, pBits);
    
    //使用完畢釋放pBits
    free(pBits);
    
    //只有minFilter 等于以下四種模式,才可以生成Mip貼圖
    //GL_NEAREST_MIPMAP_NEAREST具有非常好的性能唯竹,并且閃爍現(xiàn)象非常弱
    //GL_LINEAR_MIPMAP_NEAREST常常用于對(duì)游戲進(jìn)行加速乐导,它使用了高質(zhì)量的線性過(guò)濾器
    //GL_LINEAR_MIPMAP_LINEAR 和GL_NEAREST_MIPMAP_LINEAR 過(guò)濾器在Mip層之間執(zhí)行了一些額外的插值,以消除他們之間的過(guò)濾痕跡摩窃。
    //GL_LINEAR_MIPMAP_LINEAR 三線性Mip貼圖兽叮。紋理過(guò)濾的黃金準(zhǔn)則芬骄,具有最高的精度。
    if(minFilter == GL_LINEAR_MIPMAP_LINEAR ||
       minFilter == GL_LINEAR_MIPMAP_NEAREST ||
       minFilter == GL_NEAREST_MIPMAP_LINEAR ||
       minFilter == GL_NEAREST_MIPMAP_NEAREST)
    //4.加載Mip,紋理生成所有的Mip層
    //參數(shù):GL_TEXTURE_1D鹦聪、GL_TEXTURE_2D账阻、GL_TEXTURE_3D
    glGenerateMipmap(GL_TEXTURE_2D);
    
    return true;
}

void SetupRC()
{
    //1.
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    shaderManager.InitializeStockShaders();
    transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);
    
    //2.開啟深度測(cè)試/背面剔除
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);

    //3.設(shè)置大球
    gltMakeSphere(torusBatch, 0.4f, 40, 80);
    
    //4.設(shè)置小球(公轉(zhuǎn)自轉(zhuǎn))
    gltMakeSphere(sphereBatch, 0.1f, 26, 13);
    
    //5.設(shè)置地板頂點(diǎn)數(shù)據(jù)&地板紋理
    GLfloat texSize = 10.0f;
    floorBatch.Begin(GL_TRIANGLE_FAN, 4, 1);
    
    floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
    floorBatch.Vertex3f(-20.f, -0.41f, 20.0f);
    
    floorBatch.MultiTexCoord2f(0, texSize, 0.0f);
    floorBatch.Vertex3f(20.0f, -0.41f, 20.f);
    
    floorBatch.MultiTexCoord2f(0, texSize, texSize);
    floorBatch.Vertex3f(20.0f, -0.41f, -20.0f);
    
    floorBatch.MultiTexCoord2f(0, 0.0f, texSize);
    floorBatch.Vertex3f(-20.0f, -0.41f, -20.0f);
    
    floorBatch.End();
    
    //6.隨機(jī)小球頂點(diǎn)坐標(biāo)數(shù)據(jù)
    for (int i = 0; i < NUM_SPHERES; i++) {
        //y軸不變,X,Z產(chǎn)生隨機(jī)值
        GLfloat x = ((GLfloat)((rand() % 400) - 200 ) * 0.1f);
        GLfloat z = ((GLfloat)((rand() % 400) - 200 ) * 0.1f);
        //在y方向泽本,將球體設(shè)置為0.0的位置淘太,這使得它們看起來(lái)是飄浮在眼睛的高度
        //對(duì)spheres數(shù)組中的每一個(gè)頂點(diǎn),設(shè)置頂點(diǎn)數(shù)據(jù)
        spheres[i].SetOrigin(x, 0.0f, z);
    }
    
    //7.創(chuàng)建3個(gè)紋理對(duì)象
    glGenTextures(3, uiTextures);
    
    //8.將TGA文件加載為2D紋理规丽。
    //參數(shù)1:紋理文件名稱
    //參數(shù)2&參數(shù)3:需要縮小&放大的過(guò)濾器
    //參數(shù)4:紋理坐標(biāo)環(huán)繞模式
    glBindTexture(GL_TEXTURE_2D, uiTextures[0]);
    LoadTGATexture("marble.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_REPEAT);
    
    glBindTexture(GL_TEXTURE_2D, uiTextures[1]);
    LoadTGATexture("marslike.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE);
    
    glBindTexture(GL_TEXTURE_2D, uiTextures[2]);
    LoadTGATexture("moonlike.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE);
}

//刪除紋理
void ShutdownRC()
{
    glDeleteTextures(3, uiTextures);
}

// 屏幕更改大小或已初始化
void ChangeSize(int nWidth, int nHeight)
{
    //1.設(shè)置視口
    glViewport(0, 0, nWidth, nHeight);
    //2.設(shè)置投影方式
    viewFrustum.SetPerspective(35.0f, float(nWidth)/float(nHeight), 1.0f, 100.0f);
    //3.將投影矩陣加載到投影矩陣堆棧,
    projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
    modelViewMatrix.LoadIdentity();
}

void drawSomething(GLfloat yRot)
{
    //1.定義光源位置&漫反射顏色
    static GLfloat vWhite[] = { 1.0f, 1.0f, 1.0f, 1.0f };
    static GLfloat vLightPos[] = { 0.0f, 3.0f, 0.0f, 1.0f };
    
    //2.繪制懸浮小球
    glBindTexture(GL_TEXTURE_2D, uiTextures[2]);
    for(int i = 0; i < NUM_SPHERES; i++) {
        modelViewMatrix.PushMatrix();
        modelViewMatrix.MultMatrix(spheres[i]);
        shaderManager.UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
                                     modelViewMatrix.GetMatrix(),
                                     transformPipeline.GetProjectionMatrix(),
                                     vLightPos,
                                     vWhite,
                                     0);
        sphereBatch.Draw();
        modelViewMatrix.PopMatrix();
    }
    
    //3.繪制大球
    modelViewMatrix.Translate(0.0f, 0.2f, -2.5f);
    modelViewMatrix.PushMatrix();
    modelViewMatrix.Rotate(yRot, 0.0f, 1.0f, 0.0f);
    glBindTexture(GL_TEXTURE_2D, uiTextures[1]);
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
                                 modelViewMatrix.GetMatrix(),
                                 transformPipeline.GetProjectionMatrix(),
                                 vLightPos,
                                 vWhite,
                                 0);
    torusBatch.Draw();
    modelViewMatrix.PopMatrix();
    
    //4.繪制公轉(zhuǎn)小球(公轉(zhuǎn)自轉(zhuǎn))
    modelViewMatrix.PushMatrix();
    modelViewMatrix.Rotate(yRot * -2.0f, 0.0f, 1.0f, 0.0f);
    modelViewMatrix.Translate(0.8f, 0.0f, 0.0f);
    glBindTexture(GL_TEXTURE_2D, uiTextures[2]);
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
                                 modelViewMatrix.GetMatrix(),
                                 transformPipeline.GetProjectionMatrix(),
                                 vLightPos,
                                 vWhite,
                                 0);
    sphereBatch.Draw();
    modelViewMatrix.PopMatrix();
}

//進(jìn)行調(diào)用以繪制場(chǎng)景
void RenderScene()
{
    //1.地板顏色值蒲牧,注意alpha值,用于混合
    static GLfloat vFloorColor[] = { 40.0/255.0, 150.0/255.0, 200.0/255.0, 0.75f};
    
    //2.基于時(shí)間動(dòng)畫
    static CStopWatch rotTimer;
    float yRot = rotTimer.GetElapsedSeconds() * 60.0f;
    
    //3.清除顏色緩存區(qū)和深度緩沖區(qū)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    //4.壓入棧(棧頂)
    modelViewMatrix.PushMatrix();
    
    //5.設(shè)置觀察者矩陣
    M3DMatrix44f mCamera;
    cameraFrame.GetCameraMatrix(mCamera);
    modelViewMatrix.MultMatrix(mCamera);
    
    //6.壓棧(鏡面)
    modelViewMatrix.PushMatrix();
    
    //7.---添加反光效果---
    //翻轉(zhuǎn)Y軸
    modelViewMatrix.Scale(1.0f, -1.0f, 1.0f);
    //鏡面世界圍繞Y軸平移一定間距赌莺,因?yàn)殓R面了冰抢,所以是向下移動(dòng)0.8
    modelViewMatrix.Translate(0.0f, 0.8f, 0.0f);
    
    // 鏡面后,原來(lái)逆時(shí)針為正面艘狭,現(xiàn)在順時(shí)針為正面
    //8.指定順時(shí)針為正面
    glFrontFace(GL_CW);
  
    //9.繪制地面以外其他部分(鏡面)
    drawSomething(yRot);
   
    //10.恢復(fù)為逆時(shí)針為正面
    glFrontFace(GL_CCW);
    
    //11.繪制鏡面完畢挎扰,恢復(fù)矩陣
    modelViewMatrix.PopMatrix();
    
    //12.開啟混合功能(繪制地板)
    glEnable(GL_BLEND);
    //13. 指定 glBlendFunc 顏色混合方程式
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
    //14.綁定地面紋理
    glBindTexture(GL_TEXTURE_2D, uiTextures[0]);
    
    /*15.
     紋理調(diào)整著色器(將一個(gè)基本色乘以一個(gè)取自紋理的單元nTextureUnit的紋理)
     參數(shù)1:GLT_SHADER_TEXTURE_MODULATE
     參數(shù)2:模型視圖投影矩陣
     參數(shù)3:顏色
     參數(shù)4:紋理單元(第0層的紋理單元)
     */
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 transformPipeline.GetModelViewProjectionMatrix(),
                                 vFloorColor,
                                 0);
    //開始繪制
    floorBatch.Draw();
    //繪制完畢,取消混合
    glDisable(GL_BLEND);
    
    //16.繪制地面以外其他部分
    drawSomething(yRot);
    
    //17.繪制完巢音,恢復(fù)矩陣
    modelViewMatrix.PopMatrix();
    
    //18.交換緩存區(qū)
    glutSwapBuffers();
    
    //19.提交重新渲染
    glutPostRedisplay();
}


//3.移動(dòng)照相機(jī)參考幀遵倦,來(lái)對(duì)方向鍵作出響應(yīng)
void SpeacialKeys(int key,int x,int y)
{
    float linear = 0.1f;
    float angular = float(m3dDegToRad(5.0f));
    if (key == GLUT_KEY_UP) {
        cameraFrame.MoveForward(linear);
    }
    if (key == GLUT_KEY_DOWN) {
        cameraFrame.MoveForward(-linear);
    }
    if (key == GLUT_KEY_LEFT) {
        //RotateWorld 旋轉(zhuǎn)
        cameraFrame.RotateWorld(angular, 0.0f, 1.0f, 0.0f);
    }
    if (key == GLUT_KEY_RIGHT) {
        cameraFrame.RotateWorld(-angular, 0.0f, 1.0f, 0.0f);
    }
}

int main(int argc, char* argv[])
{
    gltSetWorkingDirectory(argv[0]);
    
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800,600);
    
    glutCreateWindow("OpenGL SphereWorld");
    
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    glutSpecialFunc(SpeacialKeys);
    
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
        return 1;
    }
    
    SetupRC();
    glutMainLoop();
    ShutdownRC();
    return 0;
}

代碼片段解析

地板
用一整塊大地板,并使用10倍的紋理坐標(biāo)大小官撼,實(shí)現(xiàn)效果梧躺。

//5.設(shè)置地板頂點(diǎn)數(shù)據(jù)&地板紋理
GLfloat texSize = 10.0f;
floorBatch.Begin(GL_TRIANGLE_FAN, 4, 1);

floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
floorBatch.Vertex3f(-20.f, -0.41f, 20.0f);

floorBatch.MultiTexCoord2f(0, texSize, 0.0f);
floorBatch.Vertex3f(20.0f, -0.41f, 20.f);

floorBatch.MultiTexCoord2f(0, texSize, texSize);
floorBatch.Vertex3f(20.0f, -0.41f, -20.0f);

floorBatch.MultiTexCoord2f(0, 0.0f, texSize);
floorBatch.Vertex3f(-20.0f, -0.41f, -20.0f);

floorBatch.End();

紋理
依次讀取3個(gè)紋理,并使用了mipmap技術(shù)

//7.創(chuàng)建3個(gè)紋理對(duì)象
glGenTextures(3, uiTextures);

//8.將TGA文件加載為2D紋理傲绣。
//參數(shù)1:紋理文件名稱
//參數(shù)2&參數(shù)3:需要縮小&放大的過(guò)濾器
//參數(shù)4:紋理坐標(biāo)環(huán)繞模式
glBindTexture(GL_TEXTURE_2D, uiTextures[0]);
LoadTGATexture("marble.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_REPEAT);

glBindTexture(GL_TEXTURE_2D, uiTextures[1]);
LoadTGATexture("marslike.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE);

glBindTexture(GL_TEXTURE_2D, uiTextures[2]);
LoadTGATexture("moonlike.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE);

球的貼圖
不管是大球還是小球掠哥,繪制方式基本和原來(lái)一樣。只是多了紋理的綁定斜筐,同時(shí)使用的shader從GLT_SHADER_POINT_LIGHT_DIFF變?yōu)榱薌LT_SHADER_TEXTURE_POINT_LIGHT_DIFF龙致。

//2.繪制懸浮小球
glBindTexture(GL_TEXTURE_2D, uiTextures[2]);
for(int i = 0; i < NUM_SPHERES; i++) {
    modelViewMatrix.PushMatrix();
    modelViewMatrix.MultMatrix(spheres[i]);
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
                                 modelViewMatrix.GetMatrix(),
                                 transformPipeline.GetProjectionMatrix(),
                                 vLightPos,
                                 vWhite,
                                 0);
    sphereBatch.Draw();
    modelViewMatrix.PopMatrix();
}

鏡面效果
鏡面效果通過(guò)鏡像繪制小球,并和地板進(jìn)行混合達(dá)到鏡面效果顷链。
鏡面之后目代,y軸的前后移動(dòng)會(huì)反向;原來(lái)正面為逆時(shí)針嗤练,現(xiàn)在為順時(shí)針榛了。

// 添加反光效果
    //翻轉(zhuǎn)Y軸
    modelViewMatrix.Scale(1.0f, -1.0f, 1.0f);
    //鏡面世界圍繞Y軸平移一定間距,因?yàn)殓R面了煞抬,所以是向下移動(dòng)0.8
    modelViewMatrix.Translate(0.0f, 0.8f, 0.0f);
    
    // 鏡面后霜大,原來(lái)逆時(shí)針為正面,現(xiàn)在順時(shí)針為正面
    //8.指定順時(shí)針為正面
    glFrontFace(GL_CW);
  
    //9.繪制地面以外其他部分(鏡面)
    drawSomething(yRot);
   
    //10.恢復(fù)為逆時(shí)針為正面
    glFrontFace(GL_CCW);
    
    //11.繪制鏡面完畢革答,恢復(fù)矩陣
    modelViewMatrix.PopMatrix();
    
    //12.開啟混合功能(繪制地板)
    glEnable(GL_BLEND);
    //13. 指定 glBlendFunc 顏色混合方程式
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
    //14.綁定地面紋理
    glBindTexture(GL_TEXTURE_2D, uiTextures[0]);
    
    /*15.
     紋理調(diào)整著色器(將一個(gè)基本色乘以一個(gè)取自紋理的單元nTextureUnit的紋理)
     參數(shù)1:GLT_SHADER_TEXTURE_MODULATE
     參數(shù)2:模型視圖投影矩陣
     參數(shù)3:顏色
     參數(shù)4:紋理單元(第0層的紋理單元)
     */
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 transformPipeline.GetModelViewProjectionMatrix(),
                                 vFloorColor,
                                 0);
    //開始繪制
    floorBatch.Draw();
    //繪制完畢战坤,取消混合
    glDisable(GL_BLEND);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曙强,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子途茫,更是在濱河造成了極大的恐慌碟嘴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囊卜,死亡現(xiàn)場(chǎng)離奇詭異娜扇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栅组,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門雀瓢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人玉掸,你說(shuō)我怎么就攤上這事刃麸。” “怎么了司浪?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嫌蚤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我断傲,道長(zhǎng),這世上最難降的妖魔是什么智政? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任认罩,我火速辦了婚禮,結(jié)果婚禮上续捂,老公的妹妹穿的比我還像新娘垦垂。我一直安慰自己,他們只是感情好牙瓢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布劫拗。 她就那樣靜靜地躺著,像睡著了一般矾克。 火紅的嫁衣襯著肌膚如雪页慷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天胁附,我揣著相機(jī)與錄音酒繁,去河邊找鬼。 笑死控妻,一個(gè)胖子當(dāng)著我的面吹牛州袒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弓候,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼郎哭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼他匪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夸研,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邦蜜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后陈惰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畦徘,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年抬闯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了井辆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溶握,死狀恐怖杯缺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睡榆,我是刑警寧澤萍肆,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站胀屿,受9級(jí)特大地震影響塘揣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宿崭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一亲铡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葡兑,春花似錦奖蔓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至洲守,卻和暖如春疑务,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梗醇。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工暑始, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人婴削。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓廊镜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親唉俗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗤朴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355