// 创建深度纹理 glGenTextures(1, &depthTexture); glBindTexture(GL_TEXTURE_2D, depthTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glTexParameteri
纹理 数据多了一种深度纹理的类型,其内部格式包括 GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32,数字代表每个纹理单 元包含的位数。一般情况下,我们希望其内部格式与深度缓冲区的精度相匹配。OpenGL允许你指定通用的GL_DEPTH_COMPONENT格式来匹配 你的深度缓冲区。在以光源的视角绘制后,我们把深度...
GlCompileStatus GlCompressedTextureFormats GlConstantAlpha GlConstantColor GlCullFaceMode GlCurrentProgram GlCurrentVertexAttrib GlCw GlDecr GlDecrWrap GlDeleteStatus GlDepthAttachment GlDepthBits GlDepthBufferBit GlDepthClearValue GlDepthComponent GlDepthComponent16 ...
floatLinearizeDepth(floatdepth){floatz = depth *2.0-1.0;// back to NDCreturn(2.0* near * far) / (far + near - z * (far - near)); } 二、模板测试 1.模板缓冲 模板缓冲是8位的,有256个值,可以由GLFW实现。 2.OpenGL的模板缓冲操作 glEnable(GL_STENCIL_TEST) 开启模板测试操作 glClear(G...
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, shadowWidth, shadowHeight, 0); 只有在物体移动或者光源移动时,才需要重新产生深度纹理。如果仅仅是照相机移动,我们并不需要重新产生深度纹理,因为以光源的角度来看,深度纹理没有变化。当窗口的大小改变时,我们也需要产生一个更大的深度纹理。
// create depth texture unsignedintdepthMap; glGenTextures(1,&depthMap); glBindTexture(GL_TEXTURE_2D,depthMap); /*** 功能:指定一个二维纹理图像,纹理将指定纹理图像的一部分映射到纹理化为活动的每个图形基元上。 /*** 当前片段着色器或顶点着色器使用内置纹理查找函数时,纹理处于活动状态 /*** 参数1...
GL_DEPTH_COMPONENT 这个玩意儿的通道只有r,我记得没错的话他绑的是GL_R16F的。如果要rgba都有值,...
EN前言 在物理世界中,光是视觉的根基。在计算机的世界中,亦是如此。我们看到一个物体,除了它的形态...
GL_REDGL_RGGL_RGBGL_BGRGL_RGBAGL_BGRAGL_RED_INTEGERGL_RG_INTEGERGL_RGB_INTEGERGL_BGR_INTEGERGL_RGBA_INTEGERGL_BGRA_INTEGERGL_STENCIL_INDEXGL_DEPTH_COMPONENTGL_DEPTH_STENCIL 需要注意的是:上述的格式会将输出的数值限制到[0,1],正常情况我们输出颜色是没有问题的,但是如果我们想利用帧缓存存储不限制...
(全局)=== glEnable(GL_DEPTH_TEST);//深度测试 //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //=== #pragma region Init Shader Program Shader myShader("vertexSource.vert", "fragmentSource.frag"); #pragma endregion myShader.use(); myShader.SetUniform1i("texture1", 0); glm...