我有两种纹理。一个是jpg,一个是PNG。我已经渲染了一个立方体,我想使用jpg图像作为背景在立方体的每一个面,然后在这个背景上有png。我尝试了mix()
,但我可以通过png看到背景,我不希望这样。有没有什么功能可以为我做到这一点?
片段着色器:
#version 330 core
struct Light {
vec3 direction;
vec3 ambient;
vec3 diffuse;
vec3 specular;
};
struct Material {
float shininess;
};
out vec4 FragColor;
in vec3 FragPos;
in vec3 Normal;
in vec2 TexCoords;
uniform vec3 viewPos;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform Light light;
uniform Material material;
void main() {
// ambient
vec3 ambient = light.ambient * mix(texture(texture1, TexCoords), texture(texture2, TexCoords), 0.0).rgb;
// diffuse
vec3 norm = normalize(Normal);
vec3 lightDir = normalize(-light.direction);
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = light.diffuse * diff * mix(texture(texture1, TexCoords), texture(texture2, TexCoords), 0.0).rgb;
// specular
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
vec3 specular = light.specular * spec * mix(texture(texture1, TexCoords), texture(texture2, TexCoords), 0.0).rgb;
vec3 result = ambient + diffuse + specular;
FragColor = vec4(result, 1.0);
}
texture1
是png,texture2
是JPG。
您需要根据PNG纹理的alpha通道混合颜色。假设texture1是JPG而texture2是PNG,混合
texture1
和texture2
取决于texture2
的alpha通道:
vec4 color_jpg = texture(texture1, TexCoords);
vec4 color_png = texture(texture2, TexCoords);
vec3 color = mix(color_jpg.rgb, color_png.rgb, color_png.a);
片段着色器:
void main()
{
vec4 color_jpg = texture(texture1, TexCoords);
vec4 color_png = texture(texture2, TexCoords);
vec3 color = mix(color_jpg.rgb, color_png.rgb, color_png.a);
// ambient
vec3 ambient = light.ambient * color;
// diffuse
vec3 norm = normalize(Normal);
vec3 lightDir = normalize(-light.direction);
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = light.diffuse * diff * color;
// specular
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
vec3 specular = light.specular * spec * color;
vec3 result = ambient + diffuse + specular;
FragColor = vec4(result, 1.0);
}
问题内容: 如何使用JFreeChart在一张图像中绘制多个数据集的图表? 本质上,我想在一张图中绘制股票的价格及其移动平均线。 我尝试获取XYPlot并添加第二个数据集,但是它不起作用。 还是有专门用于股票交易的Java库更易于使用? 问题答案: 请注意,这是“ 接口的简单实现。此实现仅支持一个系列。” 您可能想要,它也可以实现并且可以容纳多个。
我想生成两个柱状图进入2个不同的情节。为什么不是像http://www.java2s.com/code/java/chart/jfreeChartMultiplePieChartDemo1.htm这样的图,而是条形图,而不是饼形图。 我正在使用servletUtilities.saveChartaspng(),它将JFreeChart对象作为(第一个)参数,但我不知道如何创建我的JFreeChar
问题内容: 我正在尝试匹配两个图像的直方图(在MATLAB中,这是可以做到的) 使用 ). 标准Python库中是否有可用的等效函数?我已经 查看了OpenCV、scipy和numpy,但没有看到任何类似的功能。 问题答案: 我以前写过一个答案 这里解释如何做 图像直方图的分段线性插值 高光/中音/阴影的特定比率。 相同的基本原则是[直方图]的基础 匹配两人之间 图像。基本上,你要计算出你的源和目
我想从二值图像中得到圆形状的质心,但输出给出了不止一个质心。我使用的是opencv web教程文档中关于图像时刻和修改的代码。供参考,我使用的是C++API OpenCV。 输出结果是: 我预计,文本输出可能会从3个轮廓中给出3个质心,但实际上是7个轮廓(轮廓[0],...,轮廓[6])。
我的屏幕上有两个组件,第一个是图像,第二个是下面的网格和图表。我想使图像居中,使其水平地位于中心,并且在第二个组件之上。第二个组件应该在图像的下方,而不是它的右边。我该怎么做呢? 我试过衬垫和对齐,但这些似乎对我不起作用。
有了这个功能,我可以在Android系统的OpenGL ES 1.0中创建一个球体: 我现在的问题是,我想在球体上使用这个纹理,但是只创建了一个黑色的球(当然,因为右上角是黑色的)。我使用这个纹理坐标是因为我想使用整个纹理: 要正确使用纹理,我需要做什么?