Games101-作业1(vscode+cmake+opencv+eigen)

配置vscode+cmake+opencv+eigen参考下文

https://www.cnblogs.com/Janspiry/p/16046691.html

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(Rasterizer VERSION 1.0)

set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE-CXX_STANDARD_REQUIRED True)

# 中文乱码C的解决办法
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fexec-charset=GBK")
# 中文乱码C++ 的解决办法
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")

find_package(OpenCV REQUIRED)  
# 如果 OpenCV 没有找到,CMake 会报错并停止  
if(NOT OpenCV_FOUND)  
    message(FATAL_ERROR "OpenCV not found!")  
endif()

include_directories(E:\\mengmeng\\opencv\\opencv\\build\\include)
include_directories(C:\\Program Files (x86)\\Eigen3\\include)
include_directories(E:\\mengmeng\\eigen\\eigen-3.4.0)

link_directories(E:\\mengmeng\\opencv\\opencv\\build\\x64\\vc16\\lib)

add_executable(Rasterizer 
main.cpp
Rasterizer.cpp
Triangle.cpp
Rasterizer.hpp
Triangle.hpp)

target_link_libraries(Rasterizer  PRIVATE ${OpenCV_LIBRARIES}) 

target_include_directories(Rasterizer PUBLIC  
                            "${PROJECT_BINARY_DIR}"  
                            )

作业1

// 绕任意轴选择/
Eigen::Matrix4f get_model_any_matrix(Eigen::Vector3d axis, float rotation_angle)
{
    Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
     Eigen::Vector3f axis_float = axis.cast<float>(); //显式将doubule向量转为float
    axis_float.normalize();
    float rotation_angle_radians = rotation_angle * (MY_PI / 180.0f);
    Eigen::AngleAxis<float> rotation(rotation_angle_radians,  axis_float);
    Eigen::Matrix3f rotationMatrix = rotation.matrix();

    model.block<3, 3>(0, 0) = rotationMatrix;
     std::cout << "model的值为:" << model << std::endl;
    return model;

}
// 绕z轴旋转
Eigen::Matrix4f get_model_matrix(float rotation_angle)
{
    Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
    float  rotation_angle_radians  = rotation_angle * (MY_PI / 180.0f);
    Eigen::AngleAxis<float> rotation(rotation_angle_radians , Eigen::Vector3f::UnitZ() );
    Eigen::Matrix3f rotationMatrix = rotation.matrix();

    model.block<3,3>(0, 0) = rotationMatrix;
    std::cout << "model的值为:" << model << std::endl;

     return model;
}
// eye_fov 视野垂直角度  aspect_ratio 屏幕宽高比  zNear近裁剪面的距离  zFar远裁剪面距离
Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,
                                      float zNear, float zFar
)
{
    Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();
    float tanHalfFovy = std::tan(eye_fov * 0.5f * MY_PI / 180.0f);
    Eigen::Matrix4f perspectiveMatrix;
    perspectiveMatrix << 1.0f / (aspect_ratio * tanHalfFovy), 0.0f, 0.0f, 0.0f,
                        0.0f, 1.0f / tanHalfFovy, 0.0f, 0.0f,
                        0.0f, 0.0f, -(zFar + zNear) / (zFar -zNear), -(2.0f * zFar * zNear) / (zFar - zNear),
                        0.0f, 0.0f, -1.0f, 0.0f;
    
    projection = perspectiveMatrix;
    std::cout << "projection的值为:" << projection << std::endl;
    return projection;

}

贴个三角形(),
这里插入图片描述./Rasterizer 45 45 qq.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值