簡體   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