opengl怎么实现光柱的效果

yydjtcy 2012-08-27 09:26:51
想用opengl&vc++实现如下光柱的效果,就是整个光束都可以看见,而不是照射到物体上才能看到,各位给小弟一个思想提示吧,不尽感激
...全文
436 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
b3d 2012-12-06
  • 打赏
  • 举报
回复
这需求用粒子系统里的cone画一个就很好了。如果没有粒子系统就自己画个圆柱。然后贴上半透明的纹理。记得打开混合。
卡卡Gemini 2012-11-27
  • 打赏
  • 举报
回复
我看了the_venus说的代码,确实可以把顶点坐标拿出来画光柱,但是是空心的,我想实现一个实心的光柱,好像搞不定啊...... 我开始采用了从里向外分层画的机制,但是太卡,所以没法使用。
yydjtcy 2012-08-31
  • 打赏
  • 举报
回复
我的现实情况不允许我有这样的时间和机会仔细研究这些算法原理,我刚开始接触这个,毕业后我也确实不想搞这个了,现在没办法。。。事实上我的专业是GIS。。。有demo可以提供吗?[Quote=引用 4 楼 的回复:]
你这样的人不适合于学3D,建议你转行吧...
[/Quote]
the_venus 2012-08-30
  • 打赏
  • 举报
回复
你这样的人不适合于学3D,建议你转行吧...
the_venus 2012-08-28
  • 打赏
  • 举报
回复
你可以看一下Shadow Volume 中的阴影体的生成算法吧
下面的伪代码是从一篇叫<<volume shadows tutorial nuclear>>的论文上面抄下来的,用于计算阴影体的轮廓边缘:

//transform the light to the coordinate of the object
LightPosition = LightPosition * Inverse(OjbectWorldMatrix);
/*我加的:Inverse(ObjectWorldMatrix),就是将模型矩阵求逆*/
for(every polygon)
{
IncidentLightDir = AveragePolyPosition - LightPosition;
/* 我加的:AveragePolyPosition 就是计算多边形的各个顶点位置的平均值,得到的就是多边形的重心的位置*/
//if the polygon faces away from the light source...
if(DotProduct(IncidentLightDir, PolygonNormal) >= 0.0)
{
for(every edge of the polygon)
{
if(the edge is always in the contour edge list)
{
//then it can't be a contour edge since it is
//referenced by two triangels that are facing
//away from the light
remove the existing edge from the contour list;
}
else
{
add the edte to the contour list;
}
}
}
}

这样就计算出了物体在光照下的轮廓边缘,下面的代码计算阴影体对象:

ExtrudeMagnitude = A_BIG_NUMBER; //一个任意大的数
for(every edge)
{
ShadowQuad[i].vertex[0] = edge[i].vertex[0];
ShadowQuad[i].vertex[1] = edge[i].vertex[1];
ShadowQuad[i].vertex[2] = edge[i].vertex[1] + ExtrucdMagnitude * (edge[i].vertex[1] - LightPosition);
ShadowQuad[i].vertex[3] = edge[i].vertex[0] + ExtrudeMagnitude * (edge[i].vertex[0] - LightPosition);
}


于是ShadowQuad里面就存放了阴影体轮廓边缘,你只需要把ShadowQuad绘制出来就绘制出光柱效果了,如果你懂得了ShadowVolume的原理,这是不难的。。。
yydjtcy 2012-08-28
  • 打赏
  • 举报
回复
谢谢,不过我的水平实在有限,算法什么的都没接触过,平时实现一个功能都是直接找demo然后想办法移植的,网上查了半天,说是体积雾或者体积光照也能实现,就是实在不知道怎么下手,请问你有一些相似的demo吗?我想研究研究那些demo看能不能移植,老师给的时间实在有限,谢谢![Quote=引用 1 楼 的回复:]
你可以看一下Shadow Volume 中的阴影体的生成算法吧
下面的伪代码是从一篇叫<<volume shadows tutorial nuclear>>的论文上面抄下来的,用于计算阴影体的轮廓边缘:

C/C++ code


//transform the light to the coordinate of the object
LightPosition = LightPo……
[/Quote]
yydjtcy 2012-08-28
  • 打赏
  • 举报
回复
谢谢,不过我的水平实在有限,算法什么的都没接触过,平时实现一个功能都是直接找demo然后想办法移植的,网上查了半天,说是体积雾或者体积光照也能实现,就是实在不知道怎么下手,请问你有一些相似的demo吗?我想研究研究那些demo看能不能移植,老师给的时间实在有限,谢谢![Quote=引用楼主 的回复:]
想用opengl&vc++实现如下光柱的效果,就是整个光束都可以看见,而不是照射到物体上才能看到,各位给小弟一个思想提示吧,不尽感激
[/Quote]

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧