【发布时间】:2019-05-12 16:30:46
【问题描述】:
我是一名图形编程初学者,正在使用自己的引擎并尝试实现平截头体对齐的体积渲染。
这个想法是将多个平面渲染为横跨视锥的垂直切片,然后将这些平面的世界坐标用于程序体积。
将切片渲染为 3d 模型并使用顶点位置作为世界空间坐标可以正常工作:
//Vertex Shader
gl_Position = P*V*vec4(vertexPosition_worldspace,1);
coordinates_worldspace = vertexPosition_worldspace;
结果:
但是,在截锥体空间中渲染切片并尝试对世界空间坐标进行逆向工程并没有得到预期的结果。我得到的最接近的是:
//Vertex Shader
gl_Position = vec4(vertexPosition_worldspace,1);
coordinates_worldspace = (inverse(V) * inverse(P) * vec4(vertexPosition_worldspace,1)).xyz;
结果:
我的猜测是,标准投影矩阵以某种方式摆脱了一些关键的深度信息,但除此之外,我不知道我做错了什么以及如何解决它。
【问题讨论】:
标签: opengl matrix-inverse projection-matrix frustum volume-rendering