Fermat
ray.h
1 /*
2  * Fermat
3  *
4  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the NVIDIA CORPORATION nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #pragma once
30 
31 #include "types.h"
32 
33 #include <optix_prime/optix_prime.h>
34 #include <cuda_runtime.h>
35 
38 
42 struct Ray
43 {
44  static const RTPbufferformat format = RTP_BUFFER_FORMAT_RAY_ORIGIN_TMIN_DIRECTION_TMAX;
45 
46  float3 origin;
47  float tmin;
48  float3 dir;
49  float tmax;
50 };
51 
55 struct MaskedRay
56 {
57  static const RTPbufferformat format = RTP_BUFFER_FORMAT_RAY_ORIGIN_MASK_DIRECTION_TMAX;
58 
59  float3 origin;
60  uint32 mask;
61  float3 dir;
62  float tmax;
63 };
64 
68 struct Hit
69 {
70  static const RTPbufferformat format = RTP_BUFFER_FORMAT_HIT_T_TRIID_U_V;
71 
72  float t;
73  int triId;
74  float u;
75  float v;
76 };
77 
82 {
83  static const RTPbufferformat format = RTP_BUFFER_FORMAT_HIT_T_TRIID_INSTID_U_V;
84 
85  float t;
86  int triId;
87  int instId;
88  float u;
89  float v;
90 };
91 
92 FERMAT_HOST_DEVICE FERMAT_FORCEINLINE
93 Ray make_ray(
94  const float3 origin,
95  const float3 dir,
96  const float tmin,
97  const float tmax)
98 {
99  Ray r;
100  r.origin = origin;
101  r.tmin = tmin;
102  r.dir = dir;
103  r.tmax = tmax;
104  return r;
105 }
106 
107 FERMAT_HOST_DEVICE FERMAT_FORCEINLINE
108 MaskedRay make_ray(
109  const float3 origin,
110  const float3 dir,
111  const uint32 mask,
112  const float tmax)
113 {
114  MaskedRay r;
115  r.origin = origin;
116  r.mask = mask;
117  r.dir = dir;
118  r.tmax = tmax;
119  return r;
120 }
121 
122 FERMAT_HOST_DEVICE FERMAT_FORCEINLINE
123 Hit make_hit(
124  const float t,
125  const int triId,
126  const float u,
127  const float v)
128 {
129  Hit r;
130  r.t = t;
131  r.triId = triId;
132  r.u = u;
133  r.v = v;
134  return r;
135 }
136 
Definition: ray.h:81
Definition: ray.h:42
Definition: ray.h:68
Definition: ray.h:55