游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1547|回复: 1

关于阴影效果----求助大虾帮助

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-4-4 12:37:00 | 显示全部楼层 |阅读模式
我在做阴影效果,使用的方法是《OpenGL超级宝典》中的shadow map(阴影图),现在遇到一个问题始终解决不了,请求大虾帮助。先谢过!!
我建立的场景是一个地形环境,其中有几个简单的几何物体(赋以颜色)。
我遇到的问题是:当用分成设色的方法绘制地形时,几何物体的阴影可以正确的投射到地形上,并可以随光源和物体的运动而变化;但是,如果给地形贴上纹理,阴影就不见了,同时随着光源的位置变化,地形纹理会出现无法想象的变化,我推测是纹理矩阵发生变化。可是我已经在纹理矩阵操作之前绑定了阴影图的纹理。
在绘制场景时,主要代码如下:
       
                GLfloat sPlane[4] = {1.0f, 0.0f, 0.0f, 0.0f};
                GLfloat tPlane[4] = {0.0f, 1.0f, 0.0f, 0.0f};
                GLfloat rPlane[4] = {0.0f, 0.0f, 1.0f, 0.0f};
                GLfloat qPlane[4] = {0.0f, 0.0f, 0.0f, 1.0f};

                        GLfloat lowAmbient[4] = {0.1f, 0.1f, 0.1f, 1.0f};
                        GLfloat lowDiffuse[4] = {0.35f, 0.35f, 0.35f, 1.0f};

                        //由于不存在让“让环境光”比较失败的值
                        //必须首先设置环境光下的场景
                        glLightfv(GL_LIGHT0, GL_AMBIENT, lowAmbient);
                        glLightfv(GL_LIGHT0, GL_DIFFUSE, lowDiffuse);
                       
                        DrawBackground();
                        DrawModels();

                        //启用Alpha检测,丢弃被阴影遮挡的片段
                        glAlphaFunc(GL_GREATER, 0.9f);
                        glEnable(GL_ALPHA_TEST);

                glLightfv(GL_LIGHT0, GL_AMBIENT, m_fvAmbientLight);
                glLightfv(GL_LIGHT0, GL_DIFFUSE, m_fvDiffuseLight);
       
                //设置阴影比较
                glBindTexture(GL_TEXTURE_2D, m_iShadowTextureID);
                glEnable(GL_TEXTURE_2D);
                glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
                                                GL_COMPARE_R_TO_TEXTURE);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

                //设置视觉平面,用于场景上阴影贴图的投影
                glEnable(GL_TEXTURE_GEN_S);
                glEnable(GL_TEXTURE_GEN_T);
                glEnable(GL_TEXTURE_GEN_R);
                glEnable(GL_TEXTURE_GEN_Q);
                glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
                glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
                glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
                glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);

                glTexGenfv(GL_S, GL_EYE_PLANE, sPlane);
                glTexGenfv(GL_T, GL_EYE_PLANE, tPlane);
                glTexGenfv(GL_R, GL_EYE_PLANE, rPlane);
                glTexGenfv(GL_Q, GL_EYE_PLANE, qPlane);

                //设置纹理矩阵用于阴影贴图投影
                glMatrixMode(GL_TEXTURE);
                glLoadIdentity();
                glTranslatef(0.5f, 0.5f, 0.5f);
                glScalef(0.5f, 0.5f, 0.5f);               
                glMultMatrixf(m_fv16LightProjection);
                glMultMatrixf(m_fv16LightModelview);
                // 绘制地形(以纹理或颜色方式)
                DrawBackground();
                        // 绘制集合物体
                DrawModels();

                glDisable(GL_ALPHA_TEST);
                glDisable(GL_TEXTURE_2D);
                glDisable(GL_TEXTURE_GEN_S);
                glDisable(GL_TEXTURE_GEN_T);
                glDisable(GL_TEXTURE_GEN_R);
                glDisable(GL_TEXTURE_GEN_Q);

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-4-7 12:46:00 | 显示全部楼层

Re:关于阴影效果----求助大虾帮助

没人顶?
自己来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 04:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表