當我從遠處觀察我的點雲時,所有點似乎都重疊,給人一種連續表面的印象,這是我試圖達到的效果。但是,當我接近雲時,可以看到各個點的平方以及它們之間的差距。我怎樣才能擺脫這些差距?例如,當相機變得更小時,讓點的尺寸更大?消除雲中點之間的差距 - 讓距離越近越大?
這是working example。如果按下向上箭頭放大,最終會看到單個點而不是連續的「雲」
順便說一句 - 如果您需要更多上下文,則此問題的詳細版本爲here。
感謝
尼爾
當我從遠處觀察我的點雲時,所有點似乎都重疊,給人一種連續表面的印象,這是我試圖達到的效果。但是,當我接近雲時,可以看到各個點的平方以及它們之間的差距。我怎樣才能擺脫這些差距?例如,當相機變得更小時,讓點的尺寸更大?消除雲中點之間的差距 - 讓距離越近越大?
這是working example。如果按下向上箭頭放大,最終會看到單個點而不是連續的「雲」
順便說一句 - 如果您需要更多上下文,則此問題的詳細版本爲here。
感謝
尼爾
我在the particle vertex shader for my Cubes這樣做,很可能在不必要的冗長的方式。
// Compute pixel scale for points
vec4 testPosition = eyePosition;
testPosition.x = uPixelsPerClipUnit.x/uTileSize * 1.2/*appearance fudge factor*/;
testPosition.y = 0.0;
testPosition = uPMatrix * testPosition;
gl_PointSize = testPosition.x/testPosition.w * animationScale;
這些都是你需要提供變量(與u
開始的那些我不得不制服):
eyePosition
是之前只是在眼空間點的位置(即投影矩陣被應用,並且在模型/視圖矩陣/矩陣被應用之後)。它的唯一部分我們真正關心的是z
軸。
uPixelsPerClipUnit
是被設置爲視口像素尺寸半vec2
- 它只是從− 1對1的剪輯空間尺度的轉換因子爲像素。
uTileSize
和animationScale
只是我的遊戲特定的參數,應該有多大。他們不需要在兩個不同的地方。
uPMatrix
是投影矩陣。
我們實際上是在這裏做越來越的
,並使用該設置點的大小。
(我想提供一個自包含的工作的例子,但我不認爲我會避開它,所以你得到的片段和半生不熟的解釋。)
驚人的 - 感謝 - 我會給你一個去,讓我知道如果我得到它的工作。我在這裏處於WebGL的深層次,所以很高興得到一些建議。 – nrob
我不明白eyePosition來自哪裏。它只是threejs/webgl爲您的便利創建的魔術變量之一,還是您已傳遞給着色器的某個變量?它似乎並不存在於我的着色器 – nrob
我認爲'eyePosition'必須在我的three.js版本中預定義爲'cameraPosition'。順便說一下,如果任何人有一個鏈接到什麼'modelMatrix','modelViewMatrix','projectionMatrix','viewMatrix','normalMatrix'的定義是什麼,那會讓我的生活更加愉快。可以隨時隨地找到任何信息不知道爲什麼它似乎是這樣一個祕密! – nrob