3D中Camera:lookAt方法的参数要怎么设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3D中Camera:lookAt方法的参数要怎么设置相关的知识,希望对你有一定的参考价值。
相机矫正,创建一个相机,点中右键就可以找到,也可以在菜单modifiers下可以找到(版本不同位置可能不一样) 参考技术A /*@param
targetPosition
The
target's
center
position.
*
@param
up
The
up
vector.
*/
virtual
void
lookAt(const
Vec3&
target,
const
Vec3&
up);
第一个参数,目标点,就是你看向哪个位置。
第二个参数,上方向,就是相机本地坐标系的Y方向,你可以理解为相机头顶的朝向。
如果你的相机位置有更新的话,要在设置相机位置之后调用这个函数。
检查点的正确方法是在 3d 圆锥内
【中文标题】检查点的正确方法是在 3d 圆锥内【英文标题】:What's the proper way to check a point is within a 3d cone 【发布时间】:2019-06-17 00:35:27 【问题描述】:所以,这很尴尬,看起来我所有的高中数学技能都已经生锈了。
我费力地整理了一些似乎可以工作的代码,但看着它,我觉得我要么在绕道而行,要么不理解其背后的数学原理。
glm::vec3 cameraDirection = glm::normalize(camera->lookat - camera->position);
glm::vec3 cameraViewAxis = camera->position + (cameraDirection * (camera->farPlaneDistance) );
for(const auto & obj : scene->objects)
glm::vec3 point = obj.position;
glm::vec3 objDirection = glm::normalize(point - camera->position);
float cosAlpha = glm::dot(objDirection, cameraDirection);
float distance = glm::distance(camera->position, point);
float distanceOnViewAxis = distance * cosAlpha;
glm::vec3 pointOnViewAxis = camera->position + (cameraDirection * distanceOnViewAxis);
float distanceFromViewAxis = glm::distance(pointOnViewAxis, point);
float viewRadius = getViewRadius(distanceOnViewAxis); // based on FOV/aspect ratio
if(distanceFromViewAxis < viewRadius)
// might be visible
我觉得有更好的方法可以做到这一点,我只需要distanceOnViewAxis
和distanceFromViewAxis
,在三角函数中它们是相邻和相反 em> 直角三角形的边,我知道角和斜边。
我查看了一些类似的问题,但它们并没有真正帮助我。
【问题讨论】:
见Detect if a cube and a cone intersect each other? 【参考方案1】:这是一个更简洁的解决方案,同时使用点积和叉积。
bool is_in_cone(const glm::vec3& camera_pos, const glm::vec3& camera_direction, const glm::vec3& object_pos)
auto normalized_dir = glm::normalize(camera_direction);
auto obj_vector = object_pos - camera_pos;
auto dis_on_view_axis = glm::dot(obj_vector, normalized_dir);
if (dis_on_view_axis < 0.0f) return false;
return glm::length(glm::cross(obj_vector, normalized_dir)) <= getViewRadius(dis_on_view_axis);
我画了一些图表来展示这背后的数学原理(请注意,在图表中我考虑了圆锥高度的限制,但您似乎不需要它)
【讨论】:
以上是关于3D中Camera:lookAt方法的参数要怎么设置的主要内容,如果未能解决你的问题,请参考以下文章
unity3d 怎么移除物体的脚本,不要使用active 如camera.active=false,要使用如enable的效果哦