opengl中怎么让绘制的物体大小随着相机视点的变化保持不变

yydjtcy 2012-11-19 03:18:00
我在opengl中绘制一个箱子,增加了相机漫游功能,现在想在相机漫游过程中,不管相机离物体多远,这个箱子的大小看起来保持不变(箱子的位置不变,只是随着相机变化大小发生改变,使不管相机多远,箱子看起来还是原来的大小)。请问怎么实现这个功能?我最终的目的是把这个功能放到billboard广告版中,使广告版不仅随着相机变化始终朝着作者,而且大小也不变。
...全文
2011 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
landdominic 2014-04-03
  • 打赏
  • 举报
回复 2
回答正交投影的都没有理解楼主的需求,楼主希望的只是广告板大小不变,其他物体还是在透视场景中的,其实需求有点像googleEarth上某个位置点上有文字,那么无论远近,文字大小始终不变,文字方向始终朝向相机,但是其他景物都是透视效果的。 方法就是计算相机与该物体的距离,然后按距离对物体进行缩放,因为透视投影是线性变化的,距离与大小成反比,那么乘以距离系数就可以抵消这个变化,使得大小始终一样。
yuanmushen 2014-03-31
  • 打赏
  • 举报
回复
将透视投影矩阵改为正交投影矩阵,也就是由锥形视口改为矩形视口就可以了
vincentjelly 2014-02-15
  • 打赏
  • 举报
回复
让它跟随摄像机一起移动不就行了??
diybl 2014-02-12
  • 打赏
  • 举报
回复
ogre下 应该怎么改呢???
ssmtree 2013-12-12
  • 打赏
  • 举报
回复
使用正射投影,glOrtho
wux159 2013-12-03
  • 打赏
  • 举报
回复
opengl 绘制线框模式卡,填充模式就不卡。为什么会这样? 如何解决? 请高手解惑~~ 绘制是使用 顶点坐标
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);		
		glDrawElements(GL_QUADS, (GLsizei)m_iFaceCount * 4, GL_UNSIGNED_INT, (GLvoid*)m_PolyIndices);		
		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glDrawElements(GL_QUADS, (GLsizei)m_iFaceCount * 4, GL_UNSIGNED_INT, (GLvoid*)m_PolyIndices);
wux159 2013-12-03
  • 打赏
  • 举报
回复
10楼说的对~
大师赵 2013-11-19
  • 打赏
  • 举报
回复
公告板加正交投影
BeanBoy 2013-01-30
  • 打赏
  • 举报
回复
“将透视投影改为正交投影”正解!
芯若止水0^0 2012-12-23
  • 打赏
  • 举报
回复
可以尝试点精灵? POINT_SPRITE 需要glew扩展
popy007 2012-12-08
  • 打赏
  • 举报
回复
箱子的位置不随着相机改变,也就是箱子在世界空间中的位置不变,但箱子的大小相对于相机保持不变。那只有下面几个方式: 1 将透视投影改为正交投影 2 箱子随着相机的位置进行缩放 3 相机的fov随着位置变化进行改变 后两个太牵强、刻意了。所以只有第一个方法。
killalarm 2012-12-07
  • 打赏
  • 举报
回复
你这个显然是ui范畴
b3d 2012-12-05
  • 打赏
  • 举报
回复
看错问题- -。如果是大小看起来一直一样的话,那就尝试修改投影矩阵。 大小不变的话,用正投影是比较合适的,顺便给你个billboard的伪代码 float4 Phomo(float3 pos, float3 offset) { float4 result = mul(float4(pos,1.0f), matWorld); result.xyz += offset; result = mul(result,matViewProj); return result; } float r = rotation;//旋转 float3 R = CameraX.xyz; float3 Q = CameraY.xyz; float3 rotR = R*cos(r)+Q*sin(r); //二维旋转 float3 rotQ = R*sin(r)-Q*cos(r); float3 offset = rotR*width+rotQ*height; //相对于Pos的偏移 Pos = Phomo(Pos.xyz, offset*scale);//Pos是billboard中心
b3d 2012-12-05
  • 打赏
  • 举报
回复
按了个回车就上去了。。。悲剧。重新写写。 模型坐标 * 世界矩阵 * 视矩阵 * 投影矩阵 = 齐次坐标-> 转换到屏幕坐标 OpenGL 中把 世界矩阵_视矩阵合并了,叫 model_view_matrix 你现在的问题是要把一个对象的位置 经过世界矩阵,视矩阵变换后的坐标保持一致。 那最好的办法就是把这两个矩阵设为单位阵。
b3d 2012-12-05
  • 打赏
  • 举报
回复
模型坐标 * 世界矩阵 * 视矩阵 * 投影矩阵 = 齐次坐标-> 转换到屏幕坐标
彩阳 2012-11-20
  • 打赏
  • 举报
回复
引用 2 楼 yydjtcy 的回复:
引用 1 楼 jiangcaiyang123 的回复:我是OpenGL的新手,也不太了解,帮顶一下。 似乎你的问题就是怎样用OpenGL实现公告版技术?公告板我已经实现了,就是想让它看起来的大小也保持不变,不仅是朝向不变
《OpenGL超级宝典》里面有一个例子:Texgen(第九章)。在这个例子中,纹理背景的大小是不变的。
yydjtcy 2012-11-19
  • 打赏
  • 举报
回复
引用 1 楼 jiangcaiyang123 的回复:
我是OpenGL的新手,也不太了解,帮顶一下。 似乎你的问题就是怎样用OpenGL实现公告版技术?
公告板我已经实现了,就是想让它看起来的大小也保持不变,不仅是朝向不变
彩阳 2012-11-19
  • 打赏
  • 举报
回复
我是OpenGL的新手,也不太了解,帮顶一下。 似乎你的问题就是怎样用OpenGL实现公告版技术?

8,301

社区成员

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

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