2
Q
从体积中渲染体积
A
回答
0
只渲染一次。
在那个过程中,你只渲染背面。摄像机位置需要从世界坐标转换为3轴坐标系统,它们与您渲染的音量盒的大小一致。您的目标是创建一个4x4矩阵,其中所有列向量都是vec4(...,0),这些向量的x,y,z由x,y,z轴方向与卷盒长度定义。如果该框与x轴平行,则该矢量是(1,0,0)。如果它被拉伸到(2,0,0),那么它就是它自己的x轴,它将成为矩阵中第0列的列向量。用y和z轴和它们的长度这样做。矩阵中的最后一个列向量就是这个矩阵的位置,这个矩阵就是vec4(tx,ty,tz,1),然后这个矩阵定义了一个坐标系,然后用它来把摄影机的位置转换成统一的(0,0,0 ) - (1,1,1)框的体积。
创建该卷的反矩阵矩阵,并将凸轮从右侧乘以vec4(campos,1)到invVolMatrix。将生成的vec3作为UNIFORM发送到着色器。
只渲染背景(0,0,0)到(1,1,1)坐标在它们各自的volBox角上 - 就像你已经做过的那样。现在,你有你的着色器
- 均匀坎波斯
- 背面voltex协调
- 你知道你的volbox与对角线局部坐标系的单位立方体从(0,0,0)(1 ,1,1)
在着色器做:
varying vec3 vLocalUnitTexCoord; // backface interpolated coordinate
uniform vec3 LOCAL_CAM_POS; // localised camPos
struct AABB {
vec3 min; // (0,0,0)
vec3 max; // (1,1,1)
};
struct Ray {
vec3 origin; vec3 dir;
};
float getUnitAABBEntry(in Ray r) {
AABB b;
b.min = vec3(0);
b.max = vec3(1);
// compute clipping for box.min and box.max corner
vec3 rInvDir = vec3(1.0)/r.dir;
vec3 tMinima = (b.min - r.origin) * rInvDir;
vec3 tMaxima = (b.max - r.origin) * rInvDir;
// sort for nearest corner
vec3 tEntries = min(tMinima, tMaxima);
// find first real entry value of 3 t-distance values in vec3 container
vec2 tMaxEntryCandidates = max(vec2(tEntries.st), vec2(tEntries.pp));
float tMaxEntry = max(tMaxEntryCandidates.s, tMaxEntryCandidates.t);
}
vec3 getCloserPos(in vec3 camera, in vec3 frontFaceIntersection, in float t) {
float useFrontCoord = 0.5 + 0.5 * sign(t);
vec3 startPos = mix(camera, frontFaceIntersection, useFrontCoord);
return startPos;
}
vec4 main(void)
{
Ray r;
r.origin = LOCAL_CAM_POS;
r.dir = normalize(vLocalUnitTexCoord - LOCAL_CAM_POS);
float t = getUnitAABBEntry(r);
vec3 frontFaceLocalUnitTexCoord = r.origin + r.dir * t;
vec3 startPos = getCloserPos(LOCAL_CAM_POS, frontFaceLocalUnitTexCoord, t);
// loop for integration follows here
vec3 start = startpos;
vec3 end = vLocalUnitTexCoord;
...for loop..etc...
}
编码愉快!
相关问题
- 1. X3D中的体积渲染
- 2. VTK 3D内存体积渲染
- 3. 体积渲染DICOMDIR CT扫描
- 4. VTK体积渲染乳房造影
- 5. 积极渲染JComponent
- 6. 表面积/体积
- 7. 体积渲染从另一个方向更透明
- 8. GeometryModel3D面积和体积
- 9. NRRD体积切片方向的2D渲染是否反转?
- 10. Terraform ebs体积
- 11. 体积粒子
- 12. 延迟渲染中的光积累
- 13. Wpf体积效应?
- 14. Python库计算一个多面体的表面积和体积
- 15. 立体渲染
- 16. 字体渲染?
- 17. 球体体积法不起作用
- 18. 作为浮点的球体的体积
- 19. Java Clip的设置体积
- 20. 阅读麦克风体积
- 21. hyperbox的部分体积
- 22. 最大邮箱体积
- 23. Angularjs砌体图像堆积
- 24. HTMLMediaElement的非线性体积
- 25. iOS:更改设备体积
- 26. 泊坞窗链接体积
- 27. 从剖面图计算体积
- 28. 从图片中确定物体的体积
- 29. 在python中计算体积或表面积的好算法
- 30. C++ windows窗体中的字体渲染