繁体   English   中英

Autodesk Forge Viewer 中的自定义点着色器在正交摄影机上表现异常

[英]Custom Point Shader in Autodesk Forge Viewer behaves weirdly with orthograpic Camera

这篇博文之后,我正在使用 PointCloud 来快速渲染精灵。 透视相机一切正常。 但是,如果我通过viewer.navigation.toOrthographic()切换到正交相机,则无法正确计算点的大小。 有谁知道问题是什么或我可以在哪里找到一些线索?

我的顶点着色器

#if NUM_CUTPLANES > 0
varying highp vec3 vWorldPosition;
#endif
attribute float mVisible;
attribute float mSize;
varying float vMVisible;
uniform float scale;
void main() {
    vMVisible = mVisible;
    
    #if NUM_CUTPLANES > 0
    vec4 _worldPosition = modelMatrix * vec4( position, 1.0 );
    vWorldPosition = _worldPosition.xyz;
    #endif

    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
    gl_Position = projectionMatrix * mvPosition;
    gl_PointSize = mSize * (scale / (-mvPosition.z) );
}

缩小

正常大小的点

放大

非常大的点

放大一点

不再显示积分

问题出在片段着色器的最后几行:

vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
gl_Position = projectionMatrix * mvPosition;
gl_PointSize = mSize * (scale / (-mvPosition.z) );

当使用正交投影而不是透视投影时, mvPosition (转换为“标准化设备坐标”的位置)可能具有非常不同的值,因此将点大小除以mvPosition.z可能会产生意想不到的结果。

您可能需要通过一些常量(或通过您从JavaScript代码提供的制服)来限制最终点的大小,例如:

gl_PointSize = clamp(mSize * scale / -mvPosition.z, 10.0, 100.0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM