OpenGL光照效果,阴影效果生成

OpenGL设置光照效果,为什只看到光照,而没有看到阴影?难道,阴影要另外生成?如果要另外生成阴影,要怎么做?求大神指导。

2个回答

阴影生成是另外的一门技术,要比光照难得多。你可以参考一下这个教程:http://learnopengl-cn.readthedocs.io/zh/latest/

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
OpenGL光照效果 OpenGL光照效果
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
opengl光照效果之点光源
点光源和平行光光源的区别 平行光光源:平行光光源的所有入射光线是平行的,且不会发生衰减。 点光源:点光源的入射方向是被照射模型上的点的坐标减去点光源所在位置坐标的向量,且会随着距离的增加发生衰减。 效果图: 点光源片元shader uniform vec4 U_LightPos;//点光源坐标 uniform vec3 U_EyePos;//眼睛的坐标 uniform vec4
OpenGL光照效果
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
OpenGL ES 光照效果
一个立方体 光照模型 环境光 散射光 镜面光 为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样的颜色混在一起,看不出来是否是立方体。并且添加上转动旋转功能,这样转动起来立体感更强一些。 一个立方体 立方体类Rectangle.java pu...
用opengl做的光照阴影效果完整源码
用opengl做的光照阴影效果完整源码,十分值得学习!
pov-ray实现光照效果,阴影效果,镜面效果,透明效果,
pov-ray实现光照效果,阴影效果,镜面效果,透明效果,
OPENGL开发光照效果源码
利用OPENGL实现了三维图形的开发,包括光照效果,此文件是程序源码
OpenGL的光照效果为什么出不来?
OpenGL的光照是基本操作之一,可是我每次使用效果都不理想。rnrnglLightfv()rnglMaterialfv()rnglEnable(GL_LIGHT0);rnglEnable(GL_LIGHTING);rnrn这些步骤都做了rnrn整个物体模模糊糊只有一种明暗等级,无法产生立体的感觉。rn我不停地修改光源和材质的属性也无济于事。rn请问各位大侠这是怎么回事啊?
opengl光照
关于如何在opengl使用光照来实现各种效果
OpenGL光照
1. OpenGL光照分类 OpenGL光由自发光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和高光(Specular Light)组成 自发光(Emitted Light):由物体自身发出并且不受任何光源影响。如果物体本身不发光,则无此属性。 环境光(Ambient Light):那些在环境中进行了充分散射,而无法
opengl 光照
想要画一个弯管,是用两个圆柱体加一个部分圆盘实现,现在的问题是,设置了光照后,圆柱看起来是立体三维的圆盘是二维,要怎么样通过改变光照效果实现圆盘部分的立体效果呢?
OpenGL ES着色语言-光照效果之散射光
OpenGL光照模型,在固定管线中,主要是调用OpenGL函数实现,如果使用着色器,该怎么实现。本文的例子是移植OpenGL 4.0 Shading Language Cookbook中第二章的例子。代码已经移植到Android上。    散射光计算主要涉及到两个向量,第一个是顶点到光源的向量S,以及顶点处的法向量N。光照计算在眼睛坐标中进行。具体见下图所示:有这两个向量之后,还要考虑顶点处的漫反
求助,opengl FBO 下,光照效果不对
如题rn相关代码如下rn建立普通FBO,挂一个纹理和深度缓冲rn[code=c]BOOL CGLFRAME::CreateFBO(HWND hWnd)rnrn HDC hDC=::GetDC(hWnd);rn if(!wglMakeCurrent(hDC,this->m_hRC))rn //选为当前RC失败rn return FALSE;rn rn glGenTextures(1, &m_FBOTexIndex);rn glBindTexture(GL_TEXTURE_2D, m_FBOTexIndex);rn glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);rn glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);rn glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);rn glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);rn glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, m_TextrueSize,m_TextrueSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);rn glBindTexture(GL_TEXTURE_2D, 0);rn // 创建深度缓冲区rn glGenRenderbuffersEXT(1, &m_DBIndex);rn glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_DBIndex);rn glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, m_TextrueSize,m_TextrueSize);rn glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);rnrn // 创建FBO对象rn glGenFramebuffersEXT(1, &m_FBIndex);rn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FBIndex);rn glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_FBOTexIndex, 0);rn glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_DBIndex);rn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);rnrn GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); rn if(status != GL_FRAMEBUFFER_COMPLETE_EXT)rn rn return false;rn rn wglMakeCurrent(hDC,NULL);rn return true;rn[/code]rn建立多重采样FBO,挂一个渲染和深度rn[code=c]BOOL CGLFRAME::CreateMS_FBO(HWND hWnd)rnrn HDC hDC=::GetDC(hWnd);rn if(!wglMakeCurrent(hDC,this->m_hRC))rn //选为当前RC失败rn return FALSE;rn rn //建立FBrn glGenFramebuffersEXT(1,&m_MSFBIndex); rn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,m_MSFBIndex); rn //建立RBrn glGenRenderbuffersEXT(1,&m_MSRBIndex); rn glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,m_MSRBIndex);rn glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT,8, rn GL_RGBA,m_TextrueSize,m_TextrueSize);rn glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0, rn GL_RENDERBUFFER_EXT,m_MSRBIndex);rn //建立DBrn glGenRenderbuffersEXT(1,&m_MSDBIndex); rn glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,m_MSDBIndex); rn glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT,8, rn GL_DEPTH_COMPONENT24,m_TextrueSize,m_TextrueSize);rn glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT, rn GL_RENDERBUFFER_EXT,m_MSDBIndex); rnrn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0); rnrn GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);rn if(status != GL_FRAMEBUFFER_COMPLETE_EXT)rn rn return false;rn rn wglMakeCurrent(hDC,NULL);rn return true;rn[/code]rn在多重采样FBO上画图,然后blit到普通FBO上rn[code=c]void CGLFRAME::DrawOnFBO(HDC hDC,HWND hWnd)rnrn wglMakeCurrent(hDC, m_hRC);rn rn //先在MSFB上作图rn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_MSFBIndex);rn SetMSFBOView();rn glClearColor(0.0,1.0,0.0,1.0f);rn glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);rnrn glViewport(0,0,m_TextrueSize,m_TextrueSize); // 重置当前的视口rn glMatrixMode(GL_PROJECTION); // 选择投影矩阵rn glLoadIdentity();rn glOrtho(-(GLdouble)m_TextrueSize/2.0,(GLdouble)m_TextrueSize/2.0,rn -(GLdouble)m_TextrueSize/2.0,(GLdouble)m_TextrueSize/2.0,rn -1000,1000);rn glMatrixMode(GL_MODELVIEW);rn glLoadIdentity();rn glPushMatrix();rn glEnable(GL_LIGHTING);rn MyRender();rnrn glPopMatrix();rn glFlush();rn glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);rn //将MSFB上的图blit到FB的纹理上rn glBindFramebufferEXT(GL_READ_FRAMEBUFFER, m_MSFBIndex);rn glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, m_FBIndex);rn rn glBlitFramebufferEXT(0, 0, m_TextrueSize, m_TextrueSize, 0, 0, m_TextrueSize, m_TextrueSize, GL_COLOR_BUFFER_BIT, GL_NEAREST);rn rn glBindFramebufferEXT(GL_READ_FRAMEBUFFER, NULL);rn glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, NULL);rn wglMakeCurrent(hDC, NULL);rn[/code]rn最后把FBO的纹理贴到屏幕上rn[code=c]void CGLFRAME::MapTextrue(HDC hDC,HWND hWnd)rnrn //将FBO上的纹理贴到屏幕上rn wglMakeCurrent(hDC, m_hRC);rn SetScreenGLView(hWnd);rn glClearColor(0.0,0.0,1.0,0.0f);rn glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);rnrn glPushMatrix();rn glDisable(GL_LIGHTING);rn glEnable(GL_TEXTURE_2D);rn glBindTexture(GL_TEXTURE_2D,m_FBOTexIndex);rnrn glBegin(GL_QUADS);rn glTexCoord2d(0.0, 0.0); glVertex3d(-(GLdouble)m_TextrueSize/2.0,-(GLdouble)m_TextrueSize/2.0, 0.0);rn glTexCoord2d(1.0, 0.0); glVertex3d( (GLdouble)m_TextrueSize/2.0,-(GLdouble)m_TextrueSize/2.0, 0.0);rn glTexCoord2d(1.0, 1.0); glVertex3d( (GLdouble)m_TextrueSize/2.0, (GLdouble)m_TextrueSize/2.0, 0.0);rn glTexCoord2d(0.0, 1.0); glVertex3d(-(GLdouble)m_TextrueSize/2.0, (GLdouble)m_TextrueSize/2.0, 0.0);rn glEnd();rn glEnable(GL_LIGHTING);rn glPopMatrix();rn glFlush();rnrn SwapBuffers(hDC);rn wglMakeCurrent(hDC, NULL);//多实例rn[/code]rn结果如下rn[img=https://img-bbs.csdn.net/upload/201601/06/1452021424_357632.png][/img]rn我画了两个圆柱,同样的绘图代码在不用FBO时就可以显示两个正常的光照圆柱,可为什么在FBO下圆柱整体颜色都是一样的?rn那里设置的不对呢?菜鸟求解答
用OpenGL如何实现太阳光照效果?
我想实现类似太阳光从窗户射进来那种有一道光的效果,rn我使用了rn GLfloat angle=110.0;rn GLfloat lightambient[] =0.7,0.7,0.7,1.0;rn GLfloat light_direction[] = -1.0, -1.0, 0.0;rn GLfloat light_position1[] = 12.0, 12.0, 0.0, 1.0 ;rn GLfloat light_diffuse1[] = 1.0, 1.0, 0.0, 0.0 ;rnrnrn glLightfv(GL_LIGHT0,GL_SPOT_CUTTOFF,angle)rn glLightfv(GL_LIGHT1, GL_AMBIENT,lightambient1);rn glLightfv(GL_LIGHT1, GL_POSITION, light_position1);rn glLightfv(GL_LIGHT1, GL_DIFFUSE,light_diffuse1);rn glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light_direction);rn这种光照在物体上确实是有效果,但是却没有出现那种太阳光,这样显得很不真实,怎么样才能弄出那种太阳光的那种效果?????????
请教OPENGL怎样才能做出CG光照的效果
本人想用OPENGL下,不用CG的情况下,做出比较好的光照效果。由于模型的面比较大,怎样才能做出在一个面上比较光滑的明暗变化?能不能做出用CG条件下的光照效果?最好提供些资料,谢谢!
opengl es 光照效果,材质设置
之前讲到了opengl es基本图形的绘制,变换,下面我们来看看光照和材质的应用。              光照模型:              为图形添加光照,就能使图形看上去有立体效果。在 OpenGL 光照模型中光源和光照效果可以细分为红,绿,蓝三个部分,光源由红,绿,蓝强度来定义,而物体表面材料由其反射红,绿,蓝的程度和方向来定义。           OpenGL 光照模型中
光照效果
Javascript经典专区---光照效果id="Layer1" style="height: 32; left: 66; position: absolute; top: 41; width: 52">--> 日落大道上的...
OpenGL中的阴影效果实现
如果实现物体之间的阴影效果。rnrn我的场景中有多个物体,和几个光源,我该如果计算物体之间的阴影效果。rn我有一个例子是如果实现几个物体在墙上和地板的阴影效果,但是真实的物体不一定是平面的。阴影的Matrix不是固定的。这种的物体该如何考虑。rnrn如果知道那个物体是在另一个物体前(相对光)。甚至是相交的两个物体。我的例子在这方面是预知物体的位置。在实际应用中就不一样了。rn直接把深度检测关闭了是不行的。rnrn希望有兴趣的朋友一起探讨一下。
opengl消隐与光照
1.      设置材料的颜色 OpenGL的光照模型根据材料反射的红、绿和蓝光的比例来模拟它的颜色。和光一样,材料也具有不同的环境、散射和镜面颜色,它们决定了材料对红、绿和蓝光的反射率。材料的环境反射属性与每种入射光的环境光成分组合,散射反射属性与入射光的散射成分组合,镜面反射属性和入射光的镜面成分组合。环境和散射属性定义了材料的颜色,它们一般很相似。               使用的函数
基于OpenGL的光照程序代码
基于OpenGL的光照程序代码 有详细的程序代码 希望能帮组你
opengl游戏编程-光照实例
我们将创建一个opengl光照实例在场景中绘制一个圆球,观察它在三种不同颜色移动光源照射下的效果
openGL 光照机器人
利用openGL 画一个机器人,加上光照附上材质及其相关运动~~
opengl光照小例子
关于opengl的光照模型,比较简单的例子
裁剪,光照,纹理opengl
裁剪,光照,纹理,教师例子,欢迎下载,opengl,opengl vc++
OpenGL光照小球排列
使用颜色,光照,材质,本例用到了双面光照,16个小球的材质随机产生,并排列成4*4的矩阵。只有一个C文件,可以用记事本打开拷贝代码粘贴到工程里新建的.cpp文件里。当然之前要配置好opengl。
OpenGL消隐和光照
在OpenGL观察实验的基础上,通过实现实验内容,掌握OpenGL中消隐和光照的设置,并验证课程中消隐和光照的内容。 模型尺寸参见OpenGL观察实验。要求修改代码达到以下要求: 1.通过设置材料使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1); 2.通过设置材料使得茶壶为金黄色; 3.添加按键处理,移动场景中的光源,并能改变光源的颜色; 4.修改茶壶的镜面反射系数,使之对光源呈现高光; 5.在场景中添加一个聚光光源,其照射区域正好覆盖茶壶,并能调整改聚光光源的照射角度和朝向。
opengl光照问题
想绘制一个太阳,并想将太阳的位置设置为光源位置。rn设置光源代码:rn[code=C/C++]rnGLfloat light_position[] = MAP+30, 30.0, -MAP+20, 1.0;rn glLightfv(GL_LIGHT0, GL_POSITION, light_position);rn glEnable(GL_LIGHTING);rn glEnable(GL_LIGHT0);rn glEnable(GL_DEPTH_TEST);rn glEnable(GL_COLOR_MATERIAL);rn[/code]rn绘制太阳代码:rn[code=C/C++]rnGLfloat light_ambient[] = 0.0, 0.0, 0.0, 1.0 ;rn GLfloat light_diffuse[] = 1.0, 1.0, 1.0, 1.0 ;rn GLfloat light_specular[] = 1.0, 1.0, 1.0, 1.0 ;rn GLfloat light_position[] = MAP+30, 30.0, -MAP+20, 1.0;rn glEnable( GL_LIGHT0 );rn glEnable( GL_LIGHTING );rn glEnable( GL_DEPTH_TEST );rnrn //定义太阳的材质//显红色rn GLfloat mat_ambient[] = 0.4, 0.0, 0.0, 1.0 ;rn GLfloat mat_emission[] = 0.5, 0.0, 0.0, 1.0 ;rnrn //绘制太阳rn glLightfv( GL_LIGHT0, GL_AMBIENT, light_ambient );rn glLightfv( GL_LIGHT0, GL_DIFFUSE, light_diffuse );rn glLightfv( GL_LIGHT0, GL_SPECULAR, light_specular );rn glLightfv( GL_LIGHT0 ,GL_POSITION, light_position );rn glMaterialfv( GL_FRONT ,GL_AMBIENT_AND_DIFFUSE, mat_ambient );rn glMaterialfv( GL_FRONT, GL_EMISSION, mat_emission );rnrn GLfloat ambient[] = 0.2, 0.2, 0.2, 1.0 ;rn glLightModelfv( GL_AMBIENT, ambient );rnrnrn glPushMatrix();rn glTranslatef(MAP+30, 30, -MAP+20);rn glutSolidSphere(1.0, 40, 40);rn glPopMatrix();rn[/code]rn首先想知道这么做有没有错。其次想解决一个问题,就是怎么在绘完太阳之后将太阳的红色(GLfloat mat_emission[] = 0.5, 0.0, 0.0, 1.0 ;)禁掉,使它不会影响后面导入的3D模型的颜色。
OPENGL光照问题~
大家好:我是新来的,有个问题,我想在OPENGL中使用光照,并且把光照留在被照物体上,使之随着物体的转动覆盖到整个物体的表面。怎么才能做到呢?????rn 谁能帮我解答一下~谢谢!!!rn
OPenGL光照问题
在NEHE教程当中一节关于光照的,渲染一个立方体,代码如下:rn// 前侧面rnglNormal3f( 0.0f, 0.0f, 1.0f);// 法线指向观察者rnglTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); rnglTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); rnglTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); rnglTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);rnrn// 顶面rnglNormal3f( 0.0f, 1.0f, 0.0f);// 法线向上rnglTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); rnglTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); rnglTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); rnglTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);rn......rn前侧面、顶面有2个共同的点,比如说glVertex3f( 1.0f, 1.0f, 1.0f)吧,这样以来岂不是给这个点指定了2个法向量吗?(glNormal3f( 0.0f, 0.0f, 1.0f)//glNormal3f( 0.0f, 1.0f, 0.0f)都同时作用在它上面)rn那么最后的结果是什么哪?OPenGL本身会根据这两个法向量计算一个折衷的向量作为这个点的最终的法向量吗?
OpenGL ES 光照(三)
镜面光(Specular):当光滑物体表面被照射时会有方向很集中的反射光镜面光的最终强度依赖于入射光、观察者的位置 镜面光的计算模型比前面的两种光都要复杂一些,具体公式如下。镜面光照射结果=材质的反射系数×镜面光强度×max(0,(cos(半向量与法向量的夹角)) ^粗糙度) 实际开发中往往分两步进行计算,此时公式被拆解为如下情况。镜面光最终强度=镜面光强度×max(0,(cos(半向量与法向量的夹
OPENGL的双面光照问题
各位大虾大家好:rn 在OPENGL里怎么实现双面光照呢?rn 找了一些资料说里面用glLightModeli(LIGHT_MODEL_TWO_SIDE,GL_TRUE);可是一用这个函数就出错也不知道该在什么地方用,在glenable(lighting)前面还是后面或者其他地方?rn 还有说定义材料属性 glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff);rn 到底怎么用呢,我都快抓忘各位大虾不惜赐教谢谢;
OpenGL 光照环境的三棱锥
光照环境的三棱锥 VC++绘图(OpenGL)
openGL 光照范例
一个简单的太阳系光照模型,能够教你写出各种基本光照
OpenGL光照演示
啥都不说。上课的资源。喜欢看的下一个。基础才是关键
OpenGL 光照及材料
计算机图形学 OpenGL 实验5 光照 材料
OpenGL材料光照
演示物体表面材料属性的光照效果,OpenGL编写
opengl 光照演示
opengl 光照演示 地球围绕太阳旋转 非常简单的demo
OpenGL添加纹理光照
使用OpenGl完成纹理光照的添加,使用a,b键进行平移,c,d键进行旋转,L键控制光照开关。纹理与源文件放在同一个文件加下。
实验7 OpenGL光照
 一.实验目的:了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。二.实验内容:(1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试验不同的光照与材质系数;(2)运行示范代码1,了解光照与材质函数使用。三.实验原理:为在场景中增加光照,需要执行以下步骤:(1) 设置一个或多个光源,设定它的有关属性;(2) 选择一种光照模型;(3) 设...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法