【问题标题】:How do you draw objects that do not have texture with objects that have texture OPENGL如何用具有纹理的对象绘制没有纹理的对象 OPENGL
【发布时间】:2020-03-09 17:54:43
【问题描述】:

我有几个没有纹理坐标 UV 的对象传递到片段着色器,我只有两个具有纹理坐标 UV 的其他对象传递到片段着色器。没有纹理的物体仍然可见,但颜色暗淡。但在插入光方程后,它会变成黑色且不可见。我如何在不改变其原始颜色并保持光照方程的情况下绘制非纹理化对象(我已经为它们创建了颜色数组并将它们传递给顶点着色器)。我已经尝试过了,但我的片段着色器无法编译。

#version 330 

  in vec3 fragmentColor;
  in vec3 fragmentNormal;
  in vec2 UV;
  in vec4 Position;
  uniform vec4 lighteye;
  uniform float intensityh;
  uniform float intensityd;
  uniform float objectd;
  uniform vec4 worldCoord;

// 纹理数据 uniform sampler2D texture_Colors;

if(UV.x >= 0.0)
color = intensityh * texture2D( texture_Colors, UV ).rgb * diffuse + (intensityd * texture2D( texture_Colors, UV ).rgb * something) ;
else
color = vec4(fragmentColor,1.0);

【问题讨论】:

  • 请编辑您的问题并将您的整个着色器写入其中。

标签: opengl graphics glsl


【解决方案1】:

据我了解,您可以这样做:

color r = intensityh * texture2D( texture_Colours, worldCoord.xy).rgb * diffuse+( intensityd* texture2D (texture_Colours, worldCoord.xy).rgb * something

这应该根据您的对象在 3D 空间中的位置来纹理化您的对象。 但是,不要忘记为每个纹理启用 CPU 代码重复纹理,如下所示:

glTexParameterf(GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_WRAP_T, GL_REPEAT);  

【讨论】:

  • 我用 worldCoord.xy 做的,它只给了我一种颜色。 UV 坐标用于纹理。
  • @simon 既然您说并非所有对象都有 UV 坐标,因此必须使用基于片段位置的东西。我会试着多考虑一下。
  • @simon 您的代码中的位置是什么意思?屏幕坐标还是世界坐标?
  • 世界坐标是世界的眼睛。位置是视图矩阵与顶点的乘积
  • @simon 尝试在上面的答案中使用 Position.xy 而不是 worldCoord.xy。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多