- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果你想渲染一个冒名顶替的几何体(比如 a sphere ),那么标准做法是使用两个三角形来绘制它(比如通过一个顶点并使用几何着色器制作一个三角形 strip )。
这很好,因为它允许相当简单地设置广告牌的范围:您可以直接计算实际的世界空间位置。
几何着色器可以交替输出点图元,我看不出他们不应该这样做的原因。唯一的问题是找到一些方法来扩展 gl_PointSize
让你得到那个效果。
我能找到的唯一先例是this question (我不确定他的答案是否正确)和this question (没有答案)。
值得注意的是,用距离正确缩放点相当简单(通过执行 gl_PointSize = constant/length(gl_Position)
,但这不是可控的;你不能说例如:我希望这个点看起来像两个世界单位。
所以:有人知道怎么做吗?
最佳答案
一个直截了当的想法是将粒子顶部和底部的一个点转换到屏幕空间并找到距离。这可以很好地取消,并且只使用 y
非常简单协调。
广告牌是屏幕对齐的,并且 View 矩阵通常不会缩放,因此世界空间中的粒子大小与眼睛空间相同。这只是将投影留给 NDC,除以 w
并按视口(viewport)大小缩放。
一个典型的投影矩阵,P
,可能看起来像这样...
[ +1.2990 +0.0000 +0.0000 +0.0000 ]
[ +0.0000 +1.7321 +0.0000 +0.0000 ]
[ +0.0000 +0.0000 -1.0002 -0.0020 ]
[ +0.0000 +0.0000 -1.0000 +0.0000 ]
y_eye
开头,眼睛空间中的y坐标,图像空间坐标
y_image
以像素为单位...
pixelSize = vpHeight * P[1][1] * radius / w_clip
P[1][1] = 1 / tan(fov_y / 2)
.
w_clip
是
gl_Position.w
,这也是
-z_eye
(来自透视矩阵中的
-1
)。为保证您的点涵盖您想要的每个像素,这可能需要一个额外的小常数。
#version 150
in vec4 osVert;
uniform mat4 projectionMat;
uniform mat4 modelviewMat;
uniform vec2 vpSize;
flat out vec2 centre;
flat out float radiusPixels;
const float radius = 1.0;
void main()
{
gl_Position = projectionMat * modelviewMat * osVert;
centre = (0.5 * gl_Position.xy/gl_Position.w + 0.5) * vpSize;
gl_PointSize = vpSize.y * projectionMat[1][5] * radius / gl_Position.w;
radiusPixels = gl_PointSize / 2.0;
}
#version 150
flat in vec2 centre;
flat in float radiusPixels;
out vec4 fragColour;
void main()
{
vec2 coord = (gl_FragCoord.xy - centre) / radiusPixels;
float l = length(coord);
if (l > 1.0)
discard;
vec3 pos = vec3(coord, sqrt(1.0-l*l));
fragColour = vec4(vec3(pos.z), 1.0);
}
关于opengl - gl_PointSize 对应世界空间大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780145/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!