gpt4 book ai didi

opengl - 在顶点着色器中置换顶点

转载 作者:行者123 更新时间:2023-12-02 08:48:31 24 4
gpt4 key购买 nike

我的代码创建了一个包含大量顶点的网格,然后在顶点着色器中将它们替换为高度的随机噪声值。使用

移动
glTranslated(-camera.x, -camera.y, -camera.z);

工作正常,但这意味着你可以走到网格的边缘。

我考虑过将相机位置发送到着色器,并让整个位移被它抵消。因此最终的顶点着色器代码:

uniform vec3 camera_position;
varying vec4 position;

void main()
{
vec3 tmp;
tmp = gl_Vertex.xyz;
tmp -= camera_position;
gl_Vertex.y = snoise(tmp.xz / NOISE_FREQUENCY) * NOISE_SCALING;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
position = gl_Position;
}

编辑:我修复了一个缺陷,顶点本身不应该水平移动。

但出于某种原因,当我运行此程序并更改相机位置时,屏幕会闪烁但没有任何移动。顶点被噪声值正确置换,并且着色和一切正常,但置换没有移动。

作为引用,这里是 git 存储库:https://github.com/Orpheon/Synthworld

我做错了什么?

PS:“闪烁”是错误的。就好像在某些位置它不绘制任何东西,而其他位置它从位置 0 开始绘制正常场景,所以如果我不停地移动它就会闪烁。我可以停在它保持黑色的地方,也可以停在它保持正常的地方。

最佳答案

gl_Position = ftransform();

这就是你做错的地方。 ftransform 不会隐含地将 gl_Vertex 作为参数。它只是做了它应该做的事情:完全像固定功能管道一样执行顶点位置的转换。所以它使用 gl_Vertex 最初 的值。

您需要对此进行适当的转换:

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

关于opengl - 在顶点着色器中置换顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523958/

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