gpt4 book ai didi

c++ - 写入纹理 GLSL

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:54 25 4
gpt4 key购买 nike

我希望能够(在片段着色器中)将一个纹理添加到另一个纹理。现在我有投影纹理并想扩展它。

这是我目前所拥有的:

我还绘制了视锥体,蓝色/灰色测试图像沿着该视锥体被投影到不断旋转的几何体上。

我的顶点着色器:

    ProjTexCoord = ProjectorMatrix * ModelTransform * raw_pos;

我的片段着色器:

vec4 diffuse = texture(texture1, vs_st);
vec4 projTexColor = textureProj(texture2, ProjTexCoord);
vec4 shaded = diffuse; // max(intensity * diffuse, ambient); -- no shadows for now
if (ProjTexCoord[0] > 0.0 ||
ProjTexCoord[1] > 0.0 ||
ProjTexCoord[0] < ProjTexCoord[2] ||
ProjTexCoord[1] < ProjTexCoord[2]){
diffuse = shaded;
}else if(dot(n, projector_aim) < 0 ){
diffuse = projTexColor;
}else{
diffuse = shaded;
}

我想要实现的目标:

例如,当用户按下按钮时,我希望将蓝色/灰色纹理写入球体上的灰色纹理并随其旋转。将其想象成某种“拍照”或在球体顶部绘画,以便在按下按钮后蓝色/灰色纹理与球体一起旋转。

由于片段着色器对每个像素进行操作,因此应该可以逐个像素地从一个纹理复制到另一个纹理,但我不知道如何,我可能在谷歌上搜索了错误的东西。

我怎样才能在技术上做到这一点?什么方法最通用?非常感谢建议,如果需要更多代码,请告诉我。

最佳答案

需要说明的是,您想将贴花烘焙到球体的灰色纹理中。

在绘制另一个对象时写入灰色纹理的问题在于它不是一对一的。您可能会向同一个纹理元素写入两次或更多次,或者单个片段可能需要写入灰色纹理中的许多纹理元素。这听起来可能很有吸引力,因为您已经在一个地方获得了所有内容的坐标,但我不会这样做。

我首先创建一个纹理,其中包含灰色纹理中每个纹素的对象空间位置。这是关键,因此当您单击时可以渲染到灰色纹理(使用 FBO)并知道每个纹素在当前 View 或投影纹理 View 中的位置。可能存在相同的纹理位出现在多个三角形上的边缘情况。您可以通过使用纹理坐标作为顶点位置将球体渲染为灰色纹理来实现。为此,您可能需要一个浮点纹理,下图可能不是球体的纹理映射,但它可以用于演示 :P。

enter image description here

因此,当您单击时,您会在启用 alpha 混合的情况下将全屏四边形渲染到灰色纹理。使用灰色纹理对象空间位置,每个片段计算蓝色纹理投影内的图像空间位置。丢弃纹理外部的碎片,并在内部的碎片中采样/混合。

enter image description here

关于c++ - 写入纹理 GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115456/

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