gpt4 book ai didi

opengl - GLSL 顶点着色器中的眼睛空间像素宽度

转载 作者:行者123 更新时间:2023-12-01 14:37:58 25 4
gpt4 key购买 nike

我想在 glsl 顶点着色器中计算当前顶点位置的像素投影金字塔的眼空间宽度,但我似乎无法正确计算。这是一个明显不正确的示例:

// GLSL VERTEX SHADER
#version 410 compatibility

uniform vec4 viewport; // same as glViewport​
in vec4 gl_Vertex;

void main ()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
float pixelWidth = gl_Position.z / viewport.z;
<snip>

但这并没有考虑 FOV 或裁剪平面。

最佳答案

我通过数学计算并弄明白了。 :) 正如我所希望的那样,不需要额外的矩阵转换,只需一个除法:

// GLSL VERTEX SHADER
#version 410 compatibility

uniform vec4 viewport; // same as glViewport​
in vec4 gl_Vertex;

float pixelWidthRatio = 2. / (viewport.z * gl_ProjectionMatrix[0][0]);

void main ()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
float pixelWidth = gl_Position.w * pixelWidthRatio;
<snip>

或者:

<snip>
float pixelHeightRatio = 2. / (viewport.w * gl_ProjectionMatrix[1][1]);

void main ()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
float pixelHeight = gl_Position.w * pixelHeightRatio;
<snip>

正如预期的那样,如果像素是正方形,pixelWidthpixelHeight 是相同的。

关于opengl - GLSL 顶点着色器中的眼睛空间像素宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com