Ray tracing 光线追踪 之 embree ,从入门到精通 02 从源码编译与安装

本文详细介绍如何搭建Embree光线追踪引擎开发环境,包括下载预编译的ispc、TBB,通过vcpkg安装OpenImageIO等步骤,并解决PNG库配置问题。此外,还介绍了CMake配置及调试示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 下载预编译的ispc,安装 

        网址: https://ispc.github.io

        resources -> github page

        进入ispc 的github的release页:Releases · ispc/ispc · GitHub

        找到一个预编译好了的ispc,其中在windows平台上是:https://github.com/ispc/ispc/releases/download/v1.18.0/ispc-v1.18.0-windows.msi

 下载安装。

2. 下载预编译的TBB,并解压至自选路径

https://github.com/oneapi-src/oneTBB/releases

https://github.com/oneapi-src/oneTBB/releases/download/v2021.7.0/oneapi-tbb-2021.7.0-win.zip

3.通过vcpkg 安装 OpenimageIO

    3.1 下载vcpkg

        3.1.1 进入网页
        https://github.com/microsoft/vcpkg
        
        3.1.2 下载
        git clone --recursive https://github.com/microsoft/vcpkg.git

        3.1.3 get vcpkg.exe

        执行 E:\vcpkg>bootstrap-vcpkg.bat

    3.2 安装OpenImageIO

          E:\vcpkg>vcpkg.exe install OpenImageIO:x64-windows

这条命令的执行时间比较久,半个小时可能

4.设置CMake

        4.1 ISPC

        EMBREE_ISPC_EXECUTABLE 选中:D:\Program Files\ISPC\ispc-v1.18.0-windows\bin\ispc.exe 文件

        4.2 TBB cmake能够自动搜索到

        4.3 OpenImageIO 的设置

在cmake embree中是指环境变量:
OPENIMAGEIO_ROOT  为vcpkg中package的路径:E:\vcpkg\packages\openimageio_x86-windows

4.3.1 CMakeLists.txt中对OpenImageIO的使用方式:


The package openimageio provides CMake targets:

    find_package(OpenImageIO CONFIG REQUIRED)
    target_link_libraries(main PRIVATE OpenImageIO::OpenImageIO)


5. PNG问题

Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)

本来用cmake3.21,并且用vcpkg安装了 libpng x64widonws,甚至还设置了 PNG_ROOT,都么有找到libpng;

后来安装了cmake3.25,却自动找到了 anaconda(以前安装过)中的libpng,无奈了,不改了,能编译就行;

概览:


下载安装 ispc:

https://github.com/ispc/ispc/releases


下载解压 tbb:
https://github.com/oneapi-src/oneTBB/releases


git clone --recursive https://github.com/microsoft/vcpkg.git

bootstrap-vcpkg.bat

vcpkg install openimageio

在cmake embree中是指环境变量:
OPENIMAGEIO_ROOT  为vcpkg中package的路径:E:\vcpkg\packages\openimageio_x86-windows

 debug版本编译比较快,最多几分钟

release版慢很多,大概半个小时

6.编译,install

在cmake中,安装路径改为D:盘,否则需要以管理员身份启动vs2022才能有权限INSTALL到C:盘;

默认为debug版本,这样编译比较快,安装后可以调试学习embree本身的代码

ALL_BUILD

INSTALL

分别生成

7.运行

头发这个示例貌似很占内存,几乎把笔记本跑挂,自动关掉了opera

8,测试安装是否成功

创建一个vs2022 c++ 控制台程序,复制,粘贴example代码,

设置项目属性的VC++的包含目录,库目录分别到安装路径下的 include 和 lib,以及链接中的输入项中前边加入 “embree3.lib;”

即可编译调试

API Examples

//https://www.embree.org/api.html
// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include <embree3/rtcore.h>
#include <limits>
#include <iostream>

int main()
{
  RTCDevice device = rtcNewDevice(NULL);
  RTCScene scene   = rtcNewScene(device);
  RTCGeometry geom = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_TRIANGLE);

  float* vb = (float*) rtcSetNewGeometryBuffer(geom,
      RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, 3*sizeof(float), 3);
  vb[0] = 0.f; vb[1] = 0.f; vb[2] = 0.f; // 1st vertex
  vb[3] = 1.f; vb[4] = 0.f; vb[5] = 0.f; // 2nd vertex
  vb[6] = 0.f; vb[7] = 1.f; vb[8] = 0.f; // 3rd vertex

  unsigned* ib = (unsigned*) rtcSetNewGeometryBuffer(geom,
      RTC_BUFFER_TYPE_INDEX, 0, RTC_FORMAT_UINT3, 3*sizeof(unsigned), 1);
  ib[0] = 0; ib[1] = 1; ib[2] = 2;

  rtcCommitGeometry(geom);
  rtcAttachGeometry(scene, geom);
  rtcReleaseGeometry(geom);
  rtcCommitScene(scene);

  RTCRayHit rayhit; 
  rayhit.ray.org_x  = 0.f; rayhit.ray.org_y = 0.f; rayhit.ray.org_z = -1.f;
  rayhit.ray.dir_x  = 0.f; rayhit.ray.dir_y = 0.f; rayhit.ray.dir_z =  1.f;
  rayhit.ray.tnear  = 0.f;
  rayhit.ray.tfar   = std::numeric_limits<float>::infinity();
  rayhit.hit.geomID = RTC_INVALID_GEOMETRY_ID;
  
  RTCIntersectContext context;
  rtcInitIntersectContext(&context);

  rtcIntersect1(scene, &context, &rayhit);

  if (rayhit.hit.geomID != RTC_INVALID_GEOMETRY_ID) {
    std::cout << "Intersection at t = " << rayhit.ray.tfar << std::endl;
  } else {
    std::cout << "No Intersection" << std::endl;
  }

  rtcReleaseScene(scene);
  rtcReleaseDevice(device);
}

运行成功: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值